2016-04-17 7 views
0

私の目的は、辞書のリストを動的に生成し、必要な役割を果たすことです。ロールの変数を可能な遊びで生成する

私は変数を生成することができましたが、今はその役割に渡すことができません。

これは私の遊びである:私は私の変数を生成するタスクで

- hosts: 
    - some-hosts 
    tasks: 
    - name: create zkh var 
     vars: 
     zkh: [] 
     set_fact: 
     zkh: "{{ zkh + [ {'host': item.1, 'id': item.0} ] }}" 
     with_indexed_items: "{{ groups.some-hosts }}" 
    roles: 
    - {role: ansible-zookeeper, zookeeper_hosts: "{{ zkh }}" } 

が、(私は想像)、私はそれが定義されている範囲にアクセスすることができないとして、私はロールにそれを渡すことはできません("AnsibleUndefinedVariable: ERROR! ERROR! 'zkh' is undefined"} )。

プレイレベルの変数を定義し、それにset_factと値を割り当て、新しいタスクを割り当てて、zkhの値を指定しても役立たない。

どうすればこの問題を解決できますか?私はあなたのset_factが正常に動作していることを想定しています

- hosts: 
    - some-hosts 
    tasks: 
    - name: create zkh var 
     vars: 
     zkh: [] 
     set_fact: 
     zkh: "{{ zkh + [ {'host': item.1, 'id': item.0} ] }}" 
     with_indexed_items: "{{ groups.some-hosts }}" 
    - {role: ansible-zookeeper, zookeeper_hosts: "{{ zkh }}" } 

+3

'tasks'の代わりに' pre_tasks'を使って変数を作成してみてください。それでは、var – shaps

+0

にアクセスできるはずです。 –

+0

@shaps、私はそれを受け入れることができるように答えとしてそれを書いてください! –

答えて

1

ロールに必要な変数を定義するには、pre_tasksを使用する必要があります。 pre_tasksは、ロールを適用する前に実行されるタスクのリストです。

ロールを適用した後に何かをする必要がある場合は、post_tasksもあります。

0

あなたはこの脚本の構造を試すことができます。

+0

答えをありがとうが、これは私にとってはうまくいかなかった: 'ERROR!タスクでアクションが検出されませんでした。代わりに 'pre_task'を使用しました。 –

関連する問題