0

I am attempting to migrate VMs from one vcenter to another in the environment using ansible.

Both of the vcenters are running vSphere Client version 7.0.3.01100. ansible-helper is a RHEL 8 system with Python 3 and the required pyvmomi and vsphere-automation-sdk-python packages.

Note: The vmware snapshot and power off work. It just fails at the vmotion stage

The user that is being used to attempt the vmotion is the same (AD Controlled) and has the same privileges.

Here is the playbook used to attempt the move:

---
- name: Migrate Systems to Subterra (Fail-over to DR Site)
  hosts: subterra
  gather_facts: no


  vars_files:
      - environments/vars/vault.yml
      
  vars:
    vcenter_hostname: "vcenter1.company.com"
    vcenter_username: "DOMAIN\\ansible_user"
    dst_vcenter: "vcenter2.company.com"
    datacenter_name: "DC1"
    datastore: "SAN_Location1"

  tasks:

  - name: Gather one specific VM
    community.vmware.vmware_vm_info:
      hostname:  "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      vm_name: "{{ inventory_hostname }}"
      validate_certs: false
    delegate_to: ansible-helper
    register: vminfo

  - name: List the VM's Information
    ansible.builtin.debug:
      var: vminfo

  - name: print keys of cluster data
    ansible.builtin.debug:
      msg: "{{ vminfo.virtual_machines | list }}"

  - name: List the VM's Folder Information
    ansible.builtin.debug:
      var: vminfo.virtual_machines[0].folder

  - name: Testing printing the json_query
    ansible.builtin.debug:
      msg: "{{ vminfo | json_query('virtual_machines[0].folder')  }}"
  
  - name: Listing Datastore name
    ansible.builtin.debug:
      msg: "{{ vminfo | json_query('virtual_machines[0].datastore_url.name') }}"

  - name: Define VM Folder
    ansible.builtin.set_fact:
      vm_folder_loc: "{{ vminfo | json_query('virtual_machines[0].folder') }}"

  - name: Define Data Store from vm output
    ansible.builtin.set_fact:
      dest_data_store: "{{ vminfo | json_query('virtual_machines[0].datastore_url.name') }}"

  - name: List the VM's Folder Information
    ansible.builtin.debug:
      var: vm_folder_loc

  - name: Create a snapshot prior to migration
    community.vmware.vmware_guest_snapshot:
      hostname: "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      datacenter: "{{ datacenter_name }}"
      folder: "{{ vm_folder_loc }}"
      name: "{{ inventory_hostname }}"
      state: present
      memory_dump: false
      validate_certs: false
      snapshot_name: Snapshot_Prior_to_Migration
      description: "Snapshot of system prior to migration to vcenter2"
    delegate_to: ansible-helper

  - name: PowerOff VM
    community.vmware.vmware_guest:
      hostname: "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      name: "{{ inventory_hostname }}"
      validate_certs: false
      state: poweredoff
    delegate_to: ansible-helper

  - name: Perform vMotion of virtual machine to Subterra
    community.vmware.vmware_vmotion:
      hostname: "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      vm_name: "{{ inventory_hostname }}"
      destination_datastore: "{{ dest_data_store }}"
      destination_datacenter: "{{ dst_vcenter }}"
      destination_resourcepool: "Linux"
      validate_certs: false 
    delegate_to: ansible-helper


  - name: PowerOn VM
    community.vmware.vmware_guest:
      hostname: "{{ dst_vcenter }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      name: "{{ inventory_hostname }}"
      validate_certs: false
      state: poweredon
    delegate_to: ansible-helper

The playbook works until it gets to the community.vmware.vmware_vmotion module. Then I get the following error:

