0

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

ファイル内の同じデータ構造を使用して、構成をノード 1 ~ 3に適用し、構成をノード1 ~ 5params.ppに適用するにはどうすればよいですか?appserver-mgr*.mgrappserver-wkr*.wkr

このタスクに正規表現を使用できますか?

4

1 に答える 1

1

Puppet DSL を曲げて、ここで必要なことを実行できると確信しています。ただし、この問題に対するはるかに優れたアプローチは Hiera です。

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

Hierarchyで変数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

ではなく、Hiera の YAML でデータを定義できるようになりました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に置き換えるだけです。ただし、スタイル クラスで呼び出しを 1 回だけ実行することをお勧めします。$servershieraparams

注: Hieraの変数値を使用するの%{carbon_home}はやや危険です。実際の値を YAML にハードコーディングすることをお勧めします。

于 2014-12-23T10:47:33.127 に答える