我不熟悉 openstack 任务,但看起来这应该不难做到。首先,如果您只想终止所有实例并且您收到错误,因为有些实例已经不存在,那么简单地忽略错误可能就足够了:
- nova_compute
name: "{{item}}"
state: absent
with_items: "{{instance_name}}"
ignore_errors: yes
如果您不想这样做,则需要将其拆分为多个任务,一个用于检查实例的状态,另一个用于终止它们。
Ansible 文档看起来最近已针对 Ansible 2.0 进行了更新,因此我不确定模块名称是否已充分更改,但鉴于当前记录的内容,我建议使用 task to gather facts 作为实例问题。如果任务返回错误,则实例不存在,这正是您真正想要的,所以这样的事情应该可以工作:
- os_server_facts
name: "{{instance_name}}"
register: instance_state
ignore_errors: yes
然后你可以这样做:
- nova_compute
name: "{{instance_name}}"
state: absent
when: instance_state is not defined
根据instance_state 的第一个任务返回的内容,您可能希望when 子句更加结构化。我建议运行一些测试并通过debug module 输出instance_state,看看您是否需要执行我在此处提供的内容之外的任何操作。
如果您需要使用实例列表执行此操作,您应该能够稍微扩展任务以执行此操作。这些方面的东西(显然我没有实际测试过这些,所以它们可能不是 100% 正确):
- os_server_facts
name: "{{item}}"
register: instance_state
ignore_errors: yes
with_items: "{{instance_list}}"
- nova_compute
name: "{{item}}"
state: absent
when: instance_state[item] is not defined
with_items: "{{instance_list}}"