theforeman / foreman-ansible-modules

Ansible modules for interacting with the Foreman API and various plugin APIs such as Katello
GNU General Public License v3.0
148 stars 166 forks source link

Getting `Failed to connect to Foreman server: StopIteration: ` when working with Foreman #1479

Closed jhutar closed 2 years ago

jhutar commented 2 years ago
SUMMARY

This seems to be a generic problem for any module, but this is what I was trying to get info about existing host and the error.

ISSUE TYPE
ANSIBLE VERSION
ansible [core 2.12.7]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/jhutar/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.10/site-packages/ansible
  ansible collection location = /home/jhutar/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.6 (main, Aug  2 2022, 00:00:00) [GCC 12.1.1 20220507 (Red Hat 12.1.1-1)]
  jinja version = 3.0.3
  libyaml = True
COLLECTION VERSION
# /usr/lib/python3.10/site-packages/ansible_collections
Collection                    Version
----------------------------- -------
amazon.aws                    2.3.0  
ansible.netcommon             2.6.1  
ansible.posix                 1.4.0  
ansible.utils                 2.6.1  
ansible.windows               1.10.0 
arista.eos                    3.1.0  
awx.awx                       19.4.0 
azure.azcollection            1.13.0 
check_point.mgmt              2.3.0  
chocolatey.chocolatey         1.2.0  
cisco.aci                     2.2.0  
cisco.asa                     2.1.0  
cisco.dnac                    6.4.0  
cisco.intersight              1.0.19 
cisco.ios                     2.8.1  
cisco.iosxr                   2.9.0  
cisco.ise                     1.2.1  
cisco.meraki                  2.6.2  
cisco.mso                     1.4.0  
cisco.nso                     1.0.3  
cisco.nxos                    2.9.1  
cisco.ucs                     1.8.0  
cloud.common                  2.1.1  
cloudscale_ch.cloud           2.2.2  
community.aws                 2.5.0  
community.azure               1.1.0  
community.ciscosmb            1.0.5  
community.crypto              2.3.2  
community.digitalocean        1.19.0 
community.dns                 2.2.0  
community.docker              2.6.0  
community.fortios             1.0.0  
community.general             4.8.2  
community.google              1.0.0  
community.grafana             1.4.0  
community.hashi_vault         2.5.0  
community.hrobot              1.4.0  
community.kubernetes          2.0.1  
community.kubevirt            1.0.0  
community.libvirt             1.1.0  
community.mongodb             1.4.0  
community.mysql               2.3.8  
community.network             3.3.0  
community.okd                 2.2.0  
community.postgresql          1.7.4  
community.proxysql            1.4.0  
community.rabbitmq            1.2.1  
community.routeros            2.1.0  
community.sap                 1.0.0  
community.sap_libs            1.1.0  
community.skydive             1.0.0  
community.sops                1.2.2  
community.vmware              1.18.0 
community.windows             1.10.0 
community.zabbix              1.7.0  
containers.podman             1.9.3  
cyberark.conjur               1.1.0  
cyberark.pas                  1.0.14 
dellemc.enterprise_sonic      1.1.1  
dellemc.openmanage            4.4.0  
dellemc.os10                  1.1.1  
dellemc.os6                   1.0.7  
dellemc.os9                   1.0.4  
f5networks.f5_modules         1.17.0 
fortinet.fortimanager         2.1.5  
fortinet.fortios              2.1.6  
frr.frr                       1.0.4  
gluster.gluster               1.0.2  
google.cloud                  1.0.2  
hetzner.hcloud                1.6.0  
hpe.nimble                    1.1.4  
ibm.qradar                    1.0.3  
infinidat.infinibox           1.3.3  
infoblox.nios_modules         1.2.2  
inspur.sm                     1.3.0  
junipernetworks.junos         2.10.0 
kubernetes.core               2.3.1  
mellanox.onyx                 1.0.0  
netapp.aws                    21.7.0 
netapp.azure                  21.10.0
netapp.cloudmanager           21.17.0
netapp.elementsw              21.7.0 
netapp.ontap                  21.19.1
netapp.storagegrid            21.10.0
netapp.um_info                21.8.0 
netapp_eseries.santricity     1.3.0  
netbox.netbox                 3.7.1  
ngine_io.cloudstack           2.2.4  
ngine_io.exoscale             1.0.0  
ngine_io.vultr                1.1.1  
openstack.cloud               1.8.0  
openvswitch.openvswitch       2.1.0  
ovirt.ovirt                   1.6.6  
purestorage.flasharray        1.13.0 
purestorage.flashblade        1.9.0  
sensu.sensu_go                1.13.1 
servicenow.servicenow         1.0.6  
splunk.es                     1.0.2  
t_systems_mms.icinga_director 1.29.0 
theforeman.foreman            2.2.0  
vmware.vmware_rest            2.1.5  
vyos.vyos                     2.8.0  
wti.remote                    1.0.3  

