如何在单个Ansible任务中按版本执行不同OC命令?
可以合并,给你两种实用的实现方案
完全可以把这两个任务合并成单个任务,核心思路是根据vars.version的值动态选择命名空间,以下是两种常用方案:
方案一:字典映射(适合多版本扩展)
先定义版本与命名空间的映射关系,后续新增版本时只需更新字典,维护起来更方便:
- name: fetch configuration command: "oc get disk -n {{ ns_map[vars.version] }} -o json" vars: ns_map: "2.1": "xyz" "3.0": "abc" when: vars.version in ns_map.keys() # 仅当版本在映射表里才执行,避免无效命令 register: oc_result
方案二:直接用Jinja2条件表达式(轻量简洁)
如果只有这两个版本的简单判断,直接在命令中嵌入条件表达式更省事:
- name: fetch configuration command: "oc get disk -n {{ 'xyz' if vars.version == '2.1' else 'abc' }} -o json" when: vars.version in ['2.1', '3.0'] # 限制仅指定版本执行 register: oc_result
两种方案都会根据vars.version的值自动切换命名空间执行命令,执行结果都会存到oc_result变量里,和原来两个任务的效果完全一致。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

