【问题标题】:How to delay running playbook?如何延迟运行剧本?
【发布时间】:2017-01-09 10:20:14
【问题描述】:

我有一本在 vCenter 中创建虚拟机的剧本。在创建过程中,VM 会挂载 iso 映像并自动安装 OS。安装后,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' ] }

【问题讨论】:

  • @techraf,对不起,我的英语很糟糕。我想显示您要添加的位置
  • @Wtower,嗯...它在{等待安装并起床}之前工作。我试着写下去。我编辑了,希望可以理解
  • @techraf 我编辑,希望可以理解

标签: ansible ansible-playbook


【解决方案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' ] }

【讨论】:

  • 不知道怎么赋值。我知道如何通过帮助 vmware_guest_facts 获取信息:是的。但是谢谢你的想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多