2016-10-06 9 views
-1

私は各環境タイプdev、qa、integrationに対してyamlファイルを作成しました。しかし、複数の開発環境があり、ホスト固有のyamlファイルを使っていくつかの変更を無効にしたい。hiera_hashを使ってヒエラの人形を変更する

Hiera 
|--host 
| |-dev1.internet.com 
| |-dev2.intranet.com 
|--servertype 
| |-dev 
| |-qa 

dev.yaml 
augeas_xml: 
    - 'set /root/node/servername/#text 'dev' 
    - 'set /root/node/serverlocation/#text 'London' 
    - 'set /root/node/ntp/#text '123.123.123.123' 

dev1.internet.com.yaml 
augeas_xml: 
    - 'set /root/node/serverlocation/#text 'New York' 
    - 'set /root/node/ntp/#text '123.123.123.125' 

dev2.intranet.com.yaml 
augeas_xml: 
    - 'set /root/node/serverlocation/#text 'Accrington' 

私は、次の

augeas_xml: 
    - 'set /root/node/servername/#text 'dev' 
    - 'set /root/node/serverlocation/#text 'New York' 
    - 'set /root/node/ntp/#text '123.123.123.125' 

hiera_arrayは私に望ましい結果を与えていないとhiera_hashは私に次のエラーを与えている持っているdev1.internet.com.yamlの設定を取得する方法が必要です: キー 'augeas_xml'のHieraタイプの不一致:ハッシュとハングアップが予想される

ホスト固有の設定は環境固有の設定よりも優先されません。私が与えた例は、小さなサーバーセットです。私は人形を使って何百ものサーバーを管理しています。 hieraを使用して、すべての単一のホストに対してyamlファイルを作成することができました。しかし、私はdefault.yamlを持っていると

--- 
:hierarchy: 
    - "host/%{::fqdn}" 
    - "server_type/%{server_type}" 
    - default 
:backends: 
    - yaml 
:yaml: 
    :datadir: "/puppet/hieradata/%{::environment}" 
:merge_behavior: deeper 

後者は

dev1.internet.com.yaml 
    augeas_xml: 
     - 'set /root/node/serverlocation/#text 'New York' 
     - 'set /root/node/ntp/#text '123.123.123.125' 
     - 'set /root/node/servername/#text 'dev' 
     - 'set /root/node/serverlocation/#text 'London' 
     - 'set /root/node/ntp/#text '123.123.123.123' 

を生産しているhost.yamlの変更を上書きすることができるようにしたいが、私はそれがやりたい

dev1.internet.com.yaml 
    augeas_xml: 
     - 'set /root/node/servername/#text 'dev' 
     - 'set /root/node/serverlocation/#text 'London' 
     - 'set /root/node/ntp/#text '123.123.123.123' 
     - 'set /root/node/serverlocation/#text 'New York' 
     - 'set /root/node/ntp/#text '123.123.123.125' 
+0

'hiera_hash'は、ここでは使用されません。 'hiera_array'の結果は望ましくないのですか?それが発生している出力を表示し、それがなぜ問題なのかを示してください。 –

+0

ホスト固有の設定は、環境固有の設定より優先されません。私が与えた例は、小さなサーバーセットです。私は人形を使って何百ものサーバーを管理しています。 hieraを使用して、すべての単一のホストに対してyamlファイルを作成することができました。しかし、私はdefault.yamlを持っていて、host.yamlの変更を上書きできるようにしたいと考えています – Vash

+0

あなたのhiera.yamlを質問に追加し、より正確に記述しているファイルの場所を表示してください構造体や論理構造体を上にしていますか? –

答えて

0

データファイルからAugeasのコマンドとパスを守り、重要なビットをのデータである - 名前、場所、およびサーバーのアドレスだけにする方がずっと簡単です - データファイル。 Augeasのコマンドは、データではなく実装固有のものです。例えば

dev.yamlそして

servername: 'dev' 
serverlocation: 'London' 
ntp: '123.123.123.123' 

dev1.internet.com.yaml

serverlocation: 'New York' 
ntp: '123.123.123.125' 

dev2.intranet.com.yaml

serverlocation: 'Accrington' 

あなたのマニフェストには、何かがありますこのように:あなたは確かに配列を作成しているよう

$servername = hiera('servername') 
$serverlocation = hiera('serverlocation') 
$ntp = hiera('ntp') 

augeas { 'node': 
    context => '/files/root/node', 
    changes => [ 
    "set servername/#text '$servername'", 
    "set serverlocation/#text '$serverlocation'", 
    "set ntp/#text '$ntp'", 
    ], 
} 

(他のAugeasリソースのプロパティが欠落していると、あなた自身で交換する必要があります注意してください)

関連する問題