Введение:
Мы используем марионетку для настройки узлов с помощью настраиваемого факта, на который затем ссылаемся в hiera. Факт может находиться либо в золотом изображении в /etc/facter/fact.d/, либо через pluginsync (не имеет значения, проверено оба)
Версии:
dpkg -l|grep puppet
hi facter 1.7.5-1puppetlabs1 amd64 Ruby module for collecting simple facts about a host operating system
hi hiera 1.3.4-1puppetlabs1 all A simple pluggable Hierarchical Database.
hi puppet 3.4.3-1puppetlabs1 all Centralized configuration management - agent startup and compatibility scripts
hi puppet-common 3.4.3-1puppetlabs1 all Centralized configuration management
Настройка проста:
Кукловод:
cat hiera.yaml
:hierarchy:
- "aws/%{::aws_cluster}"
/etc/puppet/hieradata/aws/web.json
Узел EC2:
cat /etc/facter/facts.d/ec_cluster.sh
echo 'aws_cluster=web'
Итак, есть этот золотой образ ec2, включающий факт aws_cluster. Это указано в hiera и определяет классы и конфигурации, которые необходимо создать.
Проблема:
Когда мы загружаем экземпляр и включаем автоподписание, при первом запуске не будет $ aws_cluster на стороне клиента. Так что он потерпит неудачу (что имеет смысл), говоря
puppet-agent[2163]: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find data item classes in any Hiera data file and no default supplied at /etc/puppet/manifests/site.pp:33 on node ip-172-31-35-221.eu-west-1.compute.internal
При перезапуске марионеточного агента все работает должным образом. Есть намеки на это?
Наше предположение:
Обновить:
при попытке запустить его через /etc/rc.local тоже не удается. Таким образом, должна быть разница между интерактивным и неинтерактивным запуском. должны ли быть установлены специальные переменные среды?
Мне очень жаль, ребята, мы ошиблись.
После дальнейшей отладки и регистрации выходных данных rc.local от facter -p мы увидели, что наш внешний факт требует учетных данных aws для успешного выполнения сценария. Это происходит автоматически, когда вы входите в систему как root, но не при запуске во время загрузки.
Таким образом, экспорт параметров env для учетных данных aws решил проблему.
информация, которая не работает с парой плановых ключей и значений, должна быть неправильной во время отладки. грустный
tl; dr: это не была марионеточная ошибка / проблема