Марионетка, сопоставляющая несколько имен хостов агентов структуре данных params.pp

У меня есть модуль под названием appserver в моих кукольных модулях. В этом модуле проявляется у меня есть params.pp файл, который наследуется init.pp файл. В params.pp У меня есть следующая структура данных.

$servers = {
                appserver-mgr => { axis2   => {subDomain => 'mgt',},
                                    carbon  => {subDomain => 'mgt',},
                                    serverOptions => '-Dsetup',
                                    server_home => $carbon_home, },
                appserver-wkr => { axis2   => {subDomain => 'worker', members => ['appserver-mgr2-ip']},
                                    carbon => {subDomain => 'worker',},
                                    serverOptions => '-DworkerNode=true',
                                    server_home => $carbon_home, },
        }

В моем init.pp файл Я заполняю свои шаблоны следующим образом, используя указанную структуру данных.

    define fill_templates($axis2, $carbon, $clustering, $serverOptions, $server_home) {
            $ipAdd = $::ipaddress
            $hostName = $::hostname
            if $hostName == "${name}" {
                    notify {"host name match found for $hostName for $ipAdd":}
                    file {  "${server_home}/repository/conf/axis2/axis2.xml":
                            ensure  => file,
                            content => template('appserver/axis2.xml.erb'),
                    }
                    ->
                    file {  "${server_home}/repository/conf/carbon.xml":
                            ensure  => file,
                            content => template('appserver/carbon.xml.erb'),
                    }
                    ->
                    file {  "${server_home}/repository/conf/tomcat/catalina-server.xml":
                            ensure  => file,
                            content => template('appserver/catalina-server.xml.erb'),
                    }
            }
    }

Согласно текущему методу, если найден соответствующий узел (скажем, appserver-mgr) соответствующие значения структуры данных извлекаются и применяются к шаблонам. В настоящее время эти скрипты работают как положено.

Теперь я хочу изменить это следующим образом.

У меня есть кластер, содержащий следующие узлы.

appserver-mgr-1
appserver-mgr-2
appserver-mgr-3

appserver-wkr-1
appserver-wkr-2
appserver-wkr-3
appserver-wkr-4
appserver-wkr-5

Используя ту же структуру данных в params.pp файл, как я могу применить appserver-mgr конфигурация для *.mgr узлы 1-3 и appserver-wkr конфигурация для *.wkr узлы 1-5?

Могу ли я использовать регулярные выражения для этой задачи?

1 ответ

Решение

Я совершенно уверен, что было бы возможно согнуть Puppet DSL, чтобы сделать то, что вам нужно здесь. Тем не менее, гораздо лучший подход к этому вопросу - Hiera.

node /appserver-mgr/ {
    $node_class    = 'appserver'
    $node_subclass = 'manager'
}
node /appserver-wrk/ {
    $node_class    = 'appserver'
    $node_subclass = 'worker'
}

Использовать node_class а также node_subclass переменные в вашей иерархии.

# /etc/puppet/hiera.yaml
---
:backends:
  - yaml
:yaml:
  :datadir: /etc/puppet/hieradata
:hierarchy:
  - "%{::clientcert}"
  - "class-%{node_class}-%{node_subclass}"
  - "class-%{node_class}"
  - common

Теперь вы можете определять свои данные прямо в YAML для Hiera, а не params.pp,

# /etc/puppet/hieradata/class-appserver-manager.yaml
servers:
  axis2:
    subDomain: mgt
  carbon:
    subDomain: mgt
  serverOptions: -Dsetup
  server_home: %{carbon_home}

а для работника:

 # /etc/puppet/hieradata/class-appserver-worker.yaml
 servers:
   axis2:
     subDomain: worker
     members: 
       - appserver-mgr2-ip
     carbon:
       subDomain: worker
   serverOptions: -DworkerNode=true
   server_home: %{carbon_home}

В вашем params класс, тогда достаточно следующее:

$servers = hiera('servers')

Или ты даже не заморачиваешься с params класс, и просто заменить использование $servers переменная с hiera звонки. Но делать только один звонок в params Урок стиля - хорошая практика.

Примечание. Использование значения переменной %{carbon_home} из Hiera несколько опасно, вы можете захотеть жестко закодировать фактическое значение в YAML там.

Другие вопросы по тегам