Saat melakukan puppet agent
panggilan dari gambar baru, saya mendapatkan err: Could not find class custommod
kesalahan. Modul itu sendiri /etc/puppet/modules/custommod
sama dengan semua modul lain yang kami panggil, tapi yang ini obstinante.
[site.pp]
node /clunod-wk\d+\.sub\.example\.local/ {
include base
include curl
include custommod
class{ "custommod::apps": frontend => "false}
[...]
}
Ketika dalang dijalankan dengan debug output, itu jelas menemukan informasi untuk basis dan keriting:
debug: importing '/etc/puppet/modules/base/manifests/init.pp' in environment production
debug: Automatically imported base from base into production
debug: importing '/etc/puppet/modules/curl/manifests/init.pp' in environment production
debug: Automatically imported curl from curl into production
err: Could not find class custommod for clunod-wk0130.sub.example.local at /etc/puppet/manifests/site.pp:84 on node clunod-wk0130.sub.example.local
Jalur 84 adalah include custommod
Direktori dan struktur file yang disingkat:
/etc/puppet
|- manifests
| |- site.pp
|
|- modules
|- base
| |- manifests
| |- init.pp
|
|- curl
| |- manifests
| |- init.pp
|
|- custommod
|- files
| |- apps
| |- [...]
|
|- manifests
|- init.pp
|- apps.pp
Saya memang memeriksa ejaan:}
Konten init.pp
dalam direktori custommod benar-benar biasa-biasa saja:
class custommod {
}
Maksudnya adalah untuk membuat kelas kosong untuk file apps.pp, yang merupakan tempat daging.
class custommod::apps {
[lots of stuff]
}
Hanya saja, itu tidak pernah sampai ke file aplikasi. Jika saya berkomentar include custommod
, kesalahan di atas dihasilkan pada class{ "custommod::apps": frontend => "false}
baris sebagai gantinya.
Apa yang saya lewatkan dalam perburuan saya untuk mengetahui bagaimana kesalahan ini dihasilkan? Saya perlu mencatat bahwa repo ini berfungsi dengan baik jika dijalankan secara lokal via puppet apply
.
sumber
could not retrieve catalog from remote server:
kesalahan yang mungkin mengapa.custommod
- mungkin bahkan mencoba menghapusinit.pp
semuanya, karena seharusnya tidak diperlukan.strace
dan mencoba mencari tahu file apa yang ingin dibaca seperti itu.Jawaban:
Jadi ... ini agak memalukan, tapi ...
Lingkungan.
Di sana dalam
/etc/puppet.conf
file saya adalah ini:Setelah melemparnya
strace
untuk mencari tahu di mana ia mencari file, saya perhatikan sesuatu. Itu sedang mencari custommod di bawah/etc/puppet/environments/production/modules
, dan karena ada direktori di sana (kosong), maka tidak pergi memeriksa/etc/puppet/modules
. Rupanya ketika mengimpor modul itu memeriksa keberadaan direktori, bukan kehadiran file (init.pp).Hapus direktori kosong itu, semuanya mulai berfungsi.
Jalankan agen boneka menggunakan lingkungan yang berbeda, semuanya mulai bekerja.
Pesan moral dalam cerita:
sumber
puppet config print modulepath
.Saya mengalami masalah yang sama, tetapi memiliki perbaikan yang berbeda
Jika Anda membuat modul boneka seperti:
Ini akan membuat modul bernama
example_module
denganfoo
ruang nama. Semua manifes akan berada di dalam direktori yang disebutfoo-example_module
Nama kelas yang didefinisikan dalam init.pp harus sama dengan nama folder.
Perbaikan sederhana:
Jika Anda menjalankan puppet-lint, itu akan memperingatkan dengan pesan berikut:
Jika menggunakan Puppetfile dengan r10k atau librarian-puppet, Anda juga mungkin perlu menghapus ruang nama sehingga file-file tersebut ditempatkan tanpa awalan 'foo' di direktori modul Anda.
sebelum:
setelah:
sumber
Masalah lain yang mungkin terjadi adalah ketika modul Anda memiliki
metadata.json
file yang tidak valid .Pastikan
metadata.json
file memiliki semua bidang yang diperlukan (lihat https://docs.puppet.com/puppet/latest/reference/modules_metadata.html#allowed-keys-in-metadatajson )sumber
Mengalami masalah serupa dengan boneka 3.7.1 untuk Fedora: Tidak dapat menemukan boneka kelas untuk my.server
Larutan:
Lalu berhasil.
sumber
Saya punya masalah serupa. Dalam kasus saya, nama kelasnya adalah "onehost :: change_IoT_password_reminder". Setelah menggunakan strace saya menemukan boneka itu mencari file modules / onehost / manifests / change_iot_password_reminder.pp. Tampaknya menggunakan huruf besar dalam nama kelas bukanlah ide yang baik, bahkan jika itu bukan huruf pertama dari kelas tersebut.
sumber