使用 Puppet 创建包含来自多个主机的事实的文件

使用 Puppet 创建包含来自多个主机的事实的文件

我正在尝试让 Puppet 构建一个如下所示的配置文件:

[All]
Hosts=apt-dater@puppetmaster;apt-dater@blaster; (etc...)

基本上,此文件需要包含 apt-dater 类的每个节点的条目。我一直在尝试导出资源,但找不到将它们组合在一起的简洁方法。我应该如何创建此文件?

答案1

我假设您已经了解导出和收集单个类型资源的原理。只是不知道如何将这些单个资源转换为单个文件。Puppet 有两种方法可以做到这一点:

Augeas 是一款非常聪明的工具,但如果您必须开始编写和分发自己的镜头,它可能会很复杂。不过,puppet-concat它很容易掌握。我还没有测试过下面的语法,但它应该能让你走上正确的道路:

# apt-dater/manifests/server.pp
class apt-dater::server {
    file { "/somepath/apt-dater/hosts.conf": }
    concat::fragment{ "apt-dater_hosts_header":
        content => "[All]\nHosts=",
        order   => 1,
    }
    Apt-dater::Client <<| |>>
}

# apt-dater/manifests/defines/register.pp
define apt-dater::register($order=10) {
    concat::fragment{ "apt-dater_hosts_$name":
        target  => "/somepath/apt-dater/hosts.conf",
        content => "apt-dater@${name};",
    }
}

# apt-dater/manifests/client.pp
class apt-dater::client {
    @apt-dater::register{ "$hostname": }
}

然后设置节点:

# On the central server.
include apt-dater::server

# On each of the client nodes.
include apt-dater::client

相关内容