2016-10-07 6 views
0

私は、同僚の古いロールに以下を含みます。ロール内の全ての実行を実行することが可能です

--- 
- name: deploy 
    include: deploy.yml 
    when: deploy is defined and deploy == 'True' 

- name: undeploy 
    include: undeploy.yml 
    when: undeploy is defined and undeploy == 'True' 

- name: database-migrate 
    include: database-migrate.yml 
    when: db is defined and db == 'True' 

ただし、どのように私が役割を含むかにかかわらず、Ansibleは自動的に各インクルードを処理しています。これは、--list-tasksオプションを使用して確認できます。私の脚本で私はバージョン2.1.1.0(数週間前、アップグレード)を実行している

roles: 
    - { role: vip-notification-services-app, deploy: 'True', tags: ['deploy']} 

を次している。例えば

。このロールはアップグレード前に正常に実行されていました。

したがって、このスタイルをロールに含めることができなくなったのか、使用する必要がある別の構文があるのだろうかと思います。

+1

私の[回答](http://stackoverflow.com/a/39856625/2795592)から別の質問(「条件付き」には仕事が含まれる方法について)を参照してください。 –

+0

@ ConstantinSuvorovその答えはこのような状況には当てはまりません。 – smiller171

+0

私は、値がブール値「True」の代わりに文字列「True」に評価される必要があると言います。これは意図的ですか? おそらく、これらのタスクをvarsファイルまたはdefaultsファイルに定義していますか、またはこれらのタスクを実行する前にどこかに定義していますか? – smiller171

答えて

1

--list-tasksオプションは、結果としてwhenの条件を評価しません。あなたが持っている場合、ある

playbook.yml

--- 
- hosts: localhost 
    connection: local 
    tasks: 
    - debug: 
     when: false 

ansible-playbook playbook.yml --list-tasks表示されます。debugタスクを実行することはないが、あなたが条件を変更した場合

playbook: test.yml 

    play #1 (localhost): localhost TAGS: [] 
    tasks: 
     debug TAGS: [] 

が(結果は変更されませんwith: true)。

Konstantin Suvorov noticedとして、includeには常にすべてのタスクが含まれ、各タスクに条件付きでwhenが適用されます。したがって、--list-tasks結果では、常にすべてのタスクが表示されます。しかし、実際には実行されません。

+0

--list-tasksオプションの説明をありがとう。私は小さなテストプレイブック/ロールを書いて、when節が無視されることを確認しました。 –

関連する問題