首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待with_lines中每个项的处理程序

等待with_lines中每个项的处理程序
EN

Stack Overflow用户
提问于 2019-05-02 16:00:46
回答 1查看 1.1K关注 0票数 1

不可接受版本:ansible 2.4.2.0

我想按顺序启动VM取决于角色(主/备份)。多个VM in存储在2个文件masterbackup中。控制器流应该如下所示

  1. 从文件逐个迭代VM ID
    • 对于每次迭代,处理程序都应该通知。也就是说,迭代应该等待处理程序完成。
    • 如果处理程序失败(或处于等待状态),迭代不应移动序言。

作为参考,你可以看到下面的剧本

代码语言:javascript
复制
- name: Performs Power Actions VMs
  hosts: localhost
  vars:
    - status: "{% if action=='stop' %}SHUTOFF{% else %}ACTIVE{% endif %}"   # For Checking VM status

  tasks:
  - name: Staring Master VM
    shell: |
      echo {{ item }} > /tmp/current
      echo "RUN nova start {{ item }} HERE!!!"
    when: action == "start"
    with_lines: cat ./master
    notify: "Poll VM power status"

  - name: Starting Backup VM
    shell: |
      echo {{ item }} > /tmp/current
      echo "RUN nova start {{ item }} HERE!!!"
    when: action == "start"
    with_lines: cat ./backup
    notify: "Poll VM power status"
 
  handlers:
  - name: Poll VM power status
    shell: openstack server show -c status --format value `cat /tmp/current`
    register: cmd_out
    until: cmd_out.stdout == status
    retries: 5
    delay: 10

对于上面的剧本,我看到的是在整个迭代完成后通知处理程序。

代码语言:javascript
复制
PLAY [Performs Power Actions on ESC VMs] **********************************************************************************************

TASK [Stopping Backup VM] *********************************************************************************************************
skipping: [localhost] => (item=Test) 

TASK [Stopping Master VM] *********************************************************************************************************
skipping: [localhost] => (item=Test) 

TASK [Staring Master VM] **********************************************************************************************************
changed: [localhost] => (item=Test)

TASK [Starting Backup VM] *********************************************************************************************************
changed: [localhost] => (item=Test)

TASK [Removing tmp files] *************************************************************************************************************
changed: [localhost] => (item=./master)
changed: [localhost] => (item=./backup)

RUNNING HANDLER [Poll VM power status] ********************************************************************************************
FAILED - RETRYING: Poll ESC VM power status (5 retries left).
^C [ERROR]: User interrupted execution

有没有更好的方法来解决这个问题?或者有什么建议如何在这个剧本中加入block来解决呢?

PS:任务中的虚拟命令RUN nova start {{ item }} HERE!!!不等待。这就是为什么我必须手动检查状态。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-02 16:56:05

默认情况下,处理程序在游戏结束时运行。

但是,通过使用元数据模块,可以强制已经通知的处理程序在播放中的给定时间运行。

代码语言:javascript
复制
- name: force running of all notified handlers now
  meta: flush_handlers

在您的示例中,只需在两个vm启动任务之间添加它即可。

编辑:这实际上可以在两个任务之间工作,但不适用于单个任务中的每个迭代,因此它没有真正满足您的全部需求。

另一种方法(有待开发)是将check命令直接包含在任务中,在满足条件之前不应该返回。

你考虑过探索openstack相关模块星系吗?他们可能也能解决你目前的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55956247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档