首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何循环访问寄存器输出的hostvars

如何循环访问寄存器输出的hostvars
EN

Stack Overflow用户
提问于 2020-08-10 10:57:53
回答 1查看 293关注 0票数 0

我正在努力循环动态清单中所有主机的已注册输出的hostvars。下面是代码。

代码语言:javascript
复制
$cat collect.yaml 
---
- hosts: "{{ env }}"
  become: True
  tasks:
   - name: Get dockerinfo
     docker_host_info:
       containers: yes
     register: result

- name: Debug dockerInfo
  debug:
    var: result.containers

- name: dynamic grouping
  add_host:
    name: "{{ item[0] }}"  
    groups: "{{ item[1].Image | regex_replace('.*?/(.*?):.*', '\\1') }}"
  loops: 
    -  "{{ ansible_play_batch }}"
    -  "{{ hostvars[item].result.containers }}" 

错误I get是未定义的项目。我希望主机引用它们各自的result.containers。不确定如何使用主机的主机变量来引用其各自的result.containers。

这是result.container的输出。

代码语言:javascript
复制
TASK [Debug dockerInfo]
ok: [vm1.nodekite.com] => {
"result.containers": [
{
"Image": "ca.docker/webproxy:1.0.0",
},
{
"Image": "docker.local/egacustomer:1.0.1",
},
]}
 ok: [vm2.nodekite.com ] => {
 "result.containers": [
 {
"Image": "ca.docker/webproxyui:1.0.0",
 },
 {
"Image": "cna-docker-local/lega-customer:1.0.1",
},
]}

以下是我想要实现的目标

代码语言:javascript
复制
changed: [vm1.nodekite.com] => {
"add_host": {
"groups": [
    "webproxy"
],
"host_name": "vm1.nodekite.com",
},
changed: [vm1.nodekite.com] => {
"add_host": {
"groups": [
    "egacustomer"
],
"host_name": "vm1.nodekite.com",
},
changed: [vm2.nodekite.com] => {
"add_host": {
"groups": [
    "webproxy"            >> this should be webproxyui
],
"host_name": "vm2.nodekite.com",
},
changed: [vm2.nodekite.com] => {
"add_host": {
"groups": [
    "egacustomer"           >> this should be lega-customer
],
"host_name": "vm2.nodekite.com",
 },

任何帮助都将不胜感激。我将使用图像名称运行此任务

代码语言:javascript
复制
- hosts: "{{ group }}"
  gather_facts: false
  become: true
  become_method: sudo
  tasks:
    - name: stop or restart docker containers
      command: "docker {{ state }} {{ container_name }}"
EN

回答 1

Stack Overflow用户

发布于 2020-08-10 12:19:51

如果只将group_byloop配对如何?

代码语言:javascript
复制
- hosts: "{{ env }}"
  become: True
  tasks:
    - name: Get dockerinfo
     docker_host_info:
       containers: yes
     register: result

    - debug:
        var: result.containers

    - group_by:
        key: "container_{{ item.image | regex_replace('.*?/(.*?):.*', '\\1') }}"
      loop: "{{ result.containers }}"

    - debug:
        var: group_names

您不需要添加前缀。但这会将每个主机添加到具有其容器镜像前缀的组中。您应该能够在稍后的实演或攻略中使用该组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63333537

复制
相关文章

相似问题

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