首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤ansible攻略输出

过滤ansible攻略输出
EN

Stack Overflow用户
提问于 2020-12-05 00:46:36
回答 2查看 248关注 0票数 0

我有一个ansible剧本的输出,我需要在这样的方式应用过滤器,以继续下一步的任务。请找到下面的输出。

代码语言:javascript
复制
ok: [localhost] => {
"results": [
    {
        "actions": {
            "namespaces": {}, 
            "state": "present", 
            "xpath": "/Storage/SSL/KeyStorePath"
        }, 
        "ansible_loop_var": "item", 
        "changed": false, 
        "pod": 1, 
        "failed": false, 
        "invocation": {
            "module_args": {
                "mount": true, 
                "input_type": "yaml",
            }
        }, 
        "item": "100.108.22.102", 
        "msg": "found 1 nodes"
    }, 
    {
        "actions": {
            "namespaces": {}, 
            "state": "present", 
            "xpath": "/Storage/SSL/KeyStorePath"
        }, 
        "ansible_loop_var": "item", 
        "changed": false, 
        "pod": 0, 
        "failed": false, 
        "invocation": {
            "module_args": {
                "mount": true, 
                "input_type": "yaml",
            }
        }, 
        "item": "100.108.22.103", 
        "msg": "found 0 nodes"
    }
]

}

在这里,我希望下一个任务在节点各自的pod值为1时执行。如果节点的pod值为0,则下一个任务不应该在相应的节点ip上运行。

请协助..

EN

回答 2

Stack Overflow用户

发布于 2020-12-05 01:01:59

Q:当节点各自的pod值为1"时,"Execute下一个任务

答:有很多方法可以继续下一项任务。例如,给定变量results

  1. 使用delegate_to和loop selected items

代码语言:javascript
复制
- hosts: localhost
  tasks:
    - debug:
        msg: 'Task is running on {{ item.item }}'
      loop: "{{ results|selectattr('pod', 'eq', 1)|list }}"
      loop_control:
        label: "{{ item.item }}"
      delegate_to: "{{ item.item }}"

给予(删节)

代码语言:javascript
复制
TASK [debug] ****
ok: [localhost -> 100.108.22.102] => (item=100.108.22.102) => 
  msg: Task is running on 100.108.22.102

  1. 创建选定主机的列表,并测试该主机是否在list

代码语言:javascript
复制
- hosts: 100.108.22.102,100.108.22.103
  tasks:
    - debug:
        msg: "Task is running on {{ inventory_hostname }}"
      when: inventory_hostname in pods
      vars:
        pods: "{{ results|
                  selectattr('pod', 'eq', 1)|
                  map(attribute='item')|
                  list }}"

给予(删节)

代码语言:javascript
复制
TASK [debug] ****
ok: [100.108.22.102] => 
  msg: Task is running on 100.108.22.102
skipping: [100.108.22.103]

  1. 在第一个播放中使用add_host创建一个库存组,并在第二个播放中使用

代码语言:javascript
复制
- hosts: localhost
  tasks:
    - add_host:
        name: '{{ item }}'
        groups: pods_enabled
      loop: "{{ results|
                selectattr('pod', 'eq', 1)|
                map(attribute='item')|
                list }}"

- hosts: pods_enabled
  tasks:
    - debug:
        msg: "Task is running on {{ inventory_hostname }}"

给予(删节)

代码语言:javascript
复制
PLAY [localhost] ****

TASK [add_host] ****
changed: [localhost] => (item=100.108.22.102)

PLAY [pods_enabled] ****

TASK [debug] ****
ok: [100.108.22.102] => 
  msg: Task is running on 100.108.22.102

PLAY RECAP ****
100.108.22.102: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0   
localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
票数 1
EN

Stack Overflow用户

发布于 2020-12-05 01:00:43

您可以在下一个任务中使用with_itemswhen,如下所示

代码语言:javascript
复制
- name: validate pod value
  debug:
    msg: "The pod value is 1"
  with_items: "{{ your_var.results }}"
  when: item.pod == "1"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65147443

复制
相关文章

相似问题

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