gpt4 book ai didi

Ansible 如何对来自多个节点的命令输出进行排序

转载 作者:行者123 更新时间:2023-12-04 07:21:39 26 4
gpt4 key购买 nike

我有一个 Ansible 剧本,它在我的所有节点上运行一些命令来生成一个列表
可用图像。然后在我的 ansible Controller 上,我想生成一个组合的、排序的
删除所有重复项的列表。
我有一本剧本:

- hosts: kube_cluster
tasks:
- command: crictl images
become: yes
register: cri_images

- name: save results
delegate_to: localhost
run_once: yes
become: no
copy:
dest: cri_images.txt
content: |
{% for h in ansible_play_hosts %}
{{ hostvars[h].cri_images.stdout }}
{% endfor %}
这确实生成了文件,但我无法对组合输出进行排序。
对于每个节点,我会得到如下输出:
docker.io/bitnami/contour                          1.17.1-debian-10-r0    5be5c048ac5e2       132MB
docker.io/bitnami/envoy 1.17.3-debian-10-r62 7ff8d931d11c7 150MB
docker.io/calico/cni v3.19.1 5749e8b276f9b 146MB
docker.io/calico/node v3.19.1 c4d75af7e098e 171MB
在“stdout_lines”中可用。某些行在某些节点上重复。
我无法调整 jinja 代码以进行排序并删除重复项。可能需要某种形式的嵌套循环,或者一种将 hostvars[h].cri_images.stdout 弄平的方法。 .
但我不知道该怎么做。我得到的大多数是语法/模板错误。
另外,我还想:
  • 删除输出的标题行
  • 可以选择仅选择组合输出的几列。

  • 在 shell 脚本中,这可以通过 cat cri_images.txt | grep -v ^IMAGES | awk '{print $1 ":" $2}' | sort | uniq但要求是它必须在 Ansible 中运行。
    有人有提示吗?
    谢谢。

    最佳答案

    问:“ 我所有节点上的一些命令来生成可用图像列表……生成一个组合的排序列表,其中删除了所有重复项。
    A:为了测试,让我们拆分主机名,而不是生成可用图像的列表,例如

    - hosts: test_11,test_12,test_13
    tasks:
    - set_fact:
    cri_images: "{{ {}|combine({'stdout_lines':
    inventory_hostname.split('_')}) }}"
    - debug:
    var: cri_images.stdout_lines

    ok: [test_12] => 
    cri_images.stdout_lines:
    - test
    - '12'
    ok: [test_11] =>
    cri_images.stdout_lines:
    - test
    - '11'
    ok: [test_13] =>
    cri_images.stdout_lines:
    - test
    - '13'
    然后,生成一个合并的排序列表,删除所有重复项
        - copy:
    dest: cri_images.txt
    content: "{{ _content | join('\n') }}"
    vars:
    _content: "{{ ansible_play_hosts|
    map('extract', hostvars, ['cri_images', 'stdout_lines'])|
    flatten|unique|sort }}"
    delegate_to: localhost
    run_once: true

    shell> cat cri_images.txt
    11
    12
    13
    test

    关于Ansible 如何对来自多个节点的命令输出进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68453076/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com