Puppet: Цепочка зависимостей не выполняется в порядке
У меня есть проблема, в которой я пытаюсь установить внешние факты, а затем скопировать файл шаблона, который заполняется значениями из файла hiera yaml. Файл шаблона зависит от определенных фактов (таких как владелец и группа файла шаблона), которые устанавливаются внешним файлом фактов. Ниже приведен код куклы.
file {['/etc/facter/','/etc/facter/facts.d']:
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
}
file {"/etc/facter/facts.d/domain_facts.sh":
ensure => present,
owner => 'root',
group => 'root',
mode => '0755',
source => $::hostname?{
'hostname1' => 'puppet:///modules/vfecare/hostname1.sh',
},
require => File['/etc/facter/','/etc/facter/facts.d'],
}
file {"/tmp/testing123":
ensure => present,
owner => "${::remoteuser}",
group => "${::remotegroup}",
content => template("vfecare/testscript.erb"),
require => File["/etc/facter/facts.d/domain_facts.sh"]
}
Однако во время выполнения я вижу, что шаблон сначала копируется на компьютер агента-марионетки, и, поскольку шаблон имеет некоторые значения, которые ему нужны, из внешнего файла фактов, он не может найти и выдает ошибку, говорящую "Недопустимое значение владельца и группы".
Ниже приводится содержание файла внешних фактов
#!/bin/bash
echo "remoteuser=tempuser"
echo "remotegroup=tempuser"
Почему марионетка, кажется, игнорирует цикл зависимости здесь?
1 ответ
Факты собираются агентом в самом начале запуска Puppet до запуска каталога, содержащего ваши файловые ресурсы. Невозможно развернуть внешний факт во время выполнения и использовать его таким образом, поскольку факты будут отсутствовать.
Вместо этого вам нужно положиться на механизм Puppet "pluginsync", который копирует внешние факты из мастера в агент, прежде чем собирать факты.
Переместить vfecare/files/hostname1.sh
файл фактов в модуле vfecare/facts.d/hostname1.sh
удалите файловые ресурсы, имеющиеся у вас для / etc / facter, и скопируйте внешний факт, затем перезапустите агент. Сначала он должен загрузить файл фактов hostname1.sh, а затем правильно оценить ресурс файла /tmp/testing123 со значениями remoteuser/group.
См. Документацию в разделе Автоматическая загрузка плагинов на стороне агента для получения дополнительной информации.