【问题标题】:Build strings dynamically in Ansible inventory在 Ansible 清单中动态构建字符串
【发布时间】:2017-05-31 02:36:37
【问题描述】:

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

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

我的情况是这样的:我们将创建一个虚拟机列表,这些虚拟机是 NFS 客户端。我们需要对 NFS 服务器进行访问控制。所以,我们根据上面的角色在 Ansible 清单中设置了一个名为 'nfs_exports' 的列表。

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

如果有一台虚拟机,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”中将只有一个客户端。如果有多个 VM,则所有 VM 都应自动包含在“nfs_exports”中。

谁能提供关于在“nfs_exports”中构建字符串的解决方案,而不是在“client_group”更改时手动更改“nfs_exports”?

【问题讨论】:

    标签: ansible ansible-playbook nfs nfsclient


    【解决方案1】:

    给你:

    - 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)"
        ]
    }
    

    【讨论】:

    • 我已经验证了你的代码,它工作正常。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2020-05-24
    相关资源
    最近更新 更多