Puppet-Agenten erzeugen zahlreiche Fehlermeldungen: "Could not set 'file' on ensure: incorrect header check"

Kürzlich hatte ich in meiner Homelab-Umgebung den Fall, dass meine über Puppet verwalteten Linux-Systeme zahlreiche Fehlermeldungen beim Aktualisieren des Katalogs generierten:

1# puppet agent --test
2Error: /File[/var/lib/puppet/lib/puppet/parser/functions/load_module_metadata.rb]/ensure: change from absent to file failed: Could not set 'file' on ensure: incorrect header check
3Error: Could not set 'file' on ensure: incorrect header check
4Error: Could not set 'file' on ensure: incorrect header check
5Wrapped exception:
6incorrect header check
7...

Fehlerhafte Foreman-Hostübersicht

Der Fehler trat zuerst nach dem letzten Katello-Upgrade auf 3.5 auf. Ich hatte damals auch Puppet von Version 3 auf 4 angehoben:

1katello# puppet --version
24.10.12

Gemäß der Dokumentation werden Puppet 3-Clients weiterhin unterstützt. Nach zahlreichen Agent-Neuinstallationen und weiteren Analysen wusste ich nicht wirklich weiter.

Mein Arbeitskollege Mirko Schmidt gab mir den Tipp, den Puppet-Agenten unabhängig der offiziellen Support-Matrix zu aktualisieren. Auf meinen Systemen entstammte Puppet dem EPEL-Repository - in einer stark veralteten Version:

1# rpm -qa | grep puppet
2puppet-3.6.2-3.el7.noarch
3# yum info puppet|grep -i "from repo"
4From repo   : EPEL7 x86_64

Puppet bietet in Form von Puppet Collections ein entsprechendes Software-Repository mit aktuellen Paketen:

1# yum localinstall http://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Die Aktualisierung des Agenten verlief problemfrei - das Paket puppet wird dabei durch puppet-agent ersetzt:

1# systemctl stop puppet
2# kill $(cat /var/run/puppet/agent.pid) ; killall puppet
3# yum update -y puppet

Hierbei ändern sich auch die Pfade der Konfigurationsdateien. Die Dateien unterhalb /etc/puppet sind nach der Aktualisierung unterhalb /etc/puppetlabs/puppet zu finden.

Da der komplette Agent ersetzt wurde, muss dieser auch neukonfiguriert werden. Vorherige Konfigurationsdateien lassen sich in der Regel weiter verwenden. Ich empfehle jedoch, ein Backup der ursprünglichen Konfigurationsdatei des neuen Agenten zu erstellen, bevor die alte Konfiguration übernommen wird:

1# cp /etc/puppetlabs/puppet/puppet.conf /etc/puppetlabs/puppet/puppet.conf.initial
2# cp /etc/puppet/puppet.conf.rpmsave /etc/puppetlabs/puppet/puppet.conf

Bevor der neue Agent gestartet wird, muss das bisherige Zertifikat im entsprechenden Smart Proxy entfernt werden. Hierzu genügen Klicks in der Foreman-Oberfläche auf Infrastructure -> Smart Proxies -> Proxy -> Puppet CA -> Certificates -> Revoke.

Verwerfen von Puppet-Zertifikaten über den Smart Proxy

Anschließend wird der Puppet-Agent ausgeführt, um ein neues SSL-Zertifikat zu erstellen und dieses beim Smart Proxy einzureichen.

1# /opt/puppetlabs/bin/puppet agent --test --noop
2...
3Exiting; no certificate found and waitforcert disabled

Mit einem Klick auf Sign in der Foreman-Oberfläche wird dieses importiert und der Agent kann aktiviert werden:

1# systemctl enable puppet ; systemctl start puppet

Anschließend verschwanden die Fehlermeldung und der Infrastruktur-Zustand normalisierte sich:

Bereinigte Infrastruktur

Übersetzungen: