Ansible 可解析寄存器-动态命名

Ansible 可解析寄存器-动态命名,ansible,Ansible,我试图使用Ansible playbook中的寄存器来存储我的输出。下面是我正在使用的代码 我试过下面的代码 - name: Check if Service Exists stat: path=/etc/init.d/{{ item }} register: {{ item }}_service_status with_items: - XXX - YYY - ZZZ 我需要根据代码中提到的项目将不同的输出存储在不同的寄存器变量中。它失败了,无法继续

我试图使用Ansible playbook中的寄存器来存储我的输出。下面是我正在使用的代码

我试过下面的代码

- name: Check if Service Exists
  stat: path=/etc/init.d/{{ item }}
  register: {{ item }}_service_status
  with_items:
     - XXX
     - YYY
     - ZZZ

我需要根据代码中提到的项目将不同的输出存储在不同的寄存器变量中。它失败了,无法继续。任何帮助都将不胜感激。

更新答案

我认为你需要在它周围加上引号:

register: "{{ item }}_service_status"
或者您可以使用
set\u fact
(,)

  • 将所有输出注册到单个静态变量
    output
    ,然后通过循环静态变量
    output

初始答案

Ansible docs中的IIUC演示了如何在循环中使用
寄存器
(参见中的另一个示例)

几点

  • 将列表(
    XXX,YYY,ZZZ
    )分配给一个单独的变量(例如
  • 我不知道这是否是问题的一部分,但是使用
    with_items
    循环变量:而是使用
    循环
    -参见示例

我在这里寻找登记册的名称是动态的。不可能吗?因为我计划在代码中基于名称的其他位置使用该寄存器。@SridharAdurthi,谢谢您的回复。请看我更新的答案。哪个部分失败了?您可以发布错误消息吗?另外,您可以展示如何根据动态变量的名称在代码的其他地方使用它们吗?
- name: Check if Service Exists
  stat: path=/etc/init.d/{{ item }}
  register: output
  with_items:
     - XXX
     - YYY
     - ZZZ

- name: Setting fact using output of loop
  set_fact:
    service_status:
      - rc: "{{ item.rc }}"
        stdout: "{{ item.stdout }}"
        id: "{{ item.id }}"
  with_items:
    - "{{ output }}"

- debug:
    msg: "ID and stdout: {{ item.id }} - {{ item.stdout }}"
  with_items:
    - "{{ service_status }}"
vars:
  items:
    - XXX
    - YYY
    - ZZZ

- name: Check if Service Exists
  stat: path=/etc/init.d/{{ item }}
  register: service_status
  loop: "{{ items|flatten(levels=1) }}"

- name: Show the return code and stdout
  debug:
    msg: "Cmd {{ item.cmd }}, return code {{ item.rc }}, stdout {{ item.stdout }}"
  when: item.rc != 0
  with_items: "{{ service_status.results }}"