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"

为什么puppet在这里似乎忽略了依赖循环?

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

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

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

请参阅自动下载代理端插件文档获取更多信息。

相关内容

  • 没有找到相关文章

最新更新