【发布时间】:2022-07-04 19:39:03
【问题描述】:
我在 ansible 中使用 lineinfile 模块将清单中的所有主机附加到文件中。 这是 ansible playbook 代码 -
- hosts: test
connection: ssh
gather_facts: no
tasks:
- name: Create file to store hosts to be updated
delegate_to: localhost
run_once: true
file:
path: /tmp/updated_hosts.txt
state: touch
mode: u=rw,g=rw,o=rw
- name: WRITE of updated hosts in play
delegate_to: localhost
lineinfile:
path: /tmp/updated_hosts.txt
line: "{{ inventory_hostname }},"
when: some condition
这是我的库存
[test]
test1
test2
test3
test4
test5
test6
test7
test8
test9
test10
test11
test12
test13
test14
test15
test16
test17
test18
test19
test20
test21
test22
test23
test24
test25
test26
test27
test28
test29
test30
但是在运行剧本之后
PLAY [test] ***********************************************************************************************************************************************************************************************
TASK [Create file to store hosts to be updated] ***********************************************************************************************************************************************************
changed: [test1 -> localhost]
TASK [WRITE of updated hosts in play] *********************************************************************************************************************************************************************
changed: [test2 -> localhost]
changed: [test1 -> localhost]
changed: [test4 -> localhost]
changed: [test5 -> localhost]
changed: [test3 -> localhost]
changed: [test7 -> localhost]
changed: [test10 -> localhost]
changed: [test6 -> localhost]
changed: [test8 -> localhost]
changed: [test9 -> localhost]
changed: [test11 -> localhost]
changed: [test12 -> localhost]
changed: [test13 -> localhost]
changed: [test14 -> localhost]
changed: [test15 -> localhost]
changed: [test16 -> localhost]
changed: [test18 -> localhost]
changed: [test20 -> localhost]
changed: [test19 -> localhost]
changed: [test17 -> localhost]
changed: [test21 -> localhost]
changed: [test24 -> localhost]
changed: [test22 -> localhost]
changed: [test23 -> localhost]
changed: [test25 -> localhost]
changed: [test26 -> localhost]
changed: [test29 -> localhost]
changed: [test27 -> localhost]
changed: [test28 -> localhost]
changed: [test30 -> localhost]
PLAY RECAP ************************************************************************************************************************************************************************************************
test1 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test10 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test11 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test12 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test13 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test14 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test15 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test16 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test17 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test18 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test19 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test20 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test21 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test22 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test23 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test24 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test25 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test26 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test27 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test28 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test29 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test3 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test30 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test5 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test6 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test7 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test8 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test9 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
当我检查 /tmp/updated_hosts.txt 的内容时,这是我发现的 -
test1,
test5,
test3,
test8,
test9,
test14,
test17,
test22,
test25,
test30,
为什么我看不到所有主机?即使我看到该任务已在所有主机上执行。
附: - 清单 test1、test2 ...中的主机仅用于提问。
编辑 - 我已经编辑了 ansible 代码,只在满足某些条件时才将主机名写入文件
【问题讨论】:
-
此外,在旅途中更新文件并不是最好的方法。你可以在
ansible_play_hostmagic variablemagic variable播放结束时立即获得该列表 -
@Zeitounator 只是为了问我已经格式化了我想要实现的问题。问题是我不希望将每个主机都写入文件,而只希望那些满足我将在 when 语句中放入的条件的主机
-
@ashishpm 然后不要将其放在 when 语句中,并使用
selectattr过滤hostvars字典。您需要向我们解释您真正想要做什么,而不是您当前的尝试,否则您将面临可怕的 XY problem 范式。
标签: ansible