2017-05-05 13 views
0

私はちょっと変わった動作をしています。私はまだAnoys初心者ですので、事前にお詫び申し上げます。変数に基づいてロールを実行しています

私はここに見た例に基づいて、条件付きで役割を実行しようとしている:https://github.com/atomicobject/ansible-laptop-playbook-example/blob/1785f25014fa5a7776de5b332d093b60bf59c8e0/laptop.yml

をとにかく、私はhost_vars/localhostを持っている:私は私のトップレベルsite.yml、で

has_thing: true 

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing is defined and has_thing == "true" } 

これは役割をスキップします。

私が代わりにこれを行う場合:

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing is defined } 

を役割が実行されます。私はこれを行う場合は

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing == "true" } 

それは動作しません。

私がない場合:

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing != "true" } 

それはまだ動作しません。なぜ私はその値をテストしない限り、変数has_thingが明確に定義されているのか理解できません。

私はここで何が欠けていますか?

答えて

0

has_thing: trueはブール値で、has_thing: 'true'でテストできます。

ただし、whenステートメントをブール値を処理するように変更してください。

P.S. は条件付きでロールをロールとして実行することはできませんが、ロールは常に実行されますが、このロールのすべてのタスクにwhenステートメントが追加され、多くのスキップされたタスクが出力されます。

+0

ありがとうKonstantin。私は ' - {role:myrole、when:has_thingが定義され、has_thing: 'true'}'を実行しようとしましたが、 'has_thing: 'true'}'の構文に関するエラーが発生しました。どんな考え? – prelic

+0

'debug:var = has_thing'を使用して、引用符で囲まれていない出力の平均文字列を引用します。 'のようなもの:when:has_thing |デフォルト(false)|ブールはあなたがしたいことをするはずです。 –

+0

忍者編集に申し訳ありません。私はあなたが今言っていることを理解しています。あなたの助けに感謝します。 – prelic

関連する問題