Ansible-在剧本中扮演角色时使用

时间:2020-04-29 19:10:48

标签: ansible

我试图在ansible-playbook中添加何时条件。但是,由于我的角色正在使用其他参数,因此我无法找出执行此操作的确切语法/方法。下面提到的是我的剧本

---

- name: Deploying application code
  hosts: uat-aegis

  roles:
    - { role: roles/send_slack, slack_message_text: "*`Started : Deploying code for {{ module_name }} on {{ inventory_hostname }}`*"}
    - { role: roles/application_code_backup, backup_directory_name: "NAME", repo_directory: "/path/to/repo" }
    - { role: roles/application_copy_config, repo_directory: "/path/to/repo"}
    - { role: roles/application_git_pull, repo_url: "git@code.git", repo_directory: "/path/to/repo", branch_name: "BRANCH_NAME"}
    - { role: roles/application_pm2_restart, process_name: "NAME" }
    - { role: roles/send_slack, slack_message_text: "*`=== Completed : Deploying code for {{ module_name }} on {{ inventory_hostname }} ===`*"}

仅在某些变量值为true时,我才需要执行 roles / application_copy_config 。从Jenkins执行ansible-playbook时,此变量值作为--extra-vars传递(Execute脚本中的布尔值参数)。我尝试使用下面的代码,但是它不起作用。

---

- name: Deploying application code
  hosts: uat-aegis

  roles:
    - { role: roles/send_slack, slack_message_text: "*`Started : Deploying code for {{ module_name }} on {{ inventory_hostname }}`*"}
    - { role: roles/application_code_backup, backup_directory_name: "NAME", repo_directory: "/path/to/repo" }
    - { role: roles/application_copy_config
      when: "copy_config=true", repo_directory: "/path/to/repo"}
    - { role: roles/application_git_pull, repo_url: "git@code.git", repo_directory: "/path/to/repo", branch_name: "BRANCH_NAME"}
    - { role: roles/application_pm2_restart, process_name: "NAME" }
    - { role: roles/send_slack, slack_message_text: "*`=== Completed : Deploying code for {{ module_name }} on {{ inventory_hostname }} ===`*"}

ansible-playbook命令如下

ansible-playbook plays/deploy_application/code.yml --extra-vars "module_name=$MODULE_NAME config_copy_path=$CURRENT_PATH/ env=$ENVIRONMENT copy_config=$COPY_CONFIG"

请帮助我使用ansible-playbook中的when条件。这是必需的,因为仅当变量值为true时,我才需要执行角色:role / application_copy_config。我已经使用this reference来添加角色中的when条件

1 个答案:

答案 0 :(得分:0)

如下所述,可以使用布尔过滤器将布尔值的when条件应用于

---

- name: Deploying application code
  hosts: uat-aegis

  roles:
    - { role: roles/send_slack, slack_message_text: "*`Started : Deploying code for {{ module_name }} on {{ inventory_hostname }}`*"}
    - { role: roles/application_code_backup, backup_directory_name: "NAME", repo_directory: "/path/to/repo", when: var1 | bool }
    - { role: roles/application_copy_config, repo_directory: "/path/to/repo"}
    - { role: roles/application_git_pull, repo_url: "git@code.git", repo_directory: "/path/to/repo", branch_name: "BRANCH_NAME", when: var2 | bool}
    - { role: roles/application_pm2_restart, process_name: "NAME", when: not var3 | bool }
    - { role: roles/send_slack, slack_message_text: "*`=== Completed : Deploying code for {{ module_name }} on {{ inventory_hostname }} ===`*"}

使用以下代码检查对与错

when: var1 | bool ----> true
when: not var2 | bool ----> false