Ansible:执行特定tag时如何跳过playbook中的vars_prompt?
问题根源
Ansible的vars_prompt是在所有play执行之前就会被解析处理的,不管你指定了哪个tags,只要playbook里存在带vars_prompt的play,就会触发提示——哪怕这个play根本不会被tags选中执行。这就是你指定charts标签还会弹出cluster相关提示的原因。
可行解决方案
方法1:给vars_prompt加条件判断
利用Ansible内置变量ansible_run_tags(包含当前执行的所有标签列表),给cluster play的每个vars_prompt项加上when条件,只有当cluster标签在执行列表里时才触发提示:
- name: 集群配置play hosts: cluster tags: cluster vars_prompt: - name: confirm_disk_trim prompt: "确认执行磁盘修剪操作?(是/否)" default: "否" private: no when: '"cluster" in ansible_run_tags' - name: admin_password prompt: "输入管理员密码" private: yes when: '"cluster" in ansible_run_tags' tasks: # 这里写集群相关任务 - name: Charts部署play hosts: charts tags: charts vars_prompt: [] tasks: # 这里写charts相关任务
这样执行ansible-playbook --check --tags charts playbook.yaml时,ansible_run_tags里只有charts,cluster的vars_prompt条件不满足,就不会弹出任何提示。
方法2:拆分playbook文件
把两个play分别放到独立的yaml文件里,比如cluster_setup.yaml和charts_deploy.yaml。执行时直接指定对应文件:
# 执行集群相关任务 ansible-playbook cluster_setup.yaml # 执行charts部署任务(不会触发任何提示) ansible-playbook --check charts_deploy.yaml
这种方法更直观,适合play之间关联性不强的场景。
注意事项
ansible_run_tags变量要求Ansible版本在2.5及以上,如果你的版本较低,建议升级或者用方法2。- 如果同时指定多个标签(比如
--tags cluster,charts),cluster的vars_prompt还是会触发,这符合预期,因为此时cluster标签也在执行范围内。
内容的提问来源于stack exchange,提问作者Floren
相关产品推荐
相关产品推荐

