Skip to content

Client tools auto update logic for multiple platforms#46587

Closed
vapopov wants to merge 4 commits intomasterfrom
vapopov/client-tools-autoupdate-merge
Closed

Client tools auto update logic for multiple platforms#46587
vapopov wants to merge 4 commits intomasterfrom
vapopov/client-tools-autoupdate-merge

Conversation

@vapopov
Copy link
Copy Markdown
Contributor

@vapopov vapopov commented Sep 13, 2024

In this PR implemented logic for client tools autoupdate {tsh, tctl}, added integration tests for simulations of downloading, unpacking and replacing tools binaries from test CDN server (pre-combiled binary which contains only separated updater logic).

changelog: Added auto update logic for tsh, tctl client tools

@vapopov vapopov requested a review from sclevine September 13, 2024 06:06
@vapopov vapopov force-pushed the vapopov/client-tools-autoupdate-merge branch from 974e35d to 433f481 Compare September 13, 2024 18:01
@vapopov vapopov self-assigned this Sep 13, 2024

return archive, archive + ".sha256", nil
}

Copy link
Copy Markdown
Member

@sclevine sclevine Sep 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I put together a more productionized version of these methods for the agent version, which adds disk space checking, timeouts, context cancellation, etc.: https://github.com/gravitational/teleport/compare/sclevine/teleport-update-enable

We could try to reuse those, but the use cases are a bit different. For now, you might want to look at some of the differences. E.g., use of the client and contexts to handle graceful cancellation, and limiting the number of bytes read over the network.

Add request timeout and default client
Feature flag check
@vapopov vapopov requested a review from russjones September 23, 2024 16:20
@vapopov vapopov force-pushed the vapopov/client-tools-autoupdate-merge branch from 6e7505c to 9e215fd Compare September 23, 2024 18:22
return requestedVersion, true
}

return toolsVersion, false
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@russjones If the user downloads newer version of tsh/tctl and let say execute it from download directory, should we alway re-execute with saved version from tools directory (where version might be older)

@@ -0,0 +1,26 @@
//go:build webassets_ent
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be better to introduce new build tag for enterprise version instead of reusing this one for web assets?

@vapopov vapopov marked this pull request as ready for review September 23, 2024 18:58
@github-actions github-actions Bot added size/xl tctl tctl - Teleport admin tool tsh tsh - Teleport's command line tool for logging into nodes running Teleport. labels Sep 23, 2024
@public-teleport-github-review-bot
Copy link
Copy Markdown

@vapopov - this PR will require admin approval to merge due to its size. Consider breaking it up into a series smaller changes.


switch runtime.GOOS {
case "darwin":
archive = baseUrl + "/tsh-" + toolsVersion + ".pkg"
Copy link
Copy Markdown
Contributor Author

@vapopov vapopov Sep 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one should be replaced with "/teleport" + toolsVersion + ".pkg" only one issue we currently have is that teleport-{version}.pkg has tsh and tctl binary without support of the TouchID for tsh, so we need to install tsh-{version}.pkg additionally, this one is valid only for the <v16, for the >v17 we should have everything in one teleport-{version}.pkg package

Would be better to have separate packages for all platforms with the tsh and tctl only to minimize the download size for the client autoupdate.

cc @russjones

Copy link
Copy Markdown
Contributor

@hugoShaka hugoShaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2k lines is a bit intense to review, I'll definitely miss some stuff here.

Would you mind splitting the PR in smaller chunks? I think at least the webclient, common.update and tctl changes can be separated, but feel free to split using any other criteria.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tool's content should be limited to bootstrapping the CLI and commands. Complex logic should live in lib/.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, will try to split the logic, but it actually interconnected. Locking might be delivered separately, also integration tests kind of heavy. Webclient btw temporally added until this PR is merged

@vapopov
Copy link
Copy Markdown
Contributor Author

vapopov commented Sep 27, 2024

Closing in prior to split logic in series of PRs:

  • filesystem lock file;
  • packaging/un-packaging for the archives depends on the operation system;
  • updater logic with the integration tests;
  • integration of updater to tsh/tctl tools;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xl tctl tctl - Teleport admin tool tsh tsh - Teleport's command line tool for logging into nodes running Teleport.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants