我试图在我的剧本中有条件地检查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();
答案 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}}"