Skip to content

Promote profile::boot_security_upgrade to sandbox and modules/ - #295

Merged
akuzminsky merged 1 commit into
mainfrom
promote-boot-security-upgrade
Aug 21, 2026
Merged

Promote profile::boot_security_upgrade to sandbox and modules/#295
akuzminsky merged 1 commit into
mainfrom
promote-boot-security-upgrade

Conversation

@akuzminsky

Copy link
Copy Markdown
Member

Follows #294. Copies the profile verbatim from environments/development into environments/sandbox and the global modules/ tree, so all three environments carry an identical profile module again.

No behavior change from what has been running in development: same opt-in profile, same best-effort InspectorEc2Exclusion drop, and profile::github_runner consuming it with budget => 480 / fail_on_error => true. The runner-specific gha-boot-security-upgrade.sh is removed from both trees.

Validated in development first

A full instance refresh completed at 100% — i-0028068b3d44d1b4b launched, i-0d969d2f86041003a terminated — with the upgrade succeeding on attempt 1 and the tag call returning clean.

Global tree checked on its own

modules/ has no profile::apt_lock_timeout yet, so it was worth confirming the global tree satisfies this profile without help from an environment overlay. Catalog compiles against modulepath modules alone, and against both environment paths, produce an identical exec:

exec require: Class[Profile::Unattended_upgrades], File[/usr/local/bin/boot-security-upgrade.sh],
              Package[awscli], Package[cloud-guest-utils]
command     : /usr/local/bin/boot-security-upgrade.sh --budget 480 \
              --marker /run/boot-security-upgrade.done --exclusion-tag InspectorEc2Exclusion
creates     : /run/boot-security-upgrade.done

All four require edges resolve in every tree. cloud-guest-utils is declared nowhere else in the repo, so no duplicate-declaration collision. All three copies of the three files are byte-identical, and no reference to the old script name remains anywhere.

Still not covered

The Terraform side still has to tag instances with InspectorEc2Exclusion at launch. delete-tags ignores a key that isn't there, so a clean return proves the permission exists but not that the tag was set. Until that lands, this profile patches early — useful on its own — but doesn't yet close the Inspector window.

Also expect a one-off Could not retrieve information from ... gha-boot-security-upgrade.sh error in the first of ih-puppet's two applies on instances still booting older baked puppet-code. That is the old catalog referencing a source the mid-catalog Package['puppet-code'] upgrade just deleted; only the second apply's exit code is captured, and it recompiles clean. Same as observed on #294.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KLGAXtoyoakLXUjaJSL4M3

Copies #294 verbatim from environments/development into
environments/sandbox and the global modules/ tree, so all three
environments carry an identical profile module again.

No behavior change from what ran in development: the same opt-in
profile, the same best-effort InspectorEc2Exclusion drop, and
profile::github_runner consuming it with budget 480 / fail_on_error
true. The runner-specific gha-boot-security-upgrade.sh is removed
from both trees.

Validated in development before promoting: a full instance refresh
completed at 100% (i-0028068b3d44d1b4b launched, i-0d969d2f86041003a
terminated), with the upgrade succeeding on attempt 1 and the tag call
returning clean.

modules/ has no profile::apt_lock_timeout yet, so it was worth
confirming the global tree satisfies this profile on its own: catalog
compiles against modulepath "modules" alone, and against both
environment paths, produce an identical exec -- same command, same
creates marker, and all four require edges resolving including
Package[awscli] and Package[cloud-guest-utils].
@akuzminsky
akuzminsky merged commit 320db52 into main Aug 21, 2026
2 checks passed
@akuzminsky
akuzminsky deleted the promote-boot-security-upgrade branch August 21, 2026 15:19
akuzminsky added a commit that referenced this pull request Aug 21, 2026
First non-runner consumer of the profile. Jumphosts take the default
fail_on_error => false: unlike a disposable runner, a bastion is
long-lived, so an unpatched-but-reachable host beats an ABANDONed one.

One file covers every environment -- role/ exists only in global
modules/, environments carry just profile/ -- and it resolves because
#295 put the profile in all three trees.

Verified by compiling a full role::jumphost catalog (external modules
stubbed, provision-time facts supplied) against all three modulepaths:
identical exec in each, returns [0,1] confirming the log-and-continue
default, and Package[cloud-guest-utils] and Package[awscli] appearing
exactly once -- no duplicate declaration against profile::base or
profile::jumphost.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants