在 Puppet 模板中迭代资源

在 Puppet 模板中迭代资源

我正在尝试用 puppet 管理我的/etc/hosts文件,但我不喜欢内部的“主机”类型,如果可能的话,我想使用我自己的模板。

因此我定义了一个“主机”资源:

    # Basic hosts configuration
    class hosts {

    # Host resource
    define host (
        $address,
        $names
    ) {

    }

    Network::Hosts::Host {
        before   => File['/etc/hosts']
    }

    # Configure hosts file
    file {
        "/etc/hosts":
        ensure   => present,
        checksum => md5,
        owner    => root,
        group    => root,
        mode     => 0644,
        content  => template("network/hosts.erb"),
    }

在其他地方,我定义了主机资源:

network::hosts::host { 'puppet.test.lan':
    address => '192.168.56.101',
    names => 'puppet',
}

我想在模板中包含已定义主机的列表,但我不知道如何迭代资源及其属性。我尝试使用字符串连接,但无法正常工作,而且不太优雅。

我如何遍历所有已定义的主机并将它们从模板中包含进去?

答案1

你可以使用 RIPienaar 的puppet-concat模块,您可以在其中通过许多较小的文件或模板构建单个文件。

定义看起来会像这样:

define host($address, $names) {
  concat::fragment{"hosts-$address":
    target  => "/etc/hosts",
    content => template("network/hosts_single.erb")
  }
}

模板hosts_single.erb将代表文件中的一行。您可能还会添加一个标题片段,并设置order => "01"为确保它位于生成文件的顶部(默认值为 10)。

答案2

我会看看奥吉阿斯图书馆用于管理/etc/hosts文件中的条目。它是 Puppet 的先决条件,因此已安装。您可能需要下载额外的 augeas 包才能访问augtool命令行实用程序。这对于在 Puppet 集成之前进行测试很有用。

主站点上列出的 hosts 文件条目示例: http://augeas.net/tour.html

或者

http://honglus.blogspot.com/2012/01/augeas-quick-start.html

我想您也可以分发一个标准主机文件,然后只需修改每个主机需要唯一的行......

相关内容