{
    "exception": "Traceback (most recent call last):\r\n  File \"/home/devops/.ansible/tmp/ansible-tmp-1676650446.81-32325-16791288075867/AnsiballZ_vmware_vmotion.py\", line 102, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/devops/.ansible/tmp/ansible-tmp-1676650446.81-32325-16791288075867/AnsiballZ_vmware_vmotion.py\", line 94, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/devops/.ansible/tmp/ansible-tmp-1676650446.81-32325-16791288075867/AnsiballZ_vmware_vmotion.py\", line 40, in invoke_module\r\n    runpy.run_module(mod_name='ansible_collections.community.vmware.plugins.modules.vmware_vmotion', init_globals=None, run_name='__main__', alter_sys=True)\r\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\r\n    mod_name, mod_spec, pkg_name, script_name)\r\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_vmotion.py\", line 549, in <module>\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_vmotion.py\", line 545, in main\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_vmotion.py\", line 243, in __init__\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/module_utils/vmware.py\", line 249, in find_datastore_by_name\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/module_utils/vmware.py\", line 209, in find_object_by_name\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/module_utils/vmware.py\", line 796, in get_all_objs\r\n  File \"/usr/local/lib/python3.6/site-packages/pyVmomi/VmomiSupport.py\", line 706, in <lambda>\r\n    self.f(*(self.args + (obj,) + args), **kwargs)\r\n  File \"/usr/local/lib/python3.6/site-packages/pyVmomi/VmomiSupport.py\", line 511, in _InvokeMethod\r\n    list(map(CheckField, info.params, args))\r\n  File \"/usr/local/lib/python3.6/site-packages/pyVmomi/VmomiSupport.py\", line 1098, in CheckField\r\n    % (info.name, info.type.__name__, valType.__name__))\r\nTypeError: For \"container\" expected type vim.ManagedEntity, but got str\r\n",
    "_ansible_no_log": false,
    "_ansible_delegated_vars": {
        "ansible_port": null,
        "ansible_host": "192.168.28.12",
        "ansible_user": "devops"
    },
    "module_stderr": "OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017\r\ndebug1: Reading configuration data /var/lib/awx/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 58: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 32265\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\nShared connection to 192.168.28.12 closed.\r\n",
    "changed": false,
    "module_stdout": "Traceback (most recent call last):\r\n  File \"/home/devops/.ansible/tmp/ansible-tmp-1676650446.81-32325-16791288075867/AnsiballZ_vmware_vmotion.py\", line 102, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/devops/.ansible/tmp/ansible-tmp-1676650446.81-32325-16791288075867/AnsiballZ_vmware_vmotion.py\", line 94, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/devops/.ansible/tmp/ansible-tmp-1676650446.81-32325-16791288075867/AnsiballZ_vmware_vmotion.py\", line 40, in invoke_module\r\n    runpy.run_module(mod_name='ansible_collections.community.vmware.plugins.modules.vmware_vmotion', init_globals=None, run_name='__main__', alter_sys=True)\r\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\r\n    mod_name, mod_spec, pkg_name, script_name)\r\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_vmotion.py\", line 549, in <module>\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_vmotion.py\", line 545, in main\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/modules/vmware_vmotion.py\", line 243, in __init__\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/module_utils/vmware.py\", line 249, in find_datastore_by_name\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/module_utils/vmware.py\", line 209, in find_object_by_name\r\n  File \"/tmp/ansible_community.vmware.vmware_vmotion_payload_eyr21noz/ansible_community.vmware.vmware_vmotion_payload.zip/ansible_collections/community/vmware/plugins/module_utils/vmware.py\", line 796, in get_all_objs\r\n  File \"/usr/local/lib/python3.6/site-packages/pyVmomi/VmomiSupport.py\", line 706, in <lambda>\r\n    self.f(*(self.args + (obj,) + args), **kwargs)\r\n  File \"/usr/local/lib/python3.6/site-packages/pyVmomi/VmomiSupport.py\", line 511, in _InvokeMethod\r\n    list(map(CheckField, info.params, args))\r\n  File \"/usr/local/lib/python3.6/site-packages/pyVmomi/VmomiSupport.py\", line 1098, in CheckField\r\n    % (info.name, info.type.__name__, valType.__name__))\r\nTypeError: For \"container\" expected type vim.ManagedEntity, but got str\r\n",
    "rc": 1,
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error"
}

Here is my ansible.cfg:

[defaults]
inventory = ./environments/test/hosts
ANSIBLE_SSH_ARGS = -C -o ControlMaster=auto -o ControlPersist=30m
ANSIBLE_PIPELINING = True
retry_files_enabled = False
host_key_checking = False
allow_world_readable_tmpfiles = True
remote_user = devops
private_key_file = ../keys/private_key_rsa
role_path = ./roles/
bfowler
  • 49
  • 1
  • 9
  • Do you run it on vCenter or on an ESXi host? Usually, everything works better when run from vCenter. – tkrishtop Feb 17 '23 at 17:59
  • There is no variable in `destination_datacenter: "vcenter2"`, should be `"{{ dst_vcenter }}"` ... – Oliver Gaida Feb 17 '23 at 19:13
  • 1
    I found many closed issues depending to vmotion https://github.com/ansible/ansible/issues?q=is%3Aissue+vmotion+is%3Aclosed , do you use the newest ansible version? – Oliver Gaida Feb 17 '23 at 19:17
  • To add up to @OliverGaida comment above, you should make sure your are using the latest ansible-core version AND the latest version of the `community.vmware` collection. – Zeitounator Feb 18 '23 at 09:13
  • Yes we are running it on vCenter - the variable issue was a manual change to define that it was the second (Target vCenter to move to) - we are not using the current version - Using Ansible 2.9.27 and have updated to the current version of the community module – bfowler Feb 21 '23 at 20:11

0 Answers0