【问题标题】:Is it possible remove host from Ansible group?是否可以从 Ansible 组中删除主机?
【发布时间】:2020-09-15 09:19:45
【问题描述】:

我有一组 20 个跳转服务器 jump_nodes,它们连接到一组 100 个目标目标服务器 dest_nodes

注意:我们不确定 20 台跳转服务器中的哪台连接到 100 台目标主机中的哪台。

我们有一组任务performtask.yml 需要在所有dest_nodes 主机上执行。

下面是相同的剧本。

---

- name: "Play 1"
  hosts: localhost
  tasks:
    - add_host:
        hostname: "{{ item }}"
        groups: jump_nodes
      with_items: "{{ jump_server_list.split('\n') }}"

    - add_host:
        hostname: "{{ item }}"
        groups: dest_nodes
      with_items: "{{ target_server_list.split('\n') }}"

- name: "Play 3"
  hosts: jump_nodes
  tasks:
    - name: Perform tasks on dest_nodes
      include_tasks: performtask.yml
      with_items: "{{ groups['dest_nodes'] }}"

上述方法的问题是它需要很多时间,即20 X 100 X <number of tasks> = 2000 X <number of tasks>

我的要求是,如果jump_nodes 主机中的任何人能够成功连接并在特定dest_nodes IP 上执行任务,请说10.0.0.99;那么这个主机10.0.0.99 应该从dest_nodes 组中删除,其他跳转服务器应该直接跳过dest_nodes IP。

这样我们将能够大大减少总执行时间和任务数量。

类似remove_hosts 的功能相当于add_hosts 可以解决问题,但我知道没有这样的功能。

更新:使用@Kevin C 提出的解决方案,我无法区分主机之间的差异,而是出现语法错误。以下都不起作用。

groups['dest_nodes' | difference(success_nodes | default([]) )] 
groups['dest_nodes' | difference('success_nodes' | default([]))]
groups[dest_nodes | difference(success_nodes | default([]) )]

你能推荐一下吗?

【问题讨论】:

    标签: loops ansible hosts ansible-inventory execution-time


    【解决方案1】:

    预期的内容以及您当前的执行情况仍然有点模糊。

    但是,您可以创建能够从 jumphost 连接到 dest_nodes 的服务器列表。此任务需要时间,但您可以使用 run_once: true 将执行此任务的主机限制为一台主机。

    另外,您可以use the difference filter 从列表中排除项目(dest_nodes)。然后使用when 子句执行任务performtask.yml

    确保第一次使用:

    - set_fact:
        list_1: "{{ groups['dest_nodes'] }}"
    
    - set_fact:
        list_2: "{{ groups['success_nodes'] }}"
    

    首先..

    正如我们在聊天中所说的,它终于奏效了!

    【讨论】:

    • 我可能还没有完全理解,但是,你的意思是在performtask.yml 中建立一个新的第三个列表success_nodes 的成功任务执行IP,然后提到类似with_items: "{{ groups['dest_nodes'] | difference(success_nodes) }}" 的内容?
    • 差不多。你应该使用when: groups['dest_nodes' | difference(success_nodes)]
    • 我尝试了以下调试但我得到语法错误而不是区别。 ` 组 ['dest_nodes' |差异(成功节点|默认([]))]组['dest_nodes'|差异('success_nodes' | 默认([]))] 组[dest_nodes |差异(成功节点|默认([]))]`
    • 您的评论输出对我来说是不可理解且不可读的。你可以使用pastebin。请花点时间写出简洁的回复。
    • @Kevin C 我更新了我在原帖中的回复以提高可读性。
    猜你喜欢
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2018-04-27
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多