如何有条件地检查openstack实例的状态

时间:2015-06-19 13:15:53

标签: ansible conditional cloud state openstack

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

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

if (window -> isMinimized())
{
  window -> showNormal();
}
else if (window -> isHidden())
{
  window -> show();
}

//the code that I added, which makes the window appear above.

window ->setWindowFlags(Qt::WindowStaysOnTopHint);
Qt::WindowFlags flags = window->windowFlags();
flags &= ~Qt::WindowStaysOnTopHint;
window->setWindowFlags(flags);

window->setGeometry(window->geometry());

window -> activateWindow();
window->show();
window -> raise();

1 个答案:

答案 0 :(得分: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}}"