Ansible vmware_guest_powerstate忽略state_change_timeout

时间:2018-09-12 13:57:42

标签: python ansible

也许我应该在github项目页面上问这个,但是我不确定这是一个错误还是只是我无法使用该功能。

  tasks:
  - name: poweroff vms
    vmware_guest_powerstate:
    hostname: "{{ vcenter_ip }}"
    port: "{{ vcenter_port }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: "{{ vcenter_validate_certs }}"
    name: "{{ item.vm_name }}"
    state: shutdown-guest
    state_change_timeout: 300
  delegate_to: localhost
  loop: "{{ var_servidores}}"

使用此代码,我可以关闭属于列表“ var_servidores”的vm,但是无论“ state_change_timeout”如何,播放都会立即结束。

我试图查看该模块的代码,但是我找不到如何使用此“ state_change_timeout”的方法...(我不是开发人员),因为它看起来似乎很稳定,但从未真正使用过。 (https://fossies.org/linux/ansible/lib/ansible/modules/cloud/vmware/vmware_guest_powerstate.py

如果我没有正确使用模块,还是应该在https://github.com/ansible/ansible中打开问题,请提出建议。

谢谢!!! :)

1 个答案:

答案 0 :(得分:1)

好吧,我只是无法使该模块按预期工作。因此,如果有人遇到相同的问题,我将在此处保留此解决方法。

解决方法是循环收集vm事实并在hw_power_state关闭的情况下运行它。

    - name: apaga las vms
      vmware_guest_powerstate:
        hostname: "{{ vcenter_ip }}"
        port: "{{ vcenter_puerto }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        validate_certs: "{{ vcenter_valida_certs }}"
        name: "{{ item.vm_nombre }}"
        state: shutdown-guest
        state_change_timeout: 300
      delegate_to: localhost
      loop: "{{ servidores }}"
      ignore_errors: true

    - name: espera hasta que las vms se apaguen
      vmware_guest_facts: 
        datacenter: "{{ vcenter_datacenter }}"
        hostname: "{{ vcenter_ip }}"
        port: "{{ vcenter_puerto }}"
        username: "{{ vcenter_username }}"
        password: "{{ vcenter_password }}"
        validate_certs: "{{ vcenter_valida_certs }}"
        name: "{{ item.vm_nombre }}"
      loop: "{{ servidores }}"
      register: energia
      until: energia.instance.hw_power_status == "poweredOff"
      retries: 30
      delay: 10