如何有条件地检查 openstack 实例的状态
How to conditionally check the state of an openstack instance
我正在尝试有条件地检查我的 playbook 中 openstack 云实例的状态。
剧本将云实例的名称作为参数,然后通过使用 nova compute 将状态设置为不存在来将其删除。我想要做的是检查状态是否已经不存在(比如输入了一个不存在的实例的名称)以跳过该语句。我该怎么写?
- nova_compute
name: "{{item}}"
state: absent
with_items: "{{instance_name}}"
when: ???
我不熟悉 openstack 任务,但看起来这应该不是很难做到。首先,如果您想做的只是终止所有实例,并且由于某些实例已经不存在而出现错误,那么只需忽略错误就足够了:
- nova_compute
name: "{{item}}"
state: absent
with_items: "{{instance_name}}"
ignore_errors: yes
如果您不想这样做,那么您需要将其分成多个任务,一个检查实例的状态,另一个终止它们。
Ansible 文档看起来最近针对 Ansible 2.0 进行了更新,所以我不确定模块名称是否已充分更改,但考虑到当前记录的内容,我建议使用 task to gather facts对于所讨论的实例。如果任务 returns 出现错误,那么实例不存在,这正是你真正想要的,所以像这样的东西应该可以工作:
- 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
的第一个任务 returns,您可能希望 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}}"
我正在尝试有条件地检查我的 playbook 中 openstack 云实例的状态。
剧本将云实例的名称作为参数,然后通过使用 nova compute 将状态设置为不存在来将其删除。我想要做的是检查状态是否已经不存在(比如输入了一个不存在的实例的名称)以跳过该语句。我该怎么写?
- nova_compute
name: "{{item}}"
state: absent
with_items: "{{instance_name}}"
when: ???
我不熟悉 openstack 任务,但看起来这应该不是很难做到。首先,如果您想做的只是终止所有实例,并且由于某些实例已经不存在而出现错误,那么只需忽略错误就足够了:
- nova_compute
name: "{{item}}"
state: absent
with_items: "{{instance_name}}"
ignore_errors: yes
如果您不想这样做,那么您需要将其分成多个任务,一个检查实例的状态,另一个终止它们。
Ansible 文档看起来最近针对 Ansible 2.0 进行了更新,所以我不确定模块名称是否已充分更改,但考虑到当前记录的内容,我建议使用 task to gather facts对于所讨论的实例。如果任务 returns 出现错误,那么实例不存在,这正是你真正想要的,所以像这样的东西应该可以工作:
- 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
的第一个任务 returns,您可能希望 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}}"