gpt4 book ai didi

ansible - 从列表中排除 AnsibleUndefined

转载 作者:行者123 更新时间:2023-12-04 15:06:53 24 4
gpt4 key购买 nike

任务的相关部分:

- name: Get join-token for worker nodes
set_fact:
join_token_worker: "{{ ansible_play_hosts_all | map('extract', hostvars, ['result', 'swarm_facts', 'JoinTokens', 'Worker']) }}"
run_once: true

- debug:
msg: "{{ join_token_worker }}"
run_once: true
输出如下所示:
TASK [deploy_docker : Get join-token for worker nodes] ********************************************************************************************************************************************************************************************************************************************************
ok: [eu-central-1a-01]

TASK [deploy_docker : debug] **********************************************************************************************************************************************************************************************************************************************************************************
ok: [eu-central-1a-01] => {
"msg": "[AnsibleUndefined, AnsibleUndefined, AnsibleUndefined, 'SWMTKN-1-2xgm1l987hh18gbq0tc8vrwn209qlxge6nkwdq4pof2zd4e2vs-7f7ig2ama5amqq8iuii4o8xxo', AnsibleUndefined, AnsibleUndefined, 'SWMTKN-1-2xgm1l987hh18gbq0tc8vrwn209qlxge6nkwdq4pof2zd4e2vs-7f7ig2ama5amqq8iuii4o8xxo', AnsibleUndefined, AnsibleUndefined]"
}
我想从此列表中提取 token - 但我不知道如何过滤掉 AnsibleUndefined值(value)。我正在使用 docker_swarm模块获取 result .

最佳答案

让我们尽量减少这种情况。例如,剧本

- hosts: h1,h2,h3
gather_facts: false
vars:
d2:
h1:
k1:
k2: v1
h2:
k1:
kX: v2
h3:
k1:
k2: v3
tasks:
- debug:
msg: "{{ ansible_play_hosts_all|
map('extract', d2, ['k1', 'k2'])|
list }}"
run_once: true

  msg: '[''v1'', Undefined, ''v3'']'
有更多选择如何 “从列表中排除 AnsibleUndefined” .
  • 使用选择(信用@mdaniel)

  •     - debug:
    msg: "{{ ansible_play_hosts_all|
    map('extract', d2, ['k1', 'k2'])|
    select|
    list }}"
    run_once: true

      msg:
    - v1
    - v3
  • 使用 regex_replace

  •     - debug:
    msg: "{{ ansible_play_hosts_all|
    map('extract', d2, ['k1', 'k2'])|
    map('regex_replace', '(.*)', '\\1')|
    list }}"
    run_once: true

      msg:
    - v1
    - ''
    - v3
  • 如果要创建字典,请迭代主机。例如

  •     - set_fact:
    worker_dict: "{{ worker_dict|default({})|
    combine({item: d2[item].k1.k2|default('')}) }}"
    loop: "{{ ansible_play_hosts_all }}"
    run_once: true

      worker_dict:
    h1: v1
    h2: ''
    h3: v3

    关于ansible - 从列表中排除 AnsibleUndefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65974887/

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