2017-01-09 63 views
0

我有一個在vCenter中創建虛擬機的手冊。在創建期間,VM會掛載ISO映像並自動安裝操作系統。安裝VM後獲取其IP地址。我想繼續運行劇本,但使用IP。如何延遲正在運行的playbook?

我讀了關於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' ] } 
+0

@techraf,SRY,我的英語很糟糕。我想顯示你想添加的位置 – Nikita

+0

@Wtower,hm ......它在{等待安裝並啓動}之前工作。我試着繼續寫下去。我編輯,希望可以理解 – Nikita

+0

@techraf我編輯,希望可以理解 – Nikita

回答

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

我不知道如何分配。我知道如何獲得幫助vmware_guest_facts的信息:是的。但感謝您的想法 – Nikita