首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何延迟运行playbook?

如何延迟运行playbook?
EN

Stack Overflow用户
提问于 2017-01-09 18:20:14
回答 1查看 8K关注 0票数 0

我有一个在vCenter中创建虚拟机的剧本。在创建过程中,VM会自动挂载iso映像并安装操作系统。安装后,VM获得其IP地址。我想继续运行playbook,但使用IP。

我读过关于wait_for的文章,但我不明白如何使用它。或者,也许还有其他方法可以做到呢?

攻略如下:

代码语言:javascript
复制
- hosts: localhost
  gather_facts: false
  connection: local
  user: ansible
  become: true
  vars_files:
    - ../roles/vm-create/vars/default.yml
  vars_prompt:
    - name: "name_VM"
      prompt: "VM name:"
      private: no
      default: "vm001"

    - name: "vcenter_user"
      prompt: "vCenter user"
      private: no
      default: "root"

    - name: "vcenter_pass"
      prompt: "Enter password vCenter"
      private: yes

  roles:
    - vm-create

# waiting for the installation and gets ip (Do-Until Loops or wait_for)

- name: setting VM
  become: true
  hosts: '{{ get_ip }}'
  roles:
    - { role: ldap-client, tags: [ 'ldap' ] }
EN

回答 1

Stack Overflow用户

发布于 2017-01-09 19:37:32

您没有展示如何赋值get_ip变量,所以我假设您可以引用它。这并不简单,因为您必须使用hostvars['localhost']['get_ip]`访问它,或者您应该创建一个动态库存。

然后,您只需要使用一个非常基本的wait_for任务,但是因为您希望为机器分配一个角色,所以您需要在pre_tasks部分中定义该任务。

你的第二个行动应该是:

代码语言:javascript
复制
- name: setting VM
  become: true
  hosts: '{{ get_ip }}'
  pre_tasks:
    - name: Ensure machine at {{ get_ip }} SSH port is listening
      wait_for:
        host: "{{ get_ip }}"
        port: 22                # SSH port
        delay: 60               # wait 1 minute before trying
  roles:
    - { role: ldap-client, tags: [ 'ldap' ] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41545703

复制
相关文章

相似问题

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