Ansible 如何延迟运行剧本?

Ansible 如何延迟运行剧本?,ansible,ansible-playbook,Ansible,Ansible Playbook,我有一个在vCenter中创建虚拟机的剧本。在创建过程中,VM会自动装载iso映像并安装操作系统。安装后,虚拟机获取其IP地址。我想继续运行playbook,但使用IP 我读到了《等待》,但我不知道如何使用它。或者也许还有别的办法 剧本如下: - hosts: localhost gather_facts: false connection: local user: ansible become: true vars_files: - ../roles/vm-crea

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

我读到了《等待》,但我不知道如何使用它。或者也许还有别的办法

剧本如下:

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

您没有显示如何分配
get\u 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' ] }

@我的英语很差。我想告诉你你想去哪里add@Wtower嗯…它在{等待安装并起床}之前工作。我试着继续写下去。我编辑,希望如此understandable@techraf我编辑,希望可以理解,我不知道如何分配。我知道如何通过帮助获取信息。但谢谢你的主意