【问题标题】:How to conditionally check the state of an openstack instance如何有条件地检查 openstack 实例的状态
【发布时间】:2015-06-19 13:15:52
【问题描述】:

我正在尝试有条件地检查我的剧本中 openstack 云实例的状态。

playbook 将云实例的名称作为参数,然后通过使用 nova 计算将状态设置为不存在来删除它。我想要做的是检查状态是否已经不存在(比如输入了不存在的实例的名称)以跳过该语句。我该怎么写呢?

- nova_compute
     name: "{{item}}"
     state: absent
  with_items: "{{instance_name}}"
  when: ???

【问题讨论】:

    标签: ansible conditional cloud state openstack


    【解决方案1】:

    我不熟悉 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}}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多