如何延迟运行剧本?

时间:2017-01-09 10:20:14

标签: ansible ansible-playbook

我有一个在vCenter中创建虚拟机的手册。在创建期间,VM会安装iso映像并自动安装操作系统。安装后,VM获取其IP地址。我想继续运行playbook,但使用IP。

我读到wait_for,但我不明白如何使用它。或者可能有另一种方式吗?

下面的剧集:

- 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' ] }

1 个答案:

答案 0 :(得分:1)

您没有显示如何分配get_ip变量,因此我假设您可以参考它。这不是直截了当的,因为您必须使用hostvars['localhost']['get_ip]`来访问它,或者您应该创建一个动态库存。

然后您只需要使用非常基本的wait_for任务,但由于您想为计算机分配角色,您需要在pre_tasks部分中定义任务。

你的第二场比赛应该是:

- 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' ] }