Не удалось найти класс, и все же это там

Ничего себе, я был так близок... одинарные кавычки:

$ ack-grep '\> \\'

Понятый это после подтверждения, что мое соответствие regex было допустимым использованием: http://regexpal.com/ и просто, оказалось, имел одинарные кавычки от попытки чего-то еще.

31
задан 12 January 2012 в 00:22
5 ответов

Итак ... это немного смущает, но ...

Среды.

Прямо в моем /etc/puppet.conf файле это:

[master]
  manifest=$confdir/manifests/site.pp
  modulepath=$confdir/environments/$environment/modules:$confdir/modules

После того, как я бросил на него strace , чтобы выяснить, где он ищет файлы, я кое-что заметил. Он искал custommod в / etc / puppet / environment / production / modules , и поскольку там был каталог (пустой), он не проверял / etc / puppet / modules . Очевидно, при импорте модуля он проверяет наличие каталога, а не наличия файла (init.pp).

Удалите этот пустой каталог, все начнет работать.

Запустите марионеточный агент, используя другую среду, все начинает работать .

Мораль истории:

Пути к Puppet Environment не действуют как bash $ PATH.

32
ответ дан 28 November 2019 в 19:57

Я столкнулся с той же проблемой, но имел другое исправление

Если вы сгенерируете модуль марионетки следующим образом:

puppet module generate foo-example_module

Он создаст модуль с именем example_module с foo пространство имен. Все манифесты будут находиться в каталоге с именем foo-example_module

Имя класса, определенного в init.pp, должно совпадать с именем папки.

Простое исправление:

mv foo-example_module example_module

Если вы запустите puppet-lint, он выдаст следующее сообщение:

ERROR: example_module not in autoload module layout on line 42

Если вы используете Puppetfile с r10k или librarian-puppet, вам также может потребоваться удалить пространство имен, чтобы файлы помещаются без префикса 'foo' в каталог модулей.

до:

mod 'foo-example_module',
    :git => git@github.com:foo/example_module'

после:

mod 'example_module',
    :git => git@github.com:foo/example_module'
4
ответ дан 28 November 2019 в 19:57

Натолкнулся на аналогичную проблему с марионеткой 3.7.1 для Федора: Не смог найти куклу класса для моего.сервера

Решение:

sudo ln -s /my/local/copy/puppet/modules /etc/puppet/

Тогда работает

.
0
ответ дан 28 November 2019 в 19:57

Другая проблема, которая может возникнуть, - это когда в вашем модуле есть недопустимый файл metadata.json .

Убедитесь, что файл metadata.json ] имеют все обязательные поля (см. https://docs.puppet.com/puppet/latest/reference/modules_metadata.html#allowed-keys-in-metadatajson )

2
ответ дан 28 November 2019 в 19:57

У меня была аналогичная проблема. В моем случае имя класса было «onehost :: change_IoT_password_reminder». После использования strace я обнаружил, что марионетка искала файл modules / onehost / manifest / change_iot_password_reminder.pp. Похоже, использование прописных букв в именах классов - не лучшая идея, даже если это не первая буква класса.

0
ответ дан 28 November 2019 в 19:57

Теги

Похожие вопросы