Ansible:删除主机

时间:2016-05-31 23:56:37

标签: ansible ansible-playbook ansible-2.x

我知道可以添加具有以下任务的主机:

- name: Add new instance to host group
  add_host:
    hostname: '{{ item.public_ip }}'
    groupname: "tag_Name_api_production"
  with_items: ec2.instances

但我似乎无法找到从库存中删除主机的方法。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:4)

不幸的是,您似乎无法使用Ansible 2执行此操作。没有名为android.app.Fragment或其他模块的模块。

但是,使用Ansible 2可以在游戏中刷新您的广告资源:

remove_host

Have a look at this question

另一个想法可能是预先过滤主机。尝试将它们添加到组中,然后最近在游戏中排除此组,例如:

- meta: refresh_inventory

答案 1 :(得分:0)

我们通常在剧本中使用多个hosts:部分来做到这一点。

- hosts: auth:!ocp
  roles:
    - ntp-server

- hosts: all:!auth:!ocp
  roles:
    - ntp-client

这将通过!group机制将主机组从考虑中删除。具体来说,在第一个程序段中,我们将删除!ocp组,在第二个程序段中,我们将同时删除!auth!ocp组。

参考文献

答案 2 :(得分:0)

无法删除主机,但可以选择在新创建的组上运行。

- name: kubectl
  hosts: localhost
  gather_facts: false

  tasks:
  - add_host:
      name: nextcloud
      ansible_connection: kubectl
      ansible_kubectl_context: cluster
      ansible_kubectl_namespace: default
      ansible_kubectl_pod: nextcloud-75fc7f5c6f-hxrq6
      groupname: "pods"

# only run on pods
- hosts: pods
  gather_facts: false
  tasks:
  - raw: pwd
    register: raw_result
  - debug:
      msg: "{{raw_result.stdout_lines[0]}}"

答案 3 :(得分:0)

我刚刚遇到了同样的问题。我有针对给定剧本(我无法修改)运行 converge 的测试,然后我需要使用组中较小的一组主机运行相同的剧本。

我的解决方案是:

假设您想要缩小群组 target

  1. 将最少数量的主机放入 target 组。
  2. 将其他主机放入 target_addon 组。
- hosts: target_addon
  tasks:
    - add_host:
        name: '{{ inventory_hostname }}'
        groups: [target]

- import_playbook: converge.yaml  # uses group `target` with added hosts

# Removing hosts added from target_addon group from group target by reloading inventory
- hosts: localhost
  tasks:
    - meta: refresh_inventory

- import_playbook: converge.yaml  # uses group `target` without added hosts