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

在Ansible的map与regex_replace中使用变量的问题

Ansible变量未解析问题:map+regex_replace中port变量未替换

问题场景

拥有名为fqdn_list的列表变量,结构如下:

{
    "ansible_facts": {
        "fqdn_list": [
            "domain.example1.com",
            "    .    .    .    ",
            "domain.exampleN.com"
        ]
    }
}

尝试通过map结合regex_replace为每个元素添加端口号,编写任务如下:

- name: 'Creating url list'
  set_fact:
    url_list: "{{ fqdn_list | map('regex_replace', '$', ':{{ port }}') | list }}"
  vars:
    port: 8089

预期结果:每个域名后拼接:8089
实际结果:{{ port }}未被解析,直接作为字符串保留

解决方法

方法1:用字符串拼接运算符~提前解析变量

在regex_replace的替换参数中,用~将port变量和冒号拼接,确保变量被提前解析:

- name: 'Creating url list'
  set_fact:
    url_list: "{{ fqdn_list | map('regex_replace', '$', ':' ~ port) | list }}"
  vars:
    port: 8089

方法2:使用format过滤器实现拼接

利用format过滤器,将每个FQDN和端口号格式化拼接:

- name: 'Creating url list'
  set_fact:
    url_list: "{{ fqdn_list | map('format', '%s:' ~ port) | list }}"
  vars:
    port: 8089

方法3:通过loop逐个处理元素

如果偏好更直观的方式,可以初始化空列表后,循环逐个添加端口号:

- name: Initialize empty url list
  set_fact:
    url_list: []

- name: Add port to each FQDN
  set_fact:
    url_list: "{{ url_list + [item ~ ':' ~ port] }}"
  loop: "{{ fqdn_list }}"
  vars:
    port: 8089

内容的提问来源于stack exchange,提问作者Po_temkin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:21:08