ansible - 使用 ansible 构建列表

标签 ansible

我有一个包含大量系统列表的组,需要从该组中获取前 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/

相关文章:

regex - 如何评估 Ansible 任务的 when 条件

shell - ansible shell转义单引号和双引号

ansible - 如何在 Ansible blockinfile 中的 block 开头添加空格?

ansible - suding时丢失成为密码

ansible - 如何在when条件中使用变量替换?

init - 如何在 Ansible 中处理对 init 脚本的更改?

bash - Ansible 在 Linux 中安装 Sublime Text 编辑器

ansible - 使用 Ansible 在 Linux 操作系统上挂载来自 nfs 的不同共享

ansible - 如果至少有一个主机有变量,则对所有主机运行 Ansible 任务

ansible - 如何在ansible中创建一次性用户提示输入?