2014-02-21 133 views
1

我想重寫基節點的參數。我想是這樣的模式:壓倒一切的參數

# File manifests/nodes.pp 
node myDefault { 
    class { 'my::common::puppet_setup': 
     service => 'enable', 
     pushable => 'disable', 
    } 
    # Do lots of default things ... 
} 
node 'myFirstNode' inherits myDefault { 
    # Do something ... 
} 
node 'mySecondNode' inherits myDefault { 
    class { 'my::common::puppet_setup::params': 
     service => 'disable', 
     pushable => 'enable', 
    } 
} 

我明白了傀儡的文件,我可以寫我的模塊是這樣做的:

# File modules/my/manifests/common/puppet_setup.pp 
class my::common::puppet_setup (
    $pushable = $my::common::puppet_setup::params::pushable, 
    $service = $my::common::puppet_setup::params::service, 
) inherits my::common::puppet_setup::params { 
    # package that configures puppet node 

    # input value validation 
    validate_re($pushable, ['^enable$', '^disable$', '^ignore$', ]) 
    validate_re($service, ['^enable$', '^disable$', '^ignore$', '^cron$', ]) 

    # setup puppet, start or disable agent, put ssh keys for push ... 

} 

class my::common::puppet_setup::params { 
    $pushable = 'enable' 
    $service = 'enable' 
    $puppetserver = 'puppet.my.site.de' 
    case $::osfamily { 
     'Debian': { 
     } 
     default: { 
      fail("not implemented yet for {::operatingsystem}") 
     } 
    } 
} 

puppet website本細則說: 當一個派生類聲明,它的基類被自動首先聲明(如果它尚未別處聲明)。

,但我得到這個錯誤(一些的縮進):

mySecondNode# puppet agent --test --environment dev_my 
Error: Could not retrieve catalog from remote server: 
    Error 400 on SERVER: Duplicate declaration: 
    Class[My::Common::Puppet_setup::Params] is already declared; 
    cannot redeclare at /.../puppet/manifests/nodes.pp:16 on node mySecondNode 
Warning: Not using cache on failed catalog 
Error: Could not retrieve catalog; skipping run 

我讀這個一個星期,我想我的理解IST完全錯誤的地方,雖然我用的puppetlabs NTP模塊,一個例子。

我失去了什麼?

回答

2

您應該http://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html

檢查繼承部分木偶對待像類節點定義。它不會混雜在一起然後編譯混合;相反,它編譯基類,然後編譯派生類,它得到家長的範圍和特殊權限修改從基類資源屬性。

一個良好的解決方案是使用角色和配置文件,有一個偉大的博客帖子大約是: http://garylarizza.com/blog/2014/02/17/puppet-workflow-part-2/

+0

它不能修復我的需要,但它告訴我我做錯了什麼。 – Faronitates

+1

我用解決方案編輯了我的答案。 –

+0

這是一個很好的鏈接。工作後我回來了。再次感謝! – Faronitates