在Ansible库存中动态生成字符串



我在使用Ansible角色NFS时有一个问题。

NFS角色:https://github.com/geerlingguy/ansible-role-nfs

我的情况是这样的:我们将创建一个作为NFS客户端的VM列表。我们需要对NFS服务器进行访问控制。因此,我们根据上面的角色在Ansible库存中设置了一个名为"nfs_exports"的列表。

一些虚拟机将在完成全部工作负载后终止和停用。我们将重新运行包含NFS角色的剧本,以更新NFS服务器设置。因此,存在一个主机组"client_group",并且主机的数量是可变的。

如果有一个VM,nfs_exports列表将为:

nfs_clients: "{{ groups['client_group'] }}"
nfs_exports:
- "{{ nfs_dirs[0] }}  {{ nfs_clients[0] }}(rw)"
- "{{ nfs_dirs[1] }}  {{ nfs_clients[0] }}(ro)"

如果有两个虚拟机,

nfs_clients: "{{ groups['client_group'] }}"
nfs_exports:
- "{{ nfs_dirs[0] }}  {{ nfs_clients[0] }}(rw) {{ nfs_clients[1] }}(rw)"
- "{{ nfs_dirs[1] }}  {{ nfs_clients[0] }}(ro) {{ nfs_clients[1] }}(ro)"

如果有三个虚拟机,

nfs_clients: "{{ groups['client_group'] }}"
nfs_exports:
- "{{ nfs_dirs[0] }}  {{ nfs_clients[0] }}(rw) {{ nfs_clients[1] }}(rw) {{ nfs_clients[2] }}(rw)"
- "{{ nfs_dirs[1] }}  {{ nfs_clients[0] }}(ro) {{ nfs_clients[1] }}(ro) {{ nfs_clients[2] }}(ro)"

这对我们来说不好。因为每次虚拟机的数量发生变化时,我都需要手动更改"nfs_exports"。

我需要动态地构建列表'nfs_exports'中的字符串。因此,如果有一个VM,那么"nfs_exports"中将只有一个客户端。如果有多个虚拟机,则所有虚拟机都应自动包含在"nfs_exports"中。

有人能提供一个关于在"nfs_exports"中构建字符串的解决方案吗?而不是在"client_group"更改时手动更改"nfs_eexports"?

开始:

- hosts: localhost
gather_facts: no
vars:
nfs_clients:
- server1
- server2
- server3
nfs_dirs:
- path1
- path2
nfs_exports:
- "{{ nfs_dirs[0] }} {{ ' '.join(nfs_clients | map('regex_replace','$','(rw)')) }}"
- "{{ nfs_dirs[1] }} {{ ' '.join(nfs_clients | map('regex_replace','$','(ro)')) }}"
tasks:
- debug: var=nfs_exports

输出:

ok: [localhost] => {
"nfs_exports": [
"path1 server1(rw) server2(rw) server3(rw)",
"path2 server1(ro) server2(ro) server3(ro)"
]
}

相关内容

  • 没有找到相关文章

最新更新