Ansible tower_host模块批量从多清单删除主机方法
问题根因
你的playbook未生效有两个核心问题:
tower_host模块的inventory参数仅支持传入单个清单的名称或ID,不支持直接传入清单列表做批量处理,你传列表值时模块无法正确解析参数,自然不会执行删除动作。- 操作Tower/AWX配置的任务是通过调用平台开放API实现的,不需要连接到目标业务主机执行,你playbook里
hosts: [MYHOST]的写法是错误的,这类任务应当在能正常访问Tower API的控制节点(通常是localhost)上运行。
单任务批量删除实现方案
不需要编写3个独立任务,直接使用Ansible内置的loop关键字遍历目标清单列表即可,单任务就能完成所有清单下的主机移除操作,参考playbook如下:
--- - hosts: localhost gather_facts: false # 如果你使用的是新版AWX/AAP平台,需要提前声明对应的集合 collections: - awx.awx tasks: - name: 从指定清单中批量移除目标主机 tower_host: name: "{{ vm_hostname }}" inventory: "{{ item }}" state: absent # 在这里列出所有需要移除主机的清单即可 loop: - "RedHat" - "RedHat-Hors-Prod" - "RedHat-Prod"
如果后续需要调整要操作的清单范围,只需要修改loop下的列表值即可,不需要新增或修改任务逻辑。如果你需要实现「自动移除主机关联的所有清单,不用手动列清单名」的效果,可以先通过API查询该主机关联的所有清单ID,再传入循环做删除即可,针对你当前明确指定3个清单的场景,上面的写法完全满足需求。
内容的提问来源于stack exchange,提问作者Quentin Rey
相关产品推荐
相关产品推荐

