Puppet:依赖链没有按顺序执行

时间:2016-10-19 09:16:37

标签: puppet facter

我有一个问题,我正在尝试设置外部事实,然后复制一个模板文件,该文件将填充来自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"]
    }

然而,在执行期间,我看到模板首先被复制到puppet代理机器,并且因为模板具有从外部事实文件需要的一些值,所以它无法找到并且它会抛出错误,说“无效的所有者和组值”。

以下是外部事实档案的内容

#!/bin/bash

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

为什么木偶似乎忽略了这里的依赖循环?

1 个答案:

答案 0 :(得分:3)

在包含文件资源的目录执行之前,代理在Puppet运行的最开始时收集事实。在运行期间部署外部事实是不可能的,并且可以像这样使用它,因为事实将会丢失。

相反,你需要依靠Puppet" pluginsync"在收集事实之前将外部事实从主人复制到代理人的机制。

将模块中的vfecare/files/hostname1.sh事实文件移至vfecare/facts.d/hostname1.sh,删除/ etc / facter的文件资源并复制外部事实,然后重新运行代理。它应首先下载hostname1.sh事实文件,然后使用remoteuser / group值正确评估/ tmp / testing123文件资源。

有关详细信息,请参阅Auto-download of agent-side plugins处的文档。