Кто-то сказал мне однажды: "Платье для уровня задания, которого Вы пытаетесь достигнуть", и это должен быть один из лучшего совета, который я когда-либо слышал в своей профессиональной жизни.
Единственная хитрость, о которой я знаю, - это тип ресурса файл
.
Резервное копирование замененных файлов ведет себя иначе, по умолчанию используется файловая корзина сервера вместо локальный файловый пакет.
Более важная вещь, о которой нужно знать, - это параметр source
.
source => '/tmp/somepath/sshd_config',
С необработанным путем к файлу он всегда будет пробовать локальный путь.
source => 'puppet://puppetmaster1/modules/sshd/sshd_config',
С помощью puppet: // server /
путь, он всегда будет пробовать удаленный путь.
source => 'puppet:///modules/sshd/sshd_config',
С пустой спецификацией сервера это становится интересным.
При локальном применении путь локального модуля марионетки используется для найти файл.
При сообщении марионеточному мастеру сервер, который дал ему манифест, рассматривается как сервер.
Кроме того, если вам нужно проявить творческий подход к источнику файла,вы можете указать параметр source
в виде списка:
source => [ '/tmp/somepath/sshd_config', 'puppet:///modules/sshd/sshd_config'],
Первое место, где будет использоваться что-то найденное.
Проблема заключалась в различии в способах выбора узлов. Код в исходном файле nodes.pp
:
node /clunod\-wk\d+\.sub\.example\.local/ { )
, который правильно соответствует узлу с именем clunod-wk01234.sub.example.local. Это работало нормально, когда применение марионетки
запускалось против локального манифеста марионетки. Но не удаленно.
Проблема заключалась в том, как строка localhost
была определена в / etc / hosts
.
Нерабочий:
127.0.0.1 localhost clunod-wk01234 clunod-wk01234.sub.example.local
Рабочий:
127.0.0.1 localhost clunod-wk01234.sub.example.local clunod-wk01234
Первая форма сообщала мастеру марионеток имя узла «clunod-wk01234», вторая форма сообщала полное доменное имя. Вторая форма удовлетворяет разделению узла
, тогда как первая - нет. Это было исправлено путем изменения строк узлов, чтобы они не включали полное доменное имя, после чего все работало нормально.
Машины с удаленной марионеткой были обновленным образом, поэтому имели некоторые незначительные отличия от машин с локальной марионеткой. Одно из этих изменений заключалось в том, как была объявлена одна строка в / etc / hosts
. Теперь мы знаем.
Затем я обнаружил, что два обращения к файлам были написаны с использованием жестких путей, остальные использовали правильный синтаксис puppet: ///.
Нет никакой разницы между 'локальными' и 'удаленными' правилами марионеток.
Можете ли вы опубликовать свой site.pp, чтобы мы могли проверить на наличие ошибок?
Используют ли сервер и клиенты один и тот же DNS-сервер? Отличаются ли их файлы /etc/resolv.conf строками «поиск» или «домен»?
Вы также можете запустить puppet с параметрами - debug --verbose --no-daemonize
и получить больше вывод.