2016-10-19 2 views
0

У меня проблема, когда я пытаюсь установить внешние факты, а затем скопируйте файл шаблона, который заполняется значениями из файла hiera yaml. Файл шаблона зависит от определенных фактов (таких как владелец и группа файла шаблона), которые устанавливаются внешним файлом фактов. Ниже приводится марионеточный код.Puppet: цепочка зависимостей не выполняется в порядке

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"] 
    } 

Однако во время выполнения, я вижу, что шаблон, копируется первым в машину кукольного агента и, поскольку шаблон имеет несколько значений, которые нужны из файла внешних фактов, он не может найти и он выдает ошибку о том, «Invalid владельца и групповой ценности ».

Ниже приводится содержание внешних фактов файл

#!/bin/bash 

echo "remoteuser=tempuser" 
echo "remotegroup=tempuser" 

Почему кукольный, кажется, игнорируют цикл зависимости здесь?

ответ

3

Факты собираются агентом в самом начале запуска Puppet, прежде чем каталог, содержащий ваши файловые ресурсы, будет выполнен. Во время прогона невозможно развернуть внешний факт и использовать его так, поскольку факты будут отсутствовать.

Вместо этого вам нужно полагаться на механизм «pluginsync» Puppet, который копирует внешние факты от владельца к агенту перед тем, как он собирает факты.

Переместить файл факта vfecare/files/hostname1.sh в модуль до vfecare/facts.d/hostname1.sh, удалить файлы ресурсов, которые у вас есть для/etc/facter, и скопировать внешний факт, а затем повторно запустить агент. Сначала нужно загрузить файл факта hostname1.sh, а затем правильно оценить файл файла/tmp/testing123 с значениями remoteuser/group.

Дополнительную информацию см. В документах по адресу Auto-download of agent-side plugins.

+0

Но дело в том, что pluginsync просто скопирует все файлы фактов, а не копирует файлы на основе имени хоста машины. Есть ли способ сделать это? – Iowa

+3

Я предположил, что это был фиктивный пример, извините. Я думаю, вам будет намного лучше использовать Hiera или аналогичную конфигурацию для каждого хоста. Факты касаются обнаружения информации с хоста, поэтому нет смысла разворачивать факты для каждого узла агенту таким образом, а затем читать их обратно к хозяину. –

+1

Хорошее объяснение, но он пытается использовать внешние факты, а не обычные факты. Кроме того, в то время как Hiera имеет больше смысла, чем это с точки зрения дизайна, какой-то ENC или CMDB, доступ к которым Puppet может получить, будет еще более эффективным и чистым. –

Смежные вопросы