Ansible新手关于when条件的playbook编写错误修正求助
Ansible Playbook 修正方案
原代码问题说明
set_fact语法使用错误,不能直接在其下方定义带when的列表结构when条件内引用变量无需使用{{ }}包裹,Ansible会自动解析该上下文内的变量debug模块输出变量时,需要用{{ }}包裹变量名,否则仅会输出固定字符串- 原逻辑中如果没有匹配的region,
url变量会未定义,可补充默认值规避报错
修正后代码(对齐原始条件写法逻辑)
- hosts: all gather_facts: False vars_prompt: - name: "region" prompt: "Which region" tasks: - name: Set url for IN region set_fact: url: "google.com" when: region == "IN" - name: Set url for UK region set_fact: url: "facebook.com" when: region == "UK" - name: Set url for US region set_fact: url: "stackoverflow.com" when: region == "US" - name: Set url for AZ region set_fact: url: "linkedin.com" when: region == "AZ" - name: Print matched url debug: msg: "{{ url }}"
更精简的优化写法(无需多段when)
用字典映射直接匹配对应值,后续维护新增地区只需修改映射表即可:
- hosts: all gather_facts: False vars_prompt: - name: "region" prompt: "Which region" vars: region_url_map: IN: "google.com" UK: "facebook.com" US: "stackoverflow.com" AZ: "linkedin.com" tasks: - name: Get matched url set_fact: url: "{{ region_url_map[region] | default('default-site.com') }}" - name: Print matched url debug: msg: "{{ url }}"
内容的提问来源于stack exchange,提问作者Rag
相关产品推荐
相关产品推荐

