使用 Puppet 的跨节点模块/清单(?):如何实现?

使用 Puppet 的跨节点模块/清单(?):如何实现?

我已经用 puppet“玩”了几个星期了(好吧,实际上是小孩子在玩),但就是搞不清楚如何实现一个名为客户端的模块;这个模块将按如下方式调用:

client { "client-name":
    "apache-node" => "name-of-apache-node",
    "tomcat-node" => "name-of-tomcat-node",
    "https" => true,
    # probably other parameters, and other nodes may be implied as well
}

然后会自动生成所有相关节点的配置分发配置。

注意:我不想使用外部来源(LDAP 或其他),只希望使用适当的 puppet:我单独使用 puppet 就已经够困难了,只有当我有足够的掌握时才会考虑这一点(可能需要几个月的时间……)。

注2:puppet是版本2.6.12,facter是版本1.5.9。

这是可能的吗,还是只是个白日梦?

答案1

当然,这应该是可行的。

首先,您需要将其包含在适用于两个节点的某个地方,然后过滤掉需要应用于不同节点的配置(可能带有一个大case语句),或者为应用程序的 tomcat 端和 apache 端使用不同的类(这可能会更干净)。

以下是我采取的方法:

为您的客户端应用程序设置多类模块:

modules
 -> client-app
     -> manifests
         -> apache.pp
         -> tomcat.pp

使用您需要的配置来设置这些类:

class client-app::apache ($tomcatnodes = undef, $https = true) {
    package { 'apache2':
        ensure => present,
    }
    # ... etc etc
    # use a template file that utilizes the $tomcatnodes and $https
    # variables to set the config that you need
}

然后将它们附加到你的节点:

node tomcatserver1 {
    class { 'client-app::tomcat':
        apachenode = 'apacheserver',
        https = true,
    }
}
node tomcatserver2 {
    class { 'client-app::tomcat':
        apachenode = 'apacheserver',
        https = true,
    }
}
node apacheserver {
    class { 'client-app::apache':
        tomcatnodes = [ 'tomcatserver1', 'tomcatserver2' ],
        https = true,
    }
}

关于此实现的一些进一步阅读内容:请参阅这里这里

相关内容