2014-02-09 210 views
0

我有一个节点1,我的应用程序将使用木偶部署在其上。我创建了规定所有服务器的详细信息,该应用程序将使用诸如木偶 - 应用木偶类

LDAP_SERVER =节点2

mq_server =节点3

有没有什么办法,在一个hiera文件(node1_application.yaml) node.pp,我只给node1信息哪些stats什么类在节点1上应用。然后这个类读取我的hiera文件并且看到ldap服务器在节点2上,所以ldap模块应该应用在节点2上。

应该使用我的hiera文件动态决定应在哪个节点上应用哪个类。有可能吗?

我使用木偶企业,hiera,facter,puppetdb和mcollective。

回答

1

是的,这是可能的。

node default{ 
    if hiera("useldap") == 'true' { 
     include ldap 
    } 
} 

将在解析useldap = true

+0

这将意味着在'node2_application.yaml'中,必须为'useldap'设置hierdata键/值,该操作符不需要动态地决定将哪个类应用于哪个节点。 – kaizenCoder

1

你不能这样做的每一个节点安装ldap。您必须在node2中定义必须包含ldap类。它不能在node1中被class/hiera“扣除”,因为在对这些特定节点应用更改时,这些被独立地解析。

2

我认为是更好地使用hiera_include('classes')

如果你有node01.example.com.yaml现在你可以写这样的事情:

--- 
classes: 
    - base 
    - ldap 

现在node01.example.com.pp

node 'node01.example.com' { 
     hiera_include('classes') 
} 
1

我会建议一个新的解决方案,其中节点分隔每个角色(如果puppetmaster < 4.0)。

现在,体现/ database.pp:

node /^(projectnameinthreechar)-([a-z]{3})-db([\d]+)\./ { 
    class { 
      "server::project::db": 
        ; 
    } 
} 


class server::project::db ($paramteres) { ... } 

匹配所有节点,谁的主机名导尿这种模式:

/^(projectnameinthreechar)-([a-z]{3})-db([\d]+)\./ 

例子:

web-can-db01 
1

当然可以。

您应该执行以下操作。

site.pp

node default{ 
    hiera_include('classes') 
} 

hiera。YAML

--- 
:backends: 
    - yaml 

:yaml: 
    :datadir: "/etc/puppetlabs/code/environments/{::environment}/hieradata" 

:hierarchy: 
    - "nodes/%{::trusted.certname}" 
    - "common" 

然后在hieradata你应该有节点目录包含

node01.domain.com.yaml

--- 
classes: 
    - base 
    - application 

node02.domain.com .yaml

--- 
classes: 
    - base 
    - ldap