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

Ansible中set_fact使用异常求助:无法生成预期列表数据

Ansible set_fact 处理列表数据问题解决方法

问题根源

你的代码存在三个核心问题:

  1. 未初始化列表变量:name_list和priv_list没有预先定义为空列表,第一次循环时会因变量不存在报错,或导致拼接逻辑异常。
  2. 字符串与列表拼接错误:item.split() | first返回的是单个字符串,直接和列表相加会把字符串拆成单个字符(比如"nilaj"会被拆成['n','i','l','a','j']),而非作为整体元素加入列表。
  3. priv_list更新逻辑错误:代码中用name_list来拼接priv_list的内容,逻辑完全错误,应该基于priv_list自身进行更新。

修正方案1:循环方式修正

先初始化空列表,再循环更新:

# 先初始化两个空列表
- set_fact:
    name_list: []
    priv_list: []

# 循环处理用户列表,将拆分后的元素分别加入对应列表
- set_fact:
    name_list: "{{ name_list + [item.split() | first] }}"
    priv_list: "{{ priv_list + [item.split() | last] }}"
  loop: "{{ user_list }}"

修正方案2:更简洁的map过滤器方式

无需循环,直接用map和list过滤器一次性处理,效率更高:

- set_fact:
    name_list: "{{ user_list | map('split') | map('first') | list }}"
    priv_list: "{{ user_list | map('split') | map('last') | list }}"

验证结果

添加debug任务查看最终输出:

- debug:
    msg:
      - "name_list: {{ name_list }}"
      - "priv_list: {{ priv_list }}"

执行后会得到预期结果:

name_list: ["nilaj", "ajin"]
priv_list: ["15", "15"]

内容的提问来源于stack exchange,提问作者Balkrushna.Kamble

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:47:01