# /home/jhutar/.ansible/collections/ansible_collections
Collection           Version
-------------------- -------
ansible.netcommon    2.1.0  
ansible.posix        1.3.0  
ansible.utils        2.2.0  
awx.awx              15.0.1 
community.general    3.6.0  
community.postgresql 1.3.0  
containers.podman    1.9.4  
ibm.cloudcollection  1.37.1 
theforeman.foreman   3.6.0  
KATELLO/FOREMAN VERSION

I do not have access to ssh to the Foreman, but UI says Version 1.19.1

STEPS TO REPRODUCE
    - name: "Check host"
      theforeman.foreman.host_info:
        username: "{{ foreman_user }}"
        password: "{{ foreman_pass }}"
        server_url: "{{ foreman_protocol }}://{{ foreman_host }}"
        validate_certs: "{{ foreman_verify }}"
        name: "{{ item }}"
      loop: "{{ inventory_hosts }}"
      register: host_info
EXPECTED RESULTS

It should work.

ACTUAL RESULTS
<127.0.0.1> EXEC /bin/sh -c 'echo ~jhutar && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/jhutar/.ansible/tmp `"&& mkdir "` echo /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721 `" && echo ansible-tmp-1662547757.0224614-1306568-200880301779721="` echo /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721 `" ) && sleep 0'
Using module file /home/jhutar/.ansible/collections/ansible_collections/theforeman/foreman/plugins/modules/host_info.py
<127.0.0.1> PUT /home/jhutar/.ansible/tmp/ansible-local-13065546onn64xu/tmptwpqpd9i TO /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721/AnsiballZ_host_info.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721/ /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721/AnsiballZ_host_info.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python3 /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721/AnsiballZ_host_info.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/jhutar/.ansible/tmp/ansible-tmp-1662547757.0224614-1306568-200880301779721/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
  File "/tmp/ansible_theforeman.foreman.host_info_payload_4xh76q5t/ansible_theforeman.foreman.host_info_payload.zip/ansible_collections/theforeman/foreman/plugins/module_utils/foreman_helper.py", line 99, in inner
    return f(self, *args, **kwargs)
  File "/tmp/ansible_theforeman.foreman.host_info_payload_4xh76q5t/ansible_theforeman.foreman.host_info_payload.zip/ansible_collections/theforeman/foreman/plugins/module_utils/foreman_helper.py", line 643, in connect
    self.apply_apidoc_patches()
  File "/tmp/ansible_theforeman.foreman.host_info_payload_4xh76q5t/ansible_theforeman.foreman.host_info_payload.zip/ansible_collections/theforeman/foreman/plugins/module_utils/foreman_helper.py", line 653, in apply_apidoc_patches
    self._patch_host_update()
  File "/tmp/ansible_theforeman.foreman.host_info_payload_4xh76q5t/ansible_theforeman.foreman.host_info_payload.zip/ansible_collections/theforeman/foreman/plugins/module_utils/foreman_helper.py", line 424, in _patch_host_update
    _host_update_taxonomy_param = next(x for x in _host_update['params'] if x['name'] == param)
failed: [localhost] (item=<host>) => {
    "ansible_loop_var": "item",
    "changed": false,
    "invocation": {
        "module_args": {
            "location": null,
            "name": "<host>",
            "organization": null,
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "search": null,
            "server_url": "https://<foreman_host>",
            "username": "<foreman_username>",
            "validate_certs": false
        }
    },
    "item": "<host>",
    "msg": "Failed to connect to Foreman server: StopIteration: "
}
jhutar commented 2 years ago

Found this @evgeni fix and it worked for me: https://community.theforeman.org/t/ansible-create-host-failing-to-connect/22982

        _host_update = next(x for x in _host_methods if x['name'] == 'update')
        for param in ['location_id', 'organization_id']:
            # See https://community.theforeman.org/t/ansible-create-host-failing-to-connect/22982
            #_host_update_taxonomy_param = next(x for x in _host_update['params'] if x['name'] == param)
            #_host_update['params'].remove(_host_update_taxonomy_param)
            _host_update_taxonomy_param = next((x for x in _host_update['params'] if x['name'] == param), None)
            if _host_update_taxonomy_param is not None:
                _host_update['params'].remove(_host_update_taxonomy_param)
evgeni commented 2 years ago

Foreman 1.19 is unsupported ;-)