[teleport-update] Add support for version pinning #49307
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements manual version pinning for agent auto-updates by adding a
pin
subcommand to theteleport-update
command. This command installs, verifies, and locks the Teleport agent version, preventingteleport-update update
from changing the version automatically.teleport-update pin
takes the same arguments asteleport-update enable
, and can be used to bootstrap an agent installation without auto-updates. Thepin
subcommand can be run with an explicit version (--force-version
), but by default it will pin the cluster's recommended version. Unlikeenable
, the--force-version
flag is not hidden forpin
. Theteleport-update pin
subcommand always queries the proxy to determine enterprise/fips status.This PR also implements automatic version pinning. If
teleport-update update
fails due to an issue with the new installation (e.g., crashing), the failed version is recorded instatus
inupdate.yaml
. That version is skipped until the version is successfully installed withpin
orenable
.The
teleport-update
binary will be used to enable, disable, and trigger automatic Teleport agent updates. The new auto-updates system manages a local installation of the cluster-specified version of Teleport stored in/var/lib/teleport/versions
.RFD: #47126
Goal (internal): https://github.com/gravitational/cloud/issues/10289
Example: Pinning the version away from a broken installation