我有一个在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' ] }
答案 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' ] }