You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:54:00