Uploaded image for project: 'Ansible Cloud Automation'
  1. Ansible Cloud Automation
  2. ACA-1144

[kubernetes.core/659] Collection's util resource discovery fails when complex subresources present

XMLWordPrintable

    • False
    • Hide

      None

      Show
      None
    • False

      https://github.com/ansible-collections/kubernetes.core/issues/659

              1. SUMMARY
                Collection's util resource discovery fails on Python Value error due to subresources having multiple "/" in string.

      Kubevirt introduces such subresources, take a look here: https://github.com/kubevirt/kubevirt/blob/main/pkg/virt-api/api.go#L638
      However, discovery util in collections expects all subresources having only 1 "/" char in string, look here: https://github.com/ansible-collections/kubernetes.core/blob/main/plugins/module_utils/client/discovery.py#L116

              1. ISSUE TYPE
      • Bug Report
              1. COMPONENT NAME
                <!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
                plugins/module_utils/client/discover.py
              1. ANSIBLE VERSION
                ```paste below
                ansible [core 2.15.6]
                config file = /home/dkasanix/deployment/sdle/ansible.cfg
                configured module search path = ['/home/dkasanix/deployment/sdle/library']
                ansible python module location = /home/dkasanix/deployment/sdle/venv/lib/python3.10/site-packages/ansible
                ansible collection location = /home/dkasanix/deployment/sdle/collections
                executable location = /home/dkasanix/deployment/sdle/venv/bin/ansible
                python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] (/home/dkasanix/deployment/sdle/venv/bin/python)
                jinja version = 3.1.2
                libyaml = True
                ```
              1. COLLECTION VERSION
                ```paste below
      1. /home/dkasanix/deployment/sdle/venv/lib/python3.10/site-packages/ansible_collections
        Collection Version
                                  • -------
                                    kubernetes.core 2.4.0
                                    ```
              1. CONFIGURATION
                ```paste below
                CACHE_PLUGIN(/home/dkasanix/deployment/sdle/ansible.cfg) = jsonfile
                CACHE_PLUGIN_CONNECTION(/home/dkasanix/deployment/sdle/ansible.cfg) = /tmp
                CACHE_PLUGIN_TIMEOUT(/home/dkasanix/deployment/sdle/ansible.cfg) = 7200
                CALLBACKS_ENABLED(/home/dkasanix/deployment/sdle/ansible.cfg) = ['timer', 'profile_tasks', 'profile_roles']
                COLLECTIONS_PATHS(/home/dkasanix/deployment/sdle/ansible.cfg) = ['/home/dkasanix/deployment/sdle/collections']
                CONFIG_FILE() = /home/dkasanix/deployment/sdle/ansible.cfg
                DEFAULT_ACTION_PLUGIN_PATH(/home/dkasanix/deployment/sdle/ansible.cfg) = ['/home/dkasanix/deployment/sdle/action_plugins', '/home/dkasanix/.ansible/plugins/action', '/usr/share/ansible/plugins/action']
                DEFAULT_GATHERING(/home/dkasanix/deployment/sdle/ansible.cfg) = smart
                DEFAULT_LOG_PATH(/home/dkasanix/deployment/sdle/ansible.cfg) = /home/dkasanix/deployment/sdle/.ansible_last_run.log
                DEFAULT_MODULE_PATH(/home/dkasanix/deployment/sdle/ansible.cfg) = ['/home/dkasanix/deployment/sdle/library']
                DEFAULT_ROLES_PATH(/home/dkasanix/deployment/sdle/ansible.cfg) = ['/home/dkasanix/deployment/sdle/roles', '/home/dkasanix/deployment/sdle/collections/share/roles']
                DEFAULT_STDOUT_CALLBACK(/home/dkasanix/deployment/sdle/ansible.cfg) = debug
                DISPLAY_ARGS_TO_STDOUT(/home/dkasanix/deployment/sdle/ansible.cfg) = False
                DISPLAY_SKIPPED_HOSTS(/home/dkasanix/deployment/sdle/ansible.cfg) = False
                HOST_KEY_CHECKING(/home/dkasanix/deployment/sdle/ansible.cfg) = False
                TRANSFORM_INVALID_GROUP_CHARS(/home/dkasanix/deployment/sdle/ansible.cfg) = ignore
                ```
              1. OS / ENVIRONMENT
                <!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
                Kubernetes 1.28.3 with Calico CNI.
                Kubevirt installed.
              1. STEPS TO REPRODUCE

      1. install kubevirt via https://kubevirt.io/user-guide/operations/installation/#installing-kubevirt-on-kubernetes
      2. run task using module from kubernetes.core collection that happens to use discovery utils:
      ```yaml

      • name: test k8s_info
        kubernetes.core.k8s_info:
        kind: Deployment
        namespace: kubevirt
        ```

      <!--- HINT: You can paste gist.github.com links for larger files -->

              1. EXPECTED RESULTS
                <!--- Describe what you expected to happen when running the steps above -->
                Task should return list of deployment objects present in kubevirt namespace.
              1. ACTUAL RESULTS
                <!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
                Task fails on python Value error:
                <!--- Paste verbatim command output between quotes -->
                ```paste below
                TASK [test] *****************************************************************************************************************************************************************************************************task path: /home/dkasanix/deployment/sdle/test.yml:9
                The full traceback is:
                Traceback (most recent call last):
                File "<stdin>", line 107, in <module>
                File "<stdin>", line 99, in _ansiballz_main
                File "<stdin>", line 47, in invoke_module
                File "/usr/lib/python3.10/runpy.py", line 224, in run_module
                return _run_module_code(code, init_globals, run_name, mod_spec)
                File "/usr/lib/python3.10/runpy.py", line 96, in _run_module_code
                _run_code(code, mod_globals, init_globals, File "/usr/lib/python3.10/runpy.py", line 86, in _run_code exec(code, run_globals) File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py", line 217, in <module> File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py", line 211, in main File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py", line 173, in execute_module File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py", line 228, in find File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py", line 90, in find_resource File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py", line 306, in resource File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py", line 286, in _find_resource_with_prefix File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py", line 159, in get
                File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 237, in search results = self._search(self.build_search(**kwargs), self.resources, []) File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 283, in __search matches.extend(self.search([key] + parts[1:], resources, reqParams)) File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 269, in __search return self._search(parts[1:], resourcePart, reqParams + [part] )
                File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 283, in _search matches.extend(self._search([key] + parts[1:], resources, reqParams))
                File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 269, in __search
                return self.__search(parts[1:], resourcePart, reqParams + [part] )
                File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 258, in __search
                resourcePart.resources = self.get_resources_for_api_version(
                File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py", line 117, in get_resources_for_api_version
                ValueError: too many values to unpack (expected 2)
                fatal: [ad07-13-cyp]: FAILED! => {
                "changed": false,
                "invocation":
                Unknown macro: { "kind"}

                ,
                "rc": 1
                }

      MSG:

      MODULE FAILURE
      See stdout/stderr for the exact error

      MODULE_STDERR:

      Traceback (most recent call last):
      File "<stdin>", line 107, in <module>
      File "<stdin>", line 99, in _ansiballz_main
      File "<stdin>", line 47, in invoke_module
      File "/usr/lib/python3.10/runpy.py", line 224, in run_module
      return _run_module_code(code, init_globals, run_name, mod_spec)
      File "/usr/lib/python3.10/runpy.py", line 96, in _run_module_code
      _run_code(code, mod_globals, init_globals,
      File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
      exec(code, run_globals)
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py", line 217, in <module>
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py", line 211, in main
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py", line 173, in execute_module
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py", line 228, in find
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py", line 90, in find_resource
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py", line 306, in resource
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py", line 286, in _find_resource_with_prefix
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py", line 159, in get
      File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 237, in search
      results = self._search(self.build_search(**kwargs), self._resources, [])
      File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 283, in __search
      matches.extend(self.__search([key] + parts[1:], resources, reqParams))
      File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 269, in __search
      return self.__search(parts[1:], resourcePart, reqParams + [part] )
      File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 283, in __search
      matches.extend(self.__search([key] + parts[1:], resources, reqParams))
      File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 269, in __search
      return self.__search(parts[1:], resourcePart, reqParams + [part] )
      File "/usr/local/lib/python3.10/dist-packages/kubernetes/dynamic/discovery.py", line 258, in __search
      resourcePart.resources = self.get_resources_for_api_version(
      File "/tmp/ansible_kubernetes.core.k8s_info_payload_4mk5e9ds/ansible_kubernetes.core.k8s_info_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py", line 117, in get_resources_for_api_version
      ValueError: too many values to unpack (expected 2)
      ```

            Unassigned Unassigned
            jrouleau Jill Rouleau
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: