Description of problem: When I run /usr/bin/tripleo-ansible-inventory --stack overcloud --static-yaml-inventory inventory.yaml this inventory is not usable by ansible as it is malformed: overcloud_Controller: hosts: overcloud-controller-0: {ansible_host: 10.0.0.62, canonical_hostname: overcloud-controller-0.rhosp16.infra-as-code.org, ... Since 16.0 is looked like this overcloud_Controller: hosts: overcloud-controller-0: ansible_host: 10.0.0.62 canonical_hostname: overcloud-controller-0.rhosp16.infra-as-code.org ... As a result, using this inventory leads to (undercloud) [stack@iac-director ~]$ ansible -i ansible-inventory.yaml overcloud_Controller -b -m shell -a "id" overcloud_Controller | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname overcloud_controller: Name or service not known", "unreachable": true } Version-Release number of selected component (if applicable): broken since 16.1, here it is openstack-tripleo-validations-11.3.2-0.20200611115253.08f469d.el8ost.noarch How reproducible: always Steps to Reproduce: 1. install 16.1 2. /usr/bin/tripleo-ansible-inventory --stack overcloud --static-yaml-inventory inventory.yaml 3. try to use this inventory Actual results: hosts are not found by ansible Expected results: hosts are found and correctly addressed Additional info:
This has probably a high severity as many tools rely on this process.
Hello Joachim, Care to provide the full inventory file? That would help a bit. Thanks! Cheers, C.
Created attachment 1714571 [details] Ansible inventory as produced by tripleo-ansible-inventory on OSP16.1 Sure. Find the broken 16.1 inventory attached.
(undercloud) [RedHat-8.2 - stack@undercloud ~]$ ansible -i /home/stack/inventory.yaml overcloud-0_Controller -b -m shell -a "id" [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details [DEPRECATION WARNING]: Distribution redhat 8.2 on host oc0-controller-0 should use /usr/libexec/platform-python, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. oc0-controller-0 | CHANGED | rc=0 >> uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [DEPRECATION WARNING]: Distribution redhat 8.2 on host oc0-controller-2 should use /usr/libexec/platform-python, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. oc0-controller-2 | CHANGED | rc=0 >> uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [DEPRECATION WARNING]: Distribution redhat 8.2 on host oc0-controller-1 should use /usr/libexec/platform-python, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. oc0-controller-1 | CHANGED | rc=0 >> uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 It works for me just fine. ansible-tripleo-ipa-0.2.1-0.20200611104546.c22fc8d.el8ost.noarch ansible-tripleo-ipsec-9.2.1-0.20200311073016.0c8693c.el8ost.noarch openstack-tripleo-puppet-elements-11.2.2-0.20200527003426.226ce95.el8ost.noarch python3-tripleoclient-12.3.2-0.20200615103427.6f877f6.el8ost.noarch python3-tripleo-common-11.3.3-0.20200611110657.f7715be.el8ost.noarch openstack-tripleo-common-11.3.3-0.20200611110657.f7715be.el8ost.noarch puppet-tripleo-11.5.0-0.20200616033428.8ff1c6a.el8ost.noarch openstack-tripleo-image-elements-10.6.2-0.20200528043425.7dc0fa1.el8ost.noarch openstack-tripleo-validations-11.3.2-0.20200611115253.08f469d.el8ost.noarch openstack-tripleo-heat-templates-11.3.2-0.20200616081539.396affd.el8ost.noarch tripleo-ansible-0.5.1-0.20200611113659.34b8fcc.el8ost.noarch python3-tripleoclient-heat-installer-12.3.2-0.20200615103427.6f877f6.el8ost.noarch ansible-role-tripleo-modify-image-1.2.1-0.20200527233426.bc21900.el8ost.noarch
(undercloud) [RedHat-8.2 - stack@undercloud ~]$ cat /etc/hosts # BEGIN ANSIBLE MANAGED BLOCK 172.16.13.133 oc0-compute-0.mydomain.tld oc0-compute-0 172.16.11.215 oc0-compute-0.storage.mydomain.tld oc0-compute-0.storage 172.16.13.133 oc0-compute-0.internalapi.mydomain.tld oc0-compute-0.internalapi 172.16.14.38 oc0-compute-0.tenant.mydomain.tld oc0-compute-0.tenant 192.168.24.18 oc0-compute-0.ctlplane.mydomain.tld oc0-compute-0.ctlplane 172.16.13.62 oc0-controller-0.mydomain.tld oc0-controller-0 172.16.11.46 oc0-controller-0.storage.mydomain.tld oc0-controller-0.storage 172.16.12.163 oc0-controller-0.storagemgmt.mydomain.tld oc0-controller-0.storagemgmt 172.16.13.62 oc0-controller-0.internalapi.mydomain.tld oc0-controller-0.internalapi 172.16.14.238 oc0-controller-0.tenant.mydomain.tld oc0-controller-0.tenant 192.168.100.47 oc0-controller-0.external.mydomain.tld oc0-controller-0.external 192.168.24.9 oc0-controller-0.ctlplane.mydomain.tld oc0-controller-0.ctlplane 172.16.13.197 oc0-controller-1.mydomain.tld oc0-controller-1 172.16.11.38 oc0-controller-1.storage.mydomain.tld oc0-controller-1.storage 172.16.12.120 oc0-controller-1.storagemgmt.mydomain.tld oc0-controller-1.storagemgmt 172.16.13.197 oc0-controller-1.internalapi.mydomain.tld oc0-controller-1.internalapi 172.16.14.81 oc0-controller-1.tenant.mydomain.tld oc0-controller-1.tenant 192.168.100.73 oc0-controller-1.external.mydomain.tld oc0-controller-1.external 192.168.24.12 oc0-controller-1.ctlplane.mydomain.tld oc0-controller-1.ctlplane 172.16.13.85 oc0-controller-2.mydomain.tld oc0-controller-2 172.16.11.204 oc0-controller-2.storage.mydomain.tld oc0-controller-2.storage 172.16.12.60 oc0-controller-2.storagemgmt.mydomain.tld oc0-controller-2.storagemgmt 172.16.13.85 oc0-controller-2.internalapi.mydomain.tld oc0-controller-2.internalapi 172.16.14.93 oc0-controller-2.tenant.mydomain.tld oc0-controller-2.tenant 192.168.100.33 oc0-controller-2.external.mydomain.tld oc0-controller-2.external 192.168.24.19 oc0-controller-2.ctlplane.mydomain.tld oc0-controller-2.ctlplane 192.168.24.1 undercloud.ctlplane.mydomain.tld undercloud.ctlplane 192.168.24.20 overcloud0.ctlplane.mydomain.tld 172.16.11.237 overcloud0.storagecloud0.mydomain.tld 172.16.12.11 overcloud0.storagemgmtcloud0.mydomain.tld 172.16.13.208 overcloud0.internalapicloud0.mydomain.tld 192.168.100.31 overcloud0.mydomain.tld # END ANSIBLE MANAGED BLOCK 127.0.0.1 undercloud.mydomain.tld localhost.mydomain.tld undercloud localhost ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
The attached inventory is a valid yaml file. This seems to be an issue with the way ansible is handling the group names out of the inventory. It looks like it lowercases the input so it then fails to match the group and assumes it's a host. This is not an inventory problem so I'd file an issue with ansible.
We are running into a similar issue: When running the the tripleo-ansible-inventory without an overcloud the script generates following inventory: Undercloud: hosts: undercloud: {} vars: ansible_connection: local ansible_host: localhost ansible_python_interpreter: /usr/bin/python3 ansible_remote_tmp: /tmp/ansible-${USER} auth_url: https://10.100.72.4:13000 cacert: /etc/pki/ca-trust/source/anchors/cm-local-ca.pem os_auth_token: XXXXX plan: overcloud plans: [overcloud] project_name: admin undercloud_service_list: [tripleo_nova_compute, tripleo_heat_engine, tripleo_ironic_conductor, tripleo_swift_container_server, tripleo_swift_object_server, tripleo_mistral_engine] undercloud_swift_url: https://10.100.72.4:13808/v1/AUTH_747d0549df934531807060de7d6079b9 username: admin overcloud: children: overcloud: {} However this causes an error when running some ansible ad hoc tasks which causes the inventory parsing to fail and only the localhost to be added to the inventory (see below). It looks like ansible doesn't like that the overcloud group tries to add itself as children. [[dev]stack@uc environments]$ ansible -m ping -i ~/ansible_inventory.yaml all [WARNING]: * Failed to parse /home/stack/ansible_inventory.yaml with auto plugin: no root 'plugin' key found, '/home/stack/ansible_inventory.yaml' is not a valid YAML inventory plugin config file [WARNING]: * Failed to parse /home/stack/ansible_inventory.yaml with yaml plugin: can't add group to itself [WARNING]: * Failed to parse /home/stack/ansible_inventory.yaml with ini plugin: Invalid host pattern 'Undercloud:' supplied, ending in ':' is not allowed, this character is reserved to provide a port. [WARNING]: Unable to parse /home/stack/ansible_inventory.yaml as an inventory source [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' This will affect the pre-deployment and pre-introspection validation playbooks because they also generate this inventory file and then any tasks that are supposed to be run on the "all" host group are skipped/not executed. Should I open a separate issue ?