【问题标题】:Puppet: Dependency chain not getting executed in orderPuppet:依赖链没有按顺序执行
【发布时间】:2017-02-28 20:10:03
【问题描述】:

我有一个问题,我试图设置外部事实,然后复制一个模板文件,该文件填充了 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"

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

【问题讨论】:

    标签: puppet facter


    【解决方案1】:

    代理在 Puppet 运行开始时收集事实,然后执行包含文件资源的目录。无法在运行期间部署外部事实并像这样使用它,因为事实将丢失。

    相反,您需要依赖 Puppet 的“插件同步”机制,该机制在收集事实之前将外部事实从主服务器复制到代理。

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

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

    【讨论】:

    • 但问题是 pluginsync 将简单地复制所有事实文件,而不是根据机器的主机名复制文件。有没有办法做到这一点?
    • 我以为那是个假例子,抱歉。我认为您最好使用 Hiera 或类似的主机名配置。 Facts 是关于从主机中发现信息的,以这种方式将每个主机的事实部署到代理然后将它们读回主服务器是没有意义的。
    • 很好的解释,但他试图使用外部事实而不是自定义事实。此外,虽然从设计的角度来看,Hiera 确实比这更有意义,但 Puppet 可以访问的某种 ENC 或 CMDB 会更加高效和干净。
    • @MattSchuchard,正如 m0dlx 所描述的那样,外部事实也可能受到 pluginsync 的影响。他链接的文档中对此进行了介绍。他使用了错误的术语,但他描述的程序是有效的。
    • 是的,对不起,我的意思是说外部事实。我会更正答案!
    猜你喜欢
    • 2020-01-15
    • 2017-04-06
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多