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.

См. Документацию в разделе Автоматическая загрузка плагинов на стороне агента для получения дополнительной информации.

Другие вопросы по тегам