web-dev-qa-db-ja.com

Ansibleで実行中のロールをスキップする方法

私の迷惑なマシンのplaybook.ymlを書き込もうとすると、次の問題に直面します。 Ansibleこれらの変数を設定するように要求し、これらの変数をnull/false/no/[入力するだけ]に設定しましたが、ロールは関係なく実行されます!この動作を防ぐにはどうすればよいですか?変数が設定されていない場合、アクションは必要ありません。

---
- name: Deploy Webserver
  hosts: webservers
  vars_Prompt:
    run_common: "Run common tasks?"
    run_wordpress: "Run Wordpress tasks?"
    run_yii: "Run Yii tasks?"
    run_mariadb: "Run MariaDB tasks?"
    run_nginx: "Run Nginx tasks?"
    run_php5: "Run PHP5 tasks?"

  roles:
    - { role: common, when: run_common is defined }
    - { role: mariadb, when: run_mariadb is defined }
    - { role: wordpress, when: run_wordpress is defined }
    - { role: yii, when: run_yii is defined }
    - { role: nginx, when: run_nginx is defined }
    - { role: php5, when: run_php5 is defined }
18

Vars_Promptを使用すると、変数は常に定義されると思います。そのため、 "is defined"は常にtrueになります。おそらくあなたが望むものはこれらの線に沿ったものです:

- name: Deploy Webserver
  hosts: webservers
  vars_Prompt:
    - name: run_common
      Prompt: "Product release version"
      default: "Y"

  roles:
    - { role: common, when: run_common == "Y" }

編集:あなたの質問に答えるために、それはエラーをスローしません。少し異なるバージョンを作成し、ansible 1.4.4を使用してテストしました。

- name: Deploy Webserver
  hosts: localohst
  vars_Prompt:
    - name: run_common
      Prompt: "Product release version"
      default: "N"

  roles:
    - { role: common, when: run_common == "Y" or run_common == "y" }

そして、roles/common/tasks/main.ymlには以下が含まれます:

- local_action: debug msg="Debug Message"

上記の例を実行し、Enterを押してデフォルトを受け入れた場合、ロールはスキップされます。

Product release version [N]:

PLAY [Deploy Webserver] *******************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [common | debug msg="Debug Message"] ************************************
skipping: [localhost]

PLAY RECAP ********************************************************************
localhost            : ok=1    changed=0    unreachable=0    failed=0

しかし、これを実行し、プロンプトが表示されたらYまたはyを入力すると、ロールは必要に応じて実行されます。

Product release version [N]:y

PLAY [Deploy Webserver] *******************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [common | debug msg="Debug Message"] ************************************
ok: [localhost] => {
    "item": "",
    "msg": "Debug Message"
}

PLAY RECAP ********************************************************************
localhost            : ok=2    changed=0    unreachable=0    failed=0
26
Bruce P