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

如何在Ansible循环中存储变量值?

如何在Ansible循环中存储变量值?

嘿,我来帮你搞定这个问题!你想把循环里的{{ item }}值存到变量里,结合你给出的任务代码,我给你几个实用的方案:

方案1:在每次循环中存储单个item值(供角色内部使用)

如果你只是希望每次调用role1时,把当前循环的item值存成变量供角色内部使用,最简单的方式是直接在角色的任务里用set_fact存储:

# role1/tasks/main.yml 中的内容
- name: 将当前循环的item存入变量current_item
  set_fact:
    current_item: "{{ item }}"

这样每次循环调用role1时,current_item变量就会被设置为当前迭代的item值,你可以在角色的后续任务里直接使用这个变量。

方案2:收集所有循环的item值到一个列表变量

要是你想把整个循环里的所有item值都收集起来,存成一个全局列表变量,可以用register结合map来实现:

- name: 循环调用role并注册循环结果
  include_role:
    name: role1
    vars:
      template_path: "inventories/{{ ENV }}/group_vars/all"
      template_name: "wlc_wlb"
  loop: "{{ range(1, ihs_number+2) | list }}"
  register: loop_run_results

- name: 提取所有循环的item值到all_stored_items变量
  set_fact:
    all_stored_items: "{{ loop_run_results.results | map(attribute='item') | list }}"

执行完这两个任务后,all_stored_items就是包含所有循环item值的列表了——比如如果ihs_number是3,这个列表就是[1,2,3,4]。

方案3:循环时直接传递item到角色变量

其实你也可以不用额外存储,直接把item作为变量传递给角色,这样在角色内部直接调用这个变量就行:

- name: 循环调用role并传递item值
  include_role:
    name: role1
    vars:
      template_path: "inventories/{{ ENV }}/group_vars/all"
      template_name: "wlc_wlb"
      loop_item_value: "{{ item }}"  # 直接把item传给角色的自定义变量
  loop: "{{ range(1, ihs_number+2) | list }}"

之后在role1里直接用{{ loop_item_value }}就能访问当前的循环值,这种方式更直接,不需要额外的set_fact操作。

备注:内容来源于stack exchange,提问作者tima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:38:12