我有一个包含大量系统列表的组,需要从该组中获取前 3 个系统。有没有办法进行这样的组:
[webservers]
web01
web02
web03
web04
web05
并生成类似于以下内容的引用列表?:
- name: Pick the initial masters
lineinfile:
dest: "/bits/etc/web.conf"
state: present
regexp: 'node.masters'
line: 'node.masters: [ "web01", "web02", "web03" ]'
我将来可能需要更改大师的数量,因此我希望尽可能使用切片。感谢您的任何见解。
最佳答案
您可以使用python array slice syntax并将其通过管道传输到 json 过滤器。这将避免 Jinja2 中的循环并产生漂亮的带引号的输出。
- name: Pick the initial masters
lineinfile:
dest: /bits/etc/web.conf
state: present
regexp: 'node.masters'
line: 'node.masters: {{groups['webservers'][:3] | to_json}}'
要小心组的切片,因为如果库存是动态生成的,则顺序不一定一致,如 Ansible FAQ 中所述。 。为了避免这种情况,我建议在 list 中创建第二组“masters”,指定要使用的节点而不是依赖顺序。这还有其他好处,例如能够定位主控或非主控,而不必了解和更改每个剧本中主控的数量。
[webservers]
web[01:05]
[masters]
web[01:03]
关于ansible - 使用 ansible 构建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45800840/