首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ansible寄存器-动态命名

Ansible寄存器-动态命名
EN

Stack Overflow用户
提问于 2019-04-23 00:46:32
回答 1查看 230关注 0票数 1

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

我试过下面的代码

代码语言:javascript
复制
- name: Check if Service Exists
  stat: path=/etc/init.d/{{ item }}
  register: {{ item }}_service_status
  with_items:
     - XXX
     - YYY
     - ZZZ

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

EN

回答 1

Stack Overflow用户

发布于 2019-04-23 01:17:57

已更新答案

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

代码语言:javascript
复制
register: "{{ item }}_service_status"

也可以使用set_fact (1234)

通过循环静态变量output中的每一项,

  • 将所有输出注册到单个静态变量output,然后使用循环迭代地构建新的变量service_status (list

代码语言:javascript
复制
- 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 }}"

初始答案

Ansible文档中的this link展示了如何在循环中使用register (参见this SO post中的另一个示例)。

有几点

  • 将列表(XXX, YYY, ZZZ)分配给单独的变量可能更方便(例如,2)
  • I,1不知道这是否是问题的一部分,但是with_items is no longer the recommended approach循环遍历变量:而不是使用loop -参见here以获取

的示例

代码语言:javascript
复制
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 }}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55797883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档