2017-05-11 7 views
1

私は人形の中に小さなフリーラジオのモジュールを作成しています。だから私は、テンプレートファイルclients.erbでこれを作成しようとしています人形のyamlハッシュを反復する

client switch01 { 
    ipaddr = 10.10.10.50 
    secret = secret 
    shortname = switch01 
} 
client switch02 { 
    ipaddr = 10.10.10.51 
    secret = secret 
    shortname = switch02 
} 

:私はこのようになっているはずですclient.confファイルを作成するいくつかの問題を、持っています。これらはファイルです:

YAMLファイル:

test_freeradius::clients: 
    'switch01': 
     ip: '10.10.10.50' 
     secret: 'secret' 
     shortname: 'switch01' 
    'switch02:: 
     ip: '10.10.10.51' 
     secret: 'secret' 
     shortname: 'switch02' 

定義:

define test_freeradius::clients (

    $ip, 
    $secret, 
    $shortname, 

) { 

    include test_freeradius::service 

    if ! defined(File['/etc/freeradius/clients.conf']){ 
    file { '/etc/freeradius/clients.conf' : 
     ensure => 'file', 
     owner => 'root', 
     group => 'freerad', 
     mode => '0640', 
     content => template('test_freeradius/clients.erb'), 
     require => Class['test_freeradius::install'], 
     notify => Service['freeradius'], 
    } 
    } 
    $data = hiera_hash('test_freeradius::clients') 
} 

init.pp:

class test_freeradius { 

    create_resources(test_freeradius::clients, $data) 
} 

を私はクレアができこのようなクライアント:

client <%= @shortname %> { 
    ipaddr = <%= @ip %> 
    secret = <%= @secret %> 
    shortname = <%= @shortname %> 
} 

しかし、私は複数のクライアントを作成することができませんでした!最後に10人のクライアントを作成する必要があります。

これは動作しませんでした:

<% test_freeradius::clients.each do |key,value| -%> 
    client <%= key %> { 
     ipadd = <%= value['ip'] %> 
     asecret = <%= value['secret'] %> 
     shortname = <%= value['shortname'] %> 
    } 
    <% end -%> 

私の質問は、私はclient.confファイルを作成するためにハッシュを反復処理することができる方法ですか?

ありがとうございました!

答えて

0

init.ppで定義されていないと、create_resourcesと組み合わせて使用​​すると問題が発生します。また、定義されたリソースタイプでそのハッシュのパラメータを作成し、それを属性パラメータとして渡すだけで十分です。次に、定義されたリソースタイプでハッシュを使用できます。現時点では、定義されていないハッシュを渡し、定義済みのリソースタイプで同じハッシュを検索しようとしています。これは冗長です。私はそれを渡すか、それを探して、両方をしないことをお勧めします。例えば

# clients.pp 
define test_freeradius::clients(
    $client_settings = {} 
) 
... 
} 

# init.pp 
... 
test_freeradius::clients { 'create client confs': 
    $client_settings => hiera_hash('test_freeradius::clients') 
} 

は少し物事を最適化し、きれいでしょう。また、hiera_hashは、そのキーが複数のレベルで見つかった場合はハッシュマージを行いますので注意してください。

ERB内部でtest_freeradiusを使用している場合は、2つの問題があります。 1つは、変数がdataで、test_freeradius::clientsではないことです。次に、ERBはPuzzetによって使用され、@のインスタンス変数として使用できるのと同じスコープでPuppet変数にバインドされます。この場合は@dataです。マニュアルに

<% @data.each do |key, value| -%> 
client <%= key %> { 
    ipadd = <%= value['ip'] %> 
    asecret = <%= value['secret'] %> 
    shortname = <%= value['shortname'] %> 
} 
<% end -%> 

注非常に関連した例を::2の修正を組み合わせることで、私たちは到着https://docs.puppet.com/puppet/4.10/lang_template_erb.html#iteration

、さらには人形の中にERBに人形変数を使用するため、その文書の他のセクションをチェックアウトをお勧めします。

+0

サポートをいただきありがとうございます。正常に動作します。私は完全に何を理解していない{ create_resources(test_freeradius ::クライアント、$データ) $データ= hiera_hash( 'test_freeradius ::顧客')} クラスtest_freeradius:私は私の 'init.pp'を調整しました また、定義されたリソースタイプ にそのハッシュのパラメータを作成し、それを属性 のパラメータとして渡すことも考慮する必要があります。次に、定義されたリソースタイプでハッシュを使用できます。 大変申し訳ございません。私はまだ完全に人形の新しいです!あなたが投稿したリンクを介して私は行くつもりです。 もう一度。どうもありがとう! – Max

+0

あなたのために働いた@Max Glad。私の答えを受け入れ、その隣にあるチェックマークをクリックしてください。 –

+0

完了!定義されたリソースにハッシュのパラメータを作成し、それを属性パラメータとして渡す方法を私に正しい方向に向けることができますか?定義されたリソースタイプでハッシュを使用しますか?ありがとうございました! – Max

関連する問題