2017-11-06 1 views
1

私は、アナーシブルプレイブックのロール内のタスクから変数を使用することに固執しています。私の脚本は以下の通りです:同じプレイブック内のロールでset_factからの変数を使用する

- hosts: server.com 
    gather_facts: yes 
    tasks: 
    - set_fact: 
     private_ip: "{{ item }}" 
     with_items: "{{ ansible_all_ipv4_addresses }}" 
     when: "item.startswith('10.')" 
    - debug: var=private_ip 
    roles: 
    - role: check-server 
     server_ip: 10.10.0.1 
     client_ip: "{{ private_ip }} 

pleybookを変数private_ip内部-debugショー正しいIPを走っているが、私はprivate_ipコンテンツを取得する(ブロックの役割から)CLIENT_IPを作ることができないとき。 client_ipは常に未定義のままです。

ここで私はclient_ip = $ private_ipを持つためにどのような魔法を適用できますか?

答えて

1

tasksは、rolesが適用された後に実行されます。

tasksからpre_tasksに変更してください。


また、ループ内でset_factを使用することはベストプラクティスではありません。あなたが望む価値を得るなら、それは大丈夫です、私はあなたがそれを確認したと信じています。しかし、むしろ(ansible_all_ipv4_addresses | select("match", "10\..*") | list)[0]を使うべきです。

+0

これだけです!プレイブックは読まれたときに処刑されたと思っていました。 –

+0

プレイブックは、プレイリストがプレイリストであるため、この順序で実行されます。一方、演劇は辞書であり、辞書はソートされていない。それらはkey( 'pre_tasks'、' roles'、 'tasks')の名前に従って解釈されます。執筆順序は関係ありません。 – techraf

関連する問題