Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KeyError exception in build_full_device_list #387

Open
CarstenGrohmann opened this issue Jan 24, 2023 · 1 comment
Open

KeyError exception in build_full_device_list #387

CarstenGrohmann opened this issue Jan 24, 2023 · 1 comment

Comments

@CarstenGrohmann
Copy link

CarstenGrohmann commented Jan 24, 2023

SUMMARY

I get a Python KeyError exception. Please catch this error and provide a useful error message.

TASK [Add second disk (REST)] ******************************************************************************************************************************************************************************************
fatal: [grohmann-src-168]: FAILED! => changed=false 
  msg:
  - |2-
      File "/usr/lib64/python3.10/runpy.py", line 196, in _run_module_as_main
        return _run_code(code, main_globals, None,
  - |2-
      File "/usr/lib64/python3.10/runpy.py", line 86, in _run_code
        exec(code, run_globals)
  - |2-
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py", line 395, in <module>
  - |2-
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py", line 372, in start
  - |2-
      File "/usr/lib64/python3.10/asyncio/base_events.py", line 603, in run_forever
        self._run_once()
  - |2-
      File "/usr/lib64/python3.10/asyncio/base_events.py", line 1899, in _run_once
        handle._run()
  - |2-
      File "/usr/lib64/python3.10/asyncio/events.py", line 80, in _run
        self._context.run(self._callback, *self._args)
  - |2-
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py", line 342, in handle
  - |2-
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py", line 297, in run_as_module
  - |-
    Traceback (most recent call last):
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py", line 201, in run
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py", line 333, in main
        result = await entry_point(module, session)
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py", line 358, in entry_point
        return await func(module.params, session)
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/vmware/vmware_rest/plugins/modules/vcenter_vm_hardware_disk.py", line 386, in _create
        _json = await exists(
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py", line 369, in exists
        full_devices = await build_full_device_list(session, per_id_url, devices)
      File "/tmp/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload_qx_9n8yt/ansible_vmware.vmware_rest.vcenter_vm_hardware_disk_payload.zip/ansible_collections/vmware/vmware_rest/plugins/module_utils/vmware_rest.py", line 294, in build_full_device_list
        value = device_list["value"]
    KeyError: 'value'

I extended to code locally to print the content of the device_list structure.

284 async def build_full_device_list(session, url, device_list):
285     import asyncio
286 
287     device_ids = []
288 
289     if isinstance(device_list, list):
290         value = device_list
291     else:  # 7.0.2 <
292         s=open('/tmp/error.txt', mode='w')
293         import pprint; pprint.pprint(device_list, stream=s)
294         value = device_list["value"]
295     for i in value:
296         # Content library returns string {"value": "library_id"}
297         if isinstance(i, str):
298             device_ids.append(i)
299             continue
300         fields = list(i.values())
301         if len(fields) != 1:
302             # The list already comes with all the details
303             return device_list
304         device_ids.append(fields[0])
305 
306     tasks = [
307         asyncio.ensure_future(get_device_info(session, url, _id)) for _id in device_ids
308     ]
309 
310     return [await i for i in tasks]
#  cat /tmp/error.txt 
{'error_type': 'NOT_FOUND',
 'messages': [{'args': [],
               'default_message': 'The object '
                                  "'vim.ManagedEntity:myvm1' has "
                                  'already been deleted or has not been '
                                  'completely created',
               'id': 'vmsg.ManagedObjectNotFound.summary'}]}
ISSUE TYPE
  • Bug Report
COMPONENT NAME

vmware_rest.vcenter_vm_hardware_disk

ANSIBLE VERSION
 ansible --version
ansible [core 2.13.7]
  config file = /home/i10122719/Projects/ansible-sles-upgrade/ansible.cfg
  configured module search path = ['/home/i10122719/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/i10122719/virtualenv/lib64/python3.10/site-packages/ansible
  ansible collection location = /home/i10122719/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/i10122719/virtualenv/bin/ansible
  python version = 3.10.8 (main, Oct 28 2022, 17:28:32) [GCC]
  jinja version = 3.1.2
  libyaml = True
COLLECTION VERSION
# ansible-galaxy collection list | grep vmware
community.vmware              2.10.1 
vmware.vmware_rest            2.2.0  
community.vmware              2.10.1 
vmware.vmware_rest            2.2.0  
community.vmware  3.2.0  
CONFIGURATION
CACHE_PLUGIN(/home/carsten/Projects/upgrade/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/home/carsten/Projects/upgrade/ansible.cfg) = ./facts
CACHE_PLUGIN_TIMEOUT(/home/carsten/Projects/upgrade/ansible.cfg) = 28800
DEFAULT_GATHERING(/home/carsten/Projects/upgrade/ansible.cfg) = smart
DEFAULT_HOST_LIST(/home/carsten/Projects/upgrade/ansible.cfg) = ['/home/carsten/Projects/upgrade/hosts']
DEFAULT_ROLES_PATH(/home/carsten/Projects/upgrade/ansible.cfg) = ['/home/carsten/Projects/upgrade/roles']
DEFAULT_STDOUT_CALLBACK(/home/carsten/Projects/upgrade/ansible.cfg) = yaml
HOST_KEY_CHECKING(/home/carsten/Projects/upgrade/ansible.cfg) = False
INTERPRETER_PYTHON(/home/carsten/Projects/upgrade/ansible.cfg) = auto_silent
OS / ENVIRONMENT
  • OS

    # cat /etc/os-release 
    NAME="SLES"
    VERSION="15-SP4"
    VERSION_ID="15.4"
    PRETTY_NAME="SUSE Linux Enterprise Server 15 SP4"
    ID="sles"
    ID_LIKE="suse"
    ANSI_COLOR="0;32"
    CPE_NAME="cpe:/o:suse:sles:15:sp4"
    DOCUMENTATION_URL="https://documentation.suse.com/"
    
  • vSphere: vSphere Client version 7.0.3.01100

  • Hypervisor: VMware ESXi, 6.7.0, 17700523

STEPS TO REPRODUCE
    - name: Add second disk (REST)
      block:
        - name: Add second disk (REST)
          vmware.vmware_rest.vcenter_vm_hardware_disk:
            vcenter_hostname: '{{ vcenter_hostname }}'
            vcenter_username: '{{ vcenter_username }}'
            vcenter_password: '{{ vcenter_password }}'
            vcenter_validate_certs: no
            vm: myvm1
            type: SATA
            new_vmdk:
              capacity: 5 * 1024 * 1024 * 1024
          register: my_new_disk
@Greek-Fire
Copy link

Yeah, I am running into the same problem. Sadly, I do not have access to the code to display a useful error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants