ansible - Ansible - 在角色剧本中使用条件
问题描述
我正在尝试在我的 ansible-playbook 中添加一个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" }
- { 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 }} ===`*"}
这里我只需要在某个变量值为真时执行roles/application_copy_config 。在从 Jenkins(执行脚本中的布尔值参数)执行 ansible-playbook 时,此变量值作为 --extra-vars 传递。我尝试使用下面的代码,但它不起作用。
---
- 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 条件。这是必需的,因为我需要执行角色:roles/application_copy_config 仅当变量值为 true 时。我已使用此参考在角色中添加 when 条件
解决方案
能够使用 bool 过滤器为布尔值应用 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
推荐阅读
- python - Python - 如何正确地将条形图与线子图对齐?
- swiftui - 模型中 UserDefaults 的 SwiftUI 问题
- ios - RxSwift:将 RX 绑定添加到 UITextField 时出错:'Binder 类型的值
' 没有成员 '去抖动' - python - 如何将列表中的相同整数加在一起?
- javascript - JavaScript:元素定位
- html - 如何让这个简单的登陆页面弹性框在所有相关浏览器中都能正常工作?
- javascript - 而 http 查询直到 parentID 值为 '0'
- reactjs - 如何从“react-countdown-now”库中调用启动和暂停函数?
- python - 如何使用 Python 抓取 PDF;仅限特定内容
- ios - 如果我已经继承了 UIViewController,如何继承 SwipeTableViewController?另外,如何向用户显示键盘?(迅速)