我对 ansible 非常新鲜,并创建了一个剧本,在其中一个任务中应该复制模板文件并替换 2 行中的值。第一行应该有当前的主机名,在第二个分号分隔的所有其他主机列表中(在剧中使用) - 它将是不同的组
第一行非常简单,因为它只是:
localnode={{ inventory_hostname }}
Run Code Online (Sandbox Code Playgroud)
但我在第二行中遇到排除问题。我想要类似的东西:
{% for host in groups.nodes -%} # but without inventory_hostname
othernodes={{ host }}{% if not loop.last %};{% endif %}
{%- endfor %}
Run Code Online (Sandbox Code Playgroud)
鉴于库存:
nodes:
hosts:
hosta:
hostb:
hostc:
hostd:
Run Code Online (Sandbox Code Playgroud)
我想获得以下输出(hostd 的示例):
localnode=hostd
othernodes=hosta,hostb,hostc
Run Code Online (Sandbox Code Playgroud)
我将非常感谢有关可能解决方案的所有提示
创建没有inventory_hostname的主机列表并在模板中使用它
- set_fact:
list_other_hosts: "{{ groups.nodes|difference([inventory_hostname]) }}"
Run Code Online (Sandbox Code Playgroud)
简化模板
othernodes={{ list_other_hosts|join(';') }}
Run Code Online (Sandbox Code Playgroud)
shell> cat hosts
test_jails:
hosts:
test_01:
test_02:
test_03:
Run Code Online (Sandbox Code Playgroud)
和戏剧
- hosts: test_jails
tasks:
- set_fact:
list_other_hosts: "{{ groups.test_jails|
difference([inventory_hostname]) }}"
- debug:
msg: "{{ msg.split('\n') }}"
vars:
msg: |-
localnode={{ inventory_hostname }}
othernodes={{ list_other_hosts|join(';') }}
Run Code Online (Sandbox Code Playgroud)
给
TASK [debug] ********************************************************
ok: [test_01] => {
"msg": [
"localnode=test_01",
"othernodes=test_02;test_03"
]
}
ok: [test_02] => {
"msg": [
"localnode=test_02",
"othernodes=test_01;test_03"
]
}
ok: [test_03] => {
"msg": [
"localnode=test_03",
"othernodes=test_01;test_02"
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
592 次 |
| 最近记录: |