Ansible:删除主机
Ansible: removing hosts
我知道可以通过以下任务添加主机:
- name: Add new instance to host group
add_host:
hostname: '{{ item.public_ip }}'
groupname: "tag_Name_api_production"
with_items: ec2.instances
但我似乎找不到从清单中删除主机的方法。有什么办法吗?
不幸的是,您似乎无法使用 Ansible 2 执行此操作。没有名为 remove_host
或其他模块的模块。
但是,使用 Ansible 2,您可以在游戏中刷新库存:
- meta: refresh_inventory
另一个想法可能是预先过滤主机。尝试将它们添加到组中,然后在最近的游戏中排除该组,例如:
- hosts: '!databases'
我们通常在使用多个 hosts:
部分的剧本中这样做。
- hosts: auth:!ocp
roles:
- ntp-server
- hosts: all:!auth:!ocp
roles:
- ntp-client
这将通过 !group
机制从考虑中删除主机组。特别是在第一个块中,我们删除了 !ocp
组,在第二个块中,我们同时删除了 !auth
和 !ocp
组。
参考资料
无法删除主机,但可以选择在新创建的组上运行。
- 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]}}"
我刚遇到同样的问题。我对给定的剧本进行了 运行 converge
的测试(我无法修改),然后我需要 运行 相同的剧本,组中的主机数量较少。
我的解决方案是:
假设您有 target
组您想要缩小。
- 将最少数量的主机放入
target
组。
- 将其他主机放入
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
您可以停止播放这些主机:
- name: Remove unwanted hosts from play_hosts
meta: end_host
when: unwanted
当然,这假设 unwanted
变量存在于所有主机上并且设置正确。
我知道可以通过以下任务添加主机:
- name: Add new instance to host group
add_host:
hostname: '{{ item.public_ip }}'
groupname: "tag_Name_api_production"
with_items: ec2.instances
但我似乎找不到从清单中删除主机的方法。有什么办法吗?
不幸的是,您似乎无法使用 Ansible 2 执行此操作。没有名为 remove_host
或其他模块的模块。
但是,使用 Ansible 2,您可以在游戏中刷新库存:
- meta: refresh_inventory
另一个想法可能是预先过滤主机。尝试将它们添加到组中,然后在最近的游戏中排除该组,例如:
- hosts: '!databases'
我们通常在使用多个 hosts:
部分的剧本中这样做。
- hosts: auth:!ocp
roles:
- ntp-server
- hosts: all:!auth:!ocp
roles:
- ntp-client
这将通过 !group
机制从考虑中删除主机组。特别是在第一个块中,我们删除了 !ocp
组,在第二个块中,我们同时删除了 !auth
和 !ocp
组。
参考资料
无法删除主机,但可以选择在新创建的组上运行。
- 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]}}"
我刚遇到同样的问题。我对给定的剧本进行了 运行 converge
的测试(我无法修改),然后我需要 运行 相同的剧本,组中的主机数量较少。
我的解决方案是:
假设您有 target
组您想要缩小。
- 将最少数量的主机放入
target
组。 - 将其他主机放入
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
您可以停止播放这些主机:
- name: Remove unwanted hosts from play_hosts
meta: end_host
when: unwanted
当然,这假设 unwanted
变量存在于所有主机上并且设置正确。