我有一个在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' ] }发布于 2017-01-09 19:37:32
您没有展示如何赋值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' ] }https://stackoverflow.com/questions/41545703
复制相似问题