При puppet agent
звонке с нового изображения я получаю сообщение err: Could not find class custommod
об ошибке. Сам модуль такой /etc/puppet/modules/custommod
же, как и все остальные модули, которые мы вызываем, но этот является упрямым.
[Site.pp]
node /clunod-wk\d+\.sub\.example\.local/ {
include base
include curl
include custommod
class{ "custommod::apps": frontend => "false}
[...]
}
Когда puppetmaster запускается с выводом отладки, он четко находит информацию для base и curl:
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
Строка 84 include custommod
Сокращенный каталог и файловая структура:
/etc/puppet
|- manifests
| |- site.pp
|
|- modules
|- base
| |- manifests
| |- init.pp
|
|- curl
| |- manifests
| |- init.pp
|
|- custommod
|- files
| |- apps
| |- [...]
|
|- manifests
|- init.pp
|- apps.pp
Я проверял орфографию:}
Содержимое init.pp
в каталоге custommod совершенно не заметно:
class custommod {
}
Намерение состоит в том, чтобы создать пустой класс для файла apps.pp, где находится мясо.
class custommod::apps {
[lots of stuff]
}
Только он никогда не попадает в файл приложений. Если я закомментирую include custommod
, вышеупомянутая ошибка генерируется class{ "custommod::apps": frontend => "false}
вместо строки.
Что мне не хватает в моей охоте, чтобы узнать, как генерируется эта ошибка? Я должен отметить, что это репо работает просто отлично, если оно запускается локально через puppet apply
.
источник
could not retrieve catalog from remote server:
ошибку, которая, вероятно, почему.custommod
- может быть, даже попытаться удалить вinit.pp
целом, так как это не нужно.strace
его и попытаться выяснить, какие файлы он пытается прочитать таким образом.Ответы:
Так что ... это немного смущает, но ...
Среды.
Прямо в моем
/etc/puppet.conf
файле это:После броска
strace
на него, чтобы выяснить, где он охотился за файлами, я кое-что заметил. Он искал custommod под/etc/puppet/environments/production/modules
, и, поскольку там был каталог (пустой), он не прошел проверку/etc/puppet/modules
. Очевидно, при импорте модуля он проверяет наличие каталога, а не наличие файла (init.pp).Удалите этот пустой каталог, все начнет работать.
Запустите агент Puppet, используя другую среду, все начинает работать.
Мораль истории:
источник
puppet config print modulepath
.Я столкнулся с этой же проблемой, но имел другое решение
Если вы сгенерируете кукольный модуль примерно так:
Это создаст модуль
example_module
сfoo
именем в пространстве имен. Все манифесты будут в каталоге с именемfoo-example_module
Имя класса, определенного в init.pp, должно совпадать с именем папки.
Простое исправление:
Если вы запустите puppet-lint, он выдаст следующее сообщение:
Если вы используете Puppetfile с r10k или librarian-puppet, вам также может понадобиться удалить пространство имен, чтобы файлы помещались без префикса 'foo' в каталоге ваших модулей.
до:
после:
источник
Другая проблема, которая может возникнуть, - это когда у вашего модуля неверный
metadata.json
файл.Убедитесь, что в
metadata.json
файле есть все обязательные поля (см. Https://docs.puppet.com/puppet/latest/reference/modules_metadata.html#allowed-keys-in-metadatajson ).источник
Обнаружена похожая проблема с puppet 3.7.1 для Fedora: не удалось найти класс puppet для my.server
Решение:
Тогда это работает.
источник
У меня была аналогичная проблема. В моем случае имя класса было «onehost :: change_IoT_password_reminder». После использования strace я обнаружил, что puppet ищет файл modules / onehost / manifest / change_iot_password_reminder.pp. Кажется, использование заглавных букв в именах классов не очень хорошая идея, даже если это не первая буква класса.
источник