Puppet (chyby)
Nelze stáhnout katalog
Tato chybová zpráva se objevuje pokud z nějakého důvodu master odmítá komunikaci s klientem. K tomu může dojít z více různých příčin.
Neběží master
- err: Could not retrieve catalog from remote server: Connection refused - connect(2)
Problémy spojené s certifikátem
- Certifikát, který má klient k dispozici aktuální master neautorizoval, nebo z nějakého důvodu došlo k jeho revokaci - odvolání...
- err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server session ticket A: sslv3 alert certificate revoked
- Také mohl stroj používat původně jiný master...
- err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed. This is often because the time is out of sync on the server or client
Nejprve je třeba zkontrolovat, jestli pro příslušného klienta není nějaký certifikát na stroji master vydaný.
Pokud ano, tak je třeba nejprve provést odstranění původního certifikátu.
Protože klient má u sebe má v podadresáři /var/lib/puppet
certifikát a soubory, které jsou už neplatné, musí se před vygenerováním nové žádosti odstranit.
support (KVM) :~# find /var/lib/puppet -type f -print0 | xargs -0r rm
Teprve pak lze vygenerovat novou žádost o certifikát , kterou je nutné na stroji master opět podepsat.
Chybějící nastavení nodu v manifestu
- Překlep v definici názvu klientského nodu
- err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find default node or by name with 'temporary.felk.cvut.cz, temporary.felk.cvut, temporary.felk, temporary' on node temporary.felk.cvut.cz
Je třeba zkontrolovat, zda-li definice nodu v manifestu odpovídá jménu, kterým se klient identifikuje vůči stroji master.
Chyba v syntaxi manifestu
Vůbec nejčastější příčinou je chyba v syntaxi. Pozitivní je, že výpis obsahuje i upřesnění ve kterém souboru a na kterém řádku je třeba chybu hledat.
- err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not parse for environment testing: Syntax error at '{'; expected '}' at /etc/puppet/environments/testing/manifests/nodes.pp:149 on node temporary.felk.cvut.cz
Aplikace neexistující třídy
K této chybě může dojít buď díky překlepu, nebo pokud nejsou splněny všechny závislosti i modulů. Níže uvedený ukázkový výpis chyby obsahuje upozornění, že v manifestu stroje temporary.felk.cvut.cz je použita třída s názvem 'tree', která však neexistuje. To může být relikt a nebo naopak třída kterou je nutno zahrnout do závislostí modulu.
- err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class tree for temporary.felk.cvut.cz on node temporary.felk.cvut.cz
Chybějící šablona či neplatná cesta k šabloně
Šablona z modulu
- err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find template 'temporary/test_source_on_master' at /etc/puppet/environments/testing/modules/temporary/manifests/init.pp:243 on node temporary.felk.cvut.cz
file {"/tmp/subdir/test.txt":
content => template("temporary/test_source_on_master"),
ensure => present,
}
Šablona z centrálního úložiště
- err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find template 'test_source_on_master' at /etc/puppet/environments/testing/modules/temporary/manifests/init.pp:243 on node temporary.felk.cvut.cz
file {"/tmp/subdir/test.txt":
content => template("test_source_on_master"),
ensure => present,
}
Šablona identifikovaná absolutní cestou
- err: Could not retrieve catalog from remote server: Error 400 on SERVER: Failed to parse template /etc/puppet/environments/testing/modules/support/files/test_source_on_master:
- Filepath: /usr/lib/ruby/vendor_ruby/puppet/parser/templatewrapper.rb
- Line: 100
- Detail: No such file or directory - /tmp/test_source_on_master
- at /etc/puppet/environments/testing/modules/support/manifests/init.pp:243 on node temporary.felk.cvut.cz
file {"/tmp/subdir/test.txt":
content => template("/tmp/test_source_on_master"),
ensure => present,
}
Chyby při použití zdrojových souborů
Při použití typu file se může stát že..
- je překlep v cestě k souboru, ze kterého se má obsah vzít.
- na cílovém místě zdrojový soubor chybí.
Chybějící soubor či neplatná cesta k souboru
Cesta k souboru z centrálního úložiště
- err: Failed to apply catalog: Parameter source failed: Cannot use relative URLs 'test_source_on_master' at /etc/puppet/environments/testing/modules/temporary/manifests/init.pp:245
Není-li v cestě uveden žádný název modulu, pak se automaticky předpokládá, že je soubor uložen v centrálním úložišti Puppetu - obvykle adresář /etc/puppet/files
file {"/tmp/subdir/test.txt":
source => "test_source_on_master",
ensure => present,
}
Neplatná absolutní cesta k souboru
- err: /Stage[main]/Temporary::Novell/File[/tmp/subdir/test.txt]: Could not evaluate: Could not retrieve information from environment testing source(s) file:/tmp/test_source_on_master at /etc/puppet/environments/testing/modules/temporary/manifests/init.pp:245
Je-li cesta k souboru uvedena absolutně - začíná lomítkem - pak odpovídá cestě k souboru v rámci souborového systému stroje master.
file {"/tmp/subdir/test.txt":
source => "/tmp/test_source_on_master",
ensure => present,
}
Chybějící soubor v úložišti modulu
- err: /Stage[main]/Temporary::Novell/File[/tmp/subdir/test.txt]: Could not evaluate: Could not retrieve information from environment testing source(s) puppet:///modules/temporary/test_source_on_master at /etc/puppet/environments/testing/modules/temporary/manifests/init.pp:245
file {"/tmp/subdir/test.txt":
source => "puppet:///modules/support/test_source_on_master",
ensure => present,
}
Neplatná cesta na straně klienta
- err: /Stage[main]/Temporary::Novell/File[/tmp/subdir/test.txt]/ensure: change from absent to present failed: Could not set 'present on ensure: No such file or directory - /tmp/subdir/test.txt at /etc/puppet/environments/testing/modules/temporary/manifests/init.pp:244
Tato specifická chyba se objeví, pokud podadresář /tmp/subdir
, ve kterém má soubor (nebo podadresář) založit neexistuje. Typ file totiž nefunguje rekurzivně. Tento problém je tedy nutno ošetřit přímo v manifestu a to tak, aby příslušný podadresář klient založit ještě před cílovým souborem.
file {[ "/tmp/subdir", "/tmp/subdir/test.txt"]:
ensure => present,
}