2014-01-11 9 views
13

Извините за ошибки, которые я совершил, я не англичанин.Как пропустить роль, выполняемую в Ansible

Я пытаюсь написать playbook.yml для моей бродяжной машины, и я столкнулся со следующей проблемой. Ansible подскажите мне установить эти переменные, и я установил эти переменные в значение null/false/no/[just enter], но роли выполняются независимо от того! Как я могу предотвратить это поведение? Я просто не хочу никаких действий, если нет варов не установлены ..

--- 
- 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 } 

ответ

16

Я считаю, что переменная всегда будет определен при использовании vars_prompt, поэтому «определяется» всегда будет истинными. Вероятно, вам нужно что-то в этом направлении:

- name: Deploy Webserver 
    hosts: webservers 
    vars_prompt: 
    - name: run_common 
     prompt: "Product release version" 
     default: "Y" 

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

Редактировать: Чтобы ответить на ваш вопрос, он не вызывает ошибку. Я сделал немного другую версию и тестирование его с помощью анзибль 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" } 

и роли/общие/задачи/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 
+0

Насколько я знаю, этот пример вызывает ошибку, когда run_common не соответствует «Y». Вы его протестировали? –

+1

См. Мой отредактированный пример выше, показывающий вывод, когда это выполняется в обоих направлениях. –