如何优化基于harbor_patch__vm_region变量的Ansible任务代码
Ansible 重复任务重构优化方案
核心思路是用键值对映射替代重复的条件分支,将区域标识与对应的卫星地址绑定,通过变量引用直接获取对应值,仅用单个任务实现所有原逻辑。
优化方案一:集中映射式(可读性优先)
这种写法把所有区域映射集中管理,后续维护更方便,同时保留原任务名称的格式:
# file: harbor-patch/tasks/modify-scripts.yml --- - name: "{{ __tpfx }}modify-scripts | Modify the scripts to use the {{ sat_name_mapping[harbor_patch__vm_region] }} satellite" vars: # 区域与卫星地址的映射表 sat_mapping: bo: "AAA.111.222.333.com" az: "AAA.111.222.333.com" cn: "BBB.111.222.333.com" mx: "CCC.111.222.333.com" cl: "DDD.111.222.333.com" uk: "EEE.111.222.333.com" # 区域与卫星名称的映射表(匹配原任务名称文案) sat_name_mapping: bo: "Boadilla" az: "Boadilla" cn: "Cantabria" mx: "Mexico" cl: "Chile" uk: "UK" lineinfile: path: '{{ harbor_patch__dest_directory }}/set_patch_env.sh' line: 'SAT={{ sat_mapping[harbor_patch__vm_region] }}' when: harbor_patch__vm_region in sat_mapping
优化方案二:紧凑单行式(行数最少)
如果追求极致精简,可将映射字典直接嵌入任务中,实现单任务核心逻辑的极简写法:
# file: harbor-patch/tasks/modify-scripts.yml --- - name: "{{ __tpfx }}modify-scripts | Modify the scripts to use the region-matched satellite" lineinfile: path='{{ harbor_patch__dest_directory }}/set_patch_env.sh' line='SAT={{ {"bo":"AAA.111.222.333.com","az":"AAA.111.222.333.com","cn":"BBB.111.222.333.com","mx":"CCC.111.222.333.com","cl":"DDD.111.222.333.com","uk":"EEE.111.222.333.com"}[harbor_patch__vm_region] }}' when: harbor_patch__vm_region in ["bo","az","cn","mx","cl","uk"]
方案优势
- 消除代码冗余:无需重复编写相同的
lineinfile任务结构 - 维护成本降低:新增/修改区域仅需调整映射表,无需改动任务逻辑
- 逻辑更清晰:所有区域对应关系集中展示,避免分散的条件判断
内容的提问来源于stack exchange,提问作者GBT55
相关产品推荐
相关产品推荐

