2014-02-09 259 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