2014-02-21 2 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 

Я читаю об этом в течение недели, и я предполагаю, что мое понимание ист совершенно неправильно где-то, хотя я использовал модули puppetlabs НТП, как пример.

что мне не хватает?

ответ

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

Смежные вопросы