2016-11-15 6 views
2

私は自分のWebサーバ用の構造を構築しています。私はヒエラで私のセットアップを持っていますが、正しいタイプを返すために人形を手に入れることはできません。 common.yaml人形マニフェストで深くネストされたhieraハッシュを反復する

vhosts: 
    hostname: 
    sitename: 
     app_url: value 
     app_type: value 

私はバーチャルホストごとに複数のサイトや複数のバーチャルホストを持っています。私のマニフェストでは、フォルダ構造やその他の設定タスクを作成するつもりですが、今のところはサイトを繰り返し処理することさえできません。

現在のマニフェスト:

define application($app_name, $app_url) { 
    notice("App Type: ${app_type}") 
    notice("App Url: ${app_url}") 
} 

$vhosts = hiera('vhosts') 

$vhosts.each |$vhost| { 
    create_resources(application, $vhost) 
} 

私が手にエラーがcreate_resourcesがハッシュを必要とすることです。しかし、私がキャストした場合、$vhostはハッシュではなくタプルであることがわかります。

yamlハッシュからどのようにTupleを取得しましたか?私が必要とするものを得るためにこのデータセットを反復する良い方法がありますか?

答えて

4

2番目の例では、なぜタプルが説明されたのかがhttps://docs.puppet.com/puppet/latest/reference/function.html#eachに説明されています。

考えるようHieraハッシュ:あなたは次のようにそれを反復処理することができます

vhosts: 
    hostname: 
    sitename: 
     app_url: value 
     app_type: value 

hiera_hash('vhosts').each |String $hostname, Hash $hostname_hash| { 
    # $hostname is 'hostname' 
    # $hostname_hash is { hostname => { sitename => { app_url => value, app_type => value } } } 
    $hostname_hash.each |String $sitename, Hash $sitename_hash| { 
    # $sitename is 'sitename' 
    # $sitename_hash is { sitename => { app_url => value, app_type => value } } 
    $sitename_hash.each |String $key, String $value| { 
     # first loop $key is app_url and $value is 'value' 
     # second loop $key is app_type and $value is 'value' 
    } 
    } 
} 

することはでき、もちろん、

hiera_hash('vhosts')['hostname']['sitename']['app_url'] 
などの任意の時点でアクセスハッシュ値

これはvalueとなります。

create_resources()を実行しようとしている場合、おそらくハッシュをリソースハッシュのハッシュとして構築したいと考えています。たとえば、Hiera:人形と

packages: 
    gcc: 
    ensure: installed 
    gfortran: 
    ensure: absent 

create_resources(hiera_hash('packages')) 
関連する問題