【问题标题】:How to skip role executing in Ansible如何在 Ansible 中跳过角色执行
【发布时间】:2014-01-30 12:55:19
【问题描述】:

我尝试为我的流浪机器编写 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 }

【问题讨论】:

    标签: deployment webserver vagrant administration ansible


    【解决方案1】:

    我相信当你使用 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" }
    

    编辑:要回答您的问题,不,它不会引发错误。我做了一个稍微不同的版本,并使用 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
    

    【讨论】:

    • 据我所知,当 run_common 与“Y”不匹配时,此示例会引发错误。你测试了吗?
    • 查看上面我编辑的示例,显示双向运行时的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多