From f108ca852b67355ddeead4b64b140565dc65cfed Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Sun, 13 Sep 2026 22:40:25 +1000 Subject: [PATCH 1/2] puppet: install toml into the puppetserver gem path Server-side functions run in the puppetserver JRuby, whose gem path is separate from the agent CRuby one, so catalog compiles fail with `LoadError: no such file to load -- toml`. - Install toml via `puppetserver gem`, matching the puppetserver_gem resource in puppet-prod's profiles::puppet::gems - Report each failed gem install to stderr instead of exiting silently - Keep the hook exiting zero: the entrypoint runs post-startup hooks under errexit, where a non-zero exit kills a serving compiler --- .../puppet/resources/additional-ruby-gems.sh | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/base/puppet/resources/additional-ruby-gems.sh b/apps/base/puppet/resources/additional-ruby-gems.sh index 3ce798a..040238e 100755 --- a/apps/base/puppet/resources/additional-ruby-gems.sh +++ b/apps/base/puppet/resources/additional-ruby-gems.sh @@ -1,9 +1,29 @@ #!/bin/bash -set -e +# No `set -e`: the entrypoint runs post-startup hooks under errexit, so a non-zero +# exit here kills an already-serving compiler. Failures are logged, not fatal. +set -uo pipefail + +rc=0 + +install_gem() { + local label=$1 + shift + if ! "$@"; then + echo "ERROR: ${label} gem install failed: $*" >&2 + rc=1 + fi +} echo "Installing additional Ruby gems..." -/opt/puppetlabs/puppet/bin/gem install deep_merge -/opt/puppetlabs/puppet/bin/gem install ipaddr -/opt/puppetlabs/puppet/bin/gem install hiera-eyaml -/opt/puppetlabs/puppet/bin/gem install toml -echo "Additional Ruby gems installed successfully" +for gem in deep_merge ipaddr hiera-eyaml toml; do + install_gem agent /opt/puppetlabs/puppet/bin/gem install "$gem" +done + +# Server-side functions load from the puppetserver JRuby gem path, not the agent one. +install_gem puppetserver /opt/puppetlabs/bin/puppetserver gem install toml + +if [ "$rc" -ne 0 ]; then + echo "ERROR: additional Ruby gems incomplete; catalog compiles may fail" >&2 +else + echo "Additional Ruby gems installed successfully" +fi -- 2.47.3 From d246ce10e5aaf354d07998bcd383a71a3f5a9cc9 Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Sun, 13 Sep 2026 22:59:18 +1000 Subject: [PATCH 2/2] Reduce puppetserver toml change to the single gem install --- .../puppet/resources/additional-ruby-gems.sh | 34 +++++-------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/apps/base/puppet/resources/additional-ruby-gems.sh b/apps/base/puppet/resources/additional-ruby-gems.sh index 040238e..fd7b909 100755 --- a/apps/base/puppet/resources/additional-ruby-gems.sh +++ b/apps/base/puppet/resources/additional-ruby-gems.sh @@ -1,29 +1,11 @@ #!/bin/bash -# No `set -e`: the entrypoint runs post-startup hooks under errexit, so a non-zero -# exit here kills an already-serving compiler. Failures are logged, not fatal. -set -uo pipefail - -rc=0 - -install_gem() { - local label=$1 - shift - if ! "$@"; then - echo "ERROR: ${label} gem install failed: $*" >&2 - rc=1 - fi -} +set -e echo "Installing additional Ruby gems..." -for gem in deep_merge ipaddr hiera-eyaml toml; do - install_gem agent /opt/puppetlabs/puppet/bin/gem install "$gem" -done - -# Server-side functions load from the puppetserver JRuby gem path, not the agent one. -install_gem puppetserver /opt/puppetlabs/bin/puppetserver gem install toml - -if [ "$rc" -ne 0 ]; then - echo "ERROR: additional Ruby gems incomplete; catalog compiles may fail" >&2 -else - echo "Additional Ruby gems installed successfully" -fi +/opt/puppetlabs/puppet/bin/gem install deep_merge +/opt/puppetlabs/puppet/bin/gem install ipaddr +/opt/puppetlabs/puppet/bin/gem install hiera-eyaml +/opt/puppetlabs/puppet/bin/gem install toml +# Under set -e a failed install kills the entrypoint post-startup hooks, taking down an already-serving compiler. +/opt/puppetlabs/bin/puppetserver gem install toml +echo "Additional Ruby gems installed successfully" -- 2.47.3