Ansible中两个with_sequence循环之间传递输出变量的实现问题
Ansible跨循环任务变量传递方案
核心逻辑
Ansible中使用循环(包括with_sequence)的任务通过register注册的变量,会将每次循环的执行结果存放在results列表属性中,列表下标从0开始,和循环执行顺序一一对应:
- 第一个任务循环
1-6,outdirs.results[0]对应编号1的目录执行结果,outdirs.results[1]对应编号2的目录,以此类推 - 第二个任务循环
21-26,正好21-21=0对应第一个任务下标0,22-21=1对应下标1,完全匹配映射关系
修正后的完整配置
第一步:创建目录任务(和原配置逻辑一致)
- name: 创建1-6编号目录 file: path: dir{{ item }} state: directory with_sequence: 1-6 register: outdirs
注:补充了
state: directory参数,确保模块按目录类型创建资源,避免原配置遗漏参数报错
第二步:挂载任务
直接通过下标取第一个任务返回的目录路径即可:
- name: 挂载21-26编号NFS存储 mount: state: mounted src: xxxx{{ item }} path: "{{ outdirs.results[item | int - 21].path }}" fstype: nfs with_sequence: 21-26
item | int是为了将with_sequence默认返回的字符串类型序号转为整数,用于下标计算。从register结果中取路径的方式更稳妥,若第一个任务目录创建失败,第二个任务会直接报错,避免无效挂载。
可选简化方案
如果不需要校验目录创建结果,也可以直接计算目录编号拼接路径,不用依赖register变量:
path: "dir{{ item | int - 20 }}"
该方式缺点是如果第一个任务路径规则变更,需要同步修改第二个任务的拼接规则,且无法感知第一个任务的执行错误。
内容的提问来源于stack exchange,提问作者user2237716
相关产品推荐
相关产品推荐

