2026-03-16 13:14:28,380 p=31647 u=zuul n=ansible | Starting galaxy collection install process 2026-03-16 13:14:28,381 p=31647 u=zuul n=ansible | Process install dependency map 2026-03-16 13:14:43,367 p=31647 u=zuul n=ansible | Starting collection install process 2026-03-16 13:14:43,368 p=31647 u=zuul n=ansible | Installing 'cifmw.general:1.0.0+4da82239' to '/home/zuul/.ansible/collections/ansible_collections/cifmw/general' 2026-03-16 13:14:43,805 p=31647 u=zuul n=ansible | Created collection for cifmw.general:1.0.0+4da82239 at /home/zuul/.ansible/collections/ansible_collections/cifmw/general 2026-03-16 13:14:43,805 p=31647 u=zuul n=ansible | cifmw.general:1.0.0+4da82239 was installed successfully 2026-03-16 13:14:43,805 p=31647 u=zuul n=ansible | Installing 'containers.podman:1.16.2' to '/home/zuul/.ansible/collections/ansible_collections/containers/podman' 2026-03-16 13:14:43,853 p=31647 u=zuul n=ansible | Created collection for containers.podman:1.16.2 at /home/zuul/.ansible/collections/ansible_collections/containers/podman 2026-03-16 13:14:43,853 p=31647 u=zuul n=ansible | containers.podman:1.16.2 was installed successfully 2026-03-16 13:14:43,853 p=31647 u=zuul n=ansible | Installing 'community.general:10.0.1' to '/home/zuul/.ansible/collections/ansible_collections/community/general' 2026-03-16 13:14:44,465 p=31647 u=zuul n=ansible | Created collection for community.general:10.0.1 at /home/zuul/.ansible/collections/ansible_collections/community/general 2026-03-16 13:14:44,465 p=31647 u=zuul n=ansible | community.general:10.0.1 was installed successfully 2026-03-16 13:14:44,465 p=31647 u=zuul n=ansible | Installing 'ansible.posix:1.6.2' to '/home/zuul/.ansible/collections/ansible_collections/ansible/posix' 2026-03-16 13:14:44,505 p=31647 u=zuul n=ansible | Created collection for ansible.posix:1.6.2 at /home/zuul/.ansible/collections/ansible_collections/ansible/posix 2026-03-16 13:14:44,505 p=31647 u=zuul n=ansible | ansible.posix:1.6.2 was installed successfully 2026-03-16 13:14:44,506 p=31647 u=zuul n=ansible | Installing 'ansible.utils:5.1.2' to '/home/zuul/.ansible/collections/ansible_collections/ansible/utils' 2026-03-16 13:14:44,585 p=31647 u=zuul n=ansible | Created collection for ansible.utils:5.1.2 at /home/zuul/.ansible/collections/ansible_collections/ansible/utils 2026-03-16 13:14:44,585 p=31647 u=zuul n=ansible | ansible.utils:5.1.2 was installed successfully 2026-03-16 13:14:44,585 p=31647 u=zuul n=ansible | Installing 'community.libvirt:1.3.0' to '/home/zuul/.ansible/collections/ansible_collections/community/libvirt' 2026-03-16 13:14:44,604 p=31647 u=zuul n=ansible | Created collection for community.libvirt:1.3.0 at /home/zuul/.ansible/collections/ansible_collections/community/libvirt 2026-03-16 13:14:44,604 p=31647 u=zuul n=ansible | community.libvirt:1.3.0 was installed successfully 2026-03-16 13:14:44,604 p=31647 u=zuul n=ansible | Installing 'community.crypto:2.22.3' to '/home/zuul/.ansible/collections/ansible_collections/community/crypto' 2026-03-16 13:14:44,721 p=31647 u=zuul n=ansible | Created collection for community.crypto:2.22.3 at /home/zuul/.ansible/collections/ansible_collections/community/crypto 2026-03-16 13:14:44,721 p=31647 u=zuul n=ansible | community.crypto:2.22.3 was installed successfully 2026-03-16 13:14:44,721 p=31647 u=zuul n=ansible | Installing 'kubernetes.core:5.0.0' to '/home/zuul/.ansible/collections/ansible_collections/kubernetes/core' 2026-03-16 13:14:44,821 p=31647 u=zuul n=ansible | Created collection for kubernetes.core:5.0.0 at /home/zuul/.ansible/collections/ansible_collections/kubernetes/core 2026-03-16 13:14:44,822 p=31647 u=zuul n=ansible | kubernetes.core:5.0.0 was installed successfully 2026-03-16 13:14:44,822 p=31647 u=zuul n=ansible | Installing 'ansible.netcommon:7.1.0' to '/home/zuul/.ansible/collections/ansible_collections/ansible/netcommon' 2026-03-16 13:14:44,880 p=31647 u=zuul n=ansible | Created collection for ansible.netcommon:7.1.0 at /home/zuul/.ansible/collections/ansible_collections/ansible/netcommon 2026-03-16 13:14:44,880 p=31647 u=zuul n=ansible | ansible.netcommon:7.1.0 was installed successfully 2026-03-16 13:14:44,880 p=31647 u=zuul n=ansible | Installing 'openstack.config_template:2.1.1' to '/home/zuul/.ansible/collections/ansible_collections/openstack/config_template' 2026-03-16 13:14:44,895 p=31647 u=zuul n=ansible | Created collection for openstack.config_template:2.1.1 at /home/zuul/.ansible/collections/ansible_collections/openstack/config_template 2026-03-16 13:14:44,895 p=31647 u=zuul n=ansible | openstack.config_template:2.1.1 was installed successfully 2026-03-16 13:14:44,895 p=31647 u=zuul n=ansible | Installing 'junipernetworks.junos:9.1.0' to '/home/zuul/.ansible/collections/ansible_collections/junipernetworks/junos' 2026-03-16 13:14:45,100 p=31647 u=zuul n=ansible | Created collection for junipernetworks.junos:9.1.0 at /home/zuul/.ansible/collections/ansible_collections/junipernetworks/junos 2026-03-16 13:14:45,100 p=31647 u=zuul n=ansible | junipernetworks.junos:9.1.0 was installed successfully 2026-03-16 13:14:45,100 p=31647 u=zuul n=ansible | Installing 'cisco.ios:9.0.3' to '/home/zuul/.ansible/collections/ansible_collections/cisco/ios' 2026-03-16 13:14:45,314 p=31647 u=zuul n=ansible | Created collection for cisco.ios:9.0.3 at /home/zuul/.ansible/collections/ansible_collections/cisco/ios 2026-03-16 13:14:45,314 p=31647 u=zuul n=ansible | cisco.ios:9.0.3 was installed successfully 2026-03-16 13:14:45,315 p=31647 u=zuul n=ansible | Installing 'mellanox.onyx:1.0.0' to '/home/zuul/.ansible/collections/ansible_collections/mellanox/onyx' 2026-03-16 13:14:45,341 p=31647 u=zuul n=ansible | Created collection for mellanox.onyx:1.0.0 at /home/zuul/.ansible/collections/ansible_collections/mellanox/onyx 2026-03-16 13:14:45,341 p=31647 u=zuul n=ansible | mellanox.onyx:1.0.0 was installed successfully 2026-03-16 13:14:45,341 p=31647 u=zuul n=ansible | Installing 'community.okd:4.0.0' to '/home/zuul/.ansible/collections/ansible_collections/community/okd' 2026-03-16 13:14:45,364 p=31647 u=zuul n=ansible | Created collection for community.okd:4.0.0 at /home/zuul/.ansible/collections/ansible_collections/community/okd 2026-03-16 13:14:45,364 p=31647 u=zuul n=ansible | community.okd:4.0.0 was installed successfully 2026-03-16 13:14:45,364 p=31647 u=zuul n=ansible | Installing '@NAMESPACE@.@NAME@:3.1.4' to '/home/zuul/.ansible/collections/ansible_collections/@NAMESPACE@/@NAME@' 2026-03-16 13:14:45,438 p=31647 u=zuul n=ansible | Created collection for @NAMESPACE@.@NAME@:3.1.4 at /home/zuul/.ansible/collections/ansible_collections/@NAMESPACE@/@NAME@ 2026-03-16 13:14:45,438 p=31647 u=zuul n=ansible | @NAMESPACE@.@NAME@:3.1.4 was installed successfully 2026-03-16 13:14:53,941 p=32486 u=zuul n=ansible | PLAY [Bootstrap playbook] ****************************************************** 2026-03-16 13:14:53,958 p=32486 u=zuul n=ansible | TASK [Gathering Facts ] ******************************************************** 2026-03-16 13:14:53,958 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:53 +0000 (0:00:00.031) 0:00:00.031 ********** 2026-03-16 13:14:53,958 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:53 +0000 (0:00:00.030) 0:00:00.030 ********** 2026-03-16 13:14:54,764 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:14:54,777 p=32486 u=zuul n=ansible | TASK [cifmw_setup : Set custom cifmw PATH reusable fact cifmw_path={{ ansible_user_dir }}/.crc/bin:{{ ansible_user_dir }}/.crc/bin/oc:{{ ansible_user_dir }}/bin:{{ ansible_env.PATH }}, cacheable=True] *** 2026-03-16 13:14:54,777 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:54 +0000 (0:00:00.819) 0:00:00.851 ********** 2026-03-16 13:14:54,778 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:54 +0000 (0:00:00.819) 0:00:00.849 ********** 2026-03-16 13:14:54,797 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:14:54,802 p=32486 u=zuul n=ansible | TASK [cifmw_setup : Get customized parameters ci_framework_params={{ hostvars[inventory_hostname] | dict2items | selectattr("key", "match", "^(cifmw|pre|post)_(?!install_yamls|openshift_token|openshift_login|openshift_kubeconfig).*") | list | items2dict }}] *** 2026-03-16 13:14:54,802 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:54 +0000 (0:00:00.024) 0:00:00.875 ********** 2026-03-16 13:14:54,802 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:54 +0000 (0:00:00.024) 0:00:00.874 ********** 2026-03-16 13:14:54,854 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:14:54,859 p=32486 u=zuul n=ansible | TASK [install_ca : Ensure target directory exists path={{ cifmw_install_ca_trust_dir }}, state=directory, mode=0755] *** 2026-03-16 13:14:54,859 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:54 +0000 (0:00:00.057) 0:00:00.932 ********** 2026-03-16 13:14:54,859 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:54 +0000 (0:00:00.057) 0:00:00.931 ********** 2026-03-16 13:14:55,124 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:14:55,129 p=32486 u=zuul n=ansible | TASK [install_ca : Install internal CA from url url={{ cifmw_install_ca_url }}, dest={{ cifmw_install_ca_trust_dir }}, validate_certs={{ cifmw_install_ca_url_validate_certs | default(omit) }}, mode=0644] *** 2026-03-16 13:14:55,129 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.269) 0:00:01.202 ********** 2026-03-16 13:14:55,129 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.269) 0:00:01.201 ********** 2026-03-16 13:14:55,145 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:14:55,151 p=32486 u=zuul n=ansible | TASK [install_ca : Install custom CA bundle from inline dest={{ cifmw_install_ca_trust_dir }}/cifmw_inline_ca_bundle.crt, content={{ cifmw_install_ca_bundle_inline }}, mode=0644] *** 2026-03-16 13:14:55,151 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.022) 0:00:01.224 ********** 2026-03-16 13:14:55,151 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.022) 0:00:01.223 ********** 2026-03-16 13:14:55,168 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:14:55,173 p=32486 u=zuul n=ansible | TASK [install_ca : Install custom CA bundle from file dest={{ cifmw_install_ca_trust_dir }}/{{ cifmw_install_ca_bundle_src | basename }}, src={{ cifmw_install_ca_bundle_src }}, mode=0644] *** 2026-03-16 13:14:55,174 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.022) 0:00:01.247 ********** 2026-03-16 13:14:55,174 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.022) 0:00:01.245 ********** 2026-03-16 13:14:55,189 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:14:55,195 p=32486 u=zuul n=ansible | TASK [install_ca : Update ca bundle _raw_params=update-ca-trust] *************** 2026-03-16 13:14:55,195 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.021) 0:00:01.268 ********** 2026-03-16 13:14:55,195 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.021) 0:00:01.267 ********** 2026-03-16 13:14:55,211 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:14:55,220 p=32486 u=zuul n=ansible | TASK [repo_setup : Ensure directories are present path={{ cifmw_repo_setup_basedir }}/{{ item }}, state=directory, mode=0755] *** 2026-03-16 13:14:55,220 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.024) 0:00:01.293 ********** 2026-03-16 13:14:55,220 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.024) 0:00:01.292 ********** 2026-03-16 13:14:55,373 p=32486 u=zuul n=ansible | changed: [localhost] => (item=tmp) 2026-03-16 13:14:55,511 p=32486 u=zuul n=ansible | changed: [localhost] => (item=artifacts/repositories) 2026-03-16 13:14:55,657 p=32486 u=zuul n=ansible | changed: [localhost] => (item=venv/repo_setup) 2026-03-16 13:14:55,665 p=32486 u=zuul n=ansible | TASK [repo_setup : Make sure git-core package is installed name=git-core, state=present] *** 2026-03-16 13:14:55,665 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.445) 0:00:01.739 ********** 2026-03-16 13:14:55,666 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:55 +0000 (0:00:00.445) 0:00:01.737 ********** 2026-03-16 13:14:56,430 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:14:56,436 p=32486 u=zuul n=ansible | TASK [repo_setup : Get repo-setup repository accept_hostkey=True, dest={{ cifmw_repo_setup_basedir }}/tmp/repo-setup, repo={{ cifmw_repo_setup_src }}] *** 2026-03-16 13:14:56,436 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:56 +0000 (0:00:00.770) 0:00:02.509 ********** 2026-03-16 13:14:56,436 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:56 +0000 (0:00:00.770) 0:00:02.508 ********** 2026-03-16 13:14:57,450 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:14:57,456 p=32486 u=zuul n=ansible | TASK [repo_setup : Initialize python venv and install requirements virtualenv={{ cifmw_repo_setup_venv }}, requirements={{ cifmw_repo_setup_basedir }}/tmp/repo-setup/requirements.txt, virtualenv_command=python3 -m venv --system-site-packages --upgrade-deps] *** 2026-03-16 13:14:57,456 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:57 +0000 (0:00:01.020) 0:00:03.529 ********** 2026-03-16 13:14:57,456 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:14:57 +0000 (0:00:01.020) 0:00:03.528 ********** 2026-03-16 13:15:05,243 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:05,249 p=32486 u=zuul n=ansible | TASK [repo_setup : Install repo-setup package chdir={{ cifmw_repo_setup_basedir }}/tmp/repo-setup, creates={{ cifmw_repo_setup_venv }}/bin/repo-setup, _raw_params={{ cifmw_repo_setup_venv }}/bin/python setup.py install] *** 2026-03-16 13:15:05,249 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:05 +0000 (0:00:07.793) 0:00:11.323 ********** 2026-03-16 13:15:05,249 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:05 +0000 (0:00:07.793) 0:00:11.321 ********** 2026-03-16 13:15:05,999 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:06,005 p=32486 u=zuul n=ansible | TASK [repo_setup : Set cifmw_repo_setup_dlrn_hash_tag from content provider cifmw_repo_setup_dlrn_hash_tag={{ content_provider_dlrn_md5_hash }}] *** 2026-03-16 13:15:06,005 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.755) 0:00:12.079 ********** 2026-03-16 13:15:06,005 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.755) 0:00:12.077 ********** 2026-03-16 13:15:06,021 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:06,027 p=32486 u=zuul n=ansible | TASK [repo_setup : Run repo-setup _raw_params={{ cifmw_repo_setup_venv }}/bin/repo-setup {{ cifmw_repo_setup_promotion }} {{ cifmw_repo_setup_additional_repos }} -d {{ cifmw_repo_setup_os_release }}{{ cifmw_repo_setup_dist_major_version }} -b {{ cifmw_repo_setup_branch }} --rdo-mirror {{ cifmw_repo_setup_rdo_mirror }} {% if cifmw_repo_setup_dlrn_hash_tag | length > 0 %} --dlrn-hash-tag {{ cifmw_repo_setup_dlrn_hash_tag }} {% endif %} -o {{ cifmw_repo_setup_output }}] *** 2026-03-16 13:15:06,027 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.021) 0:00:12.100 ********** 2026-03-16 13:15:06,027 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.021) 0:00:12.099 ********** 2026-03-16 13:15:06,811 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:06,817 p=32486 u=zuul n=ansible | TASK [repo_setup : Get component repo url={{ cifmw_repo_setup_dlrn_uri }}/{{ cifmw_repo_setup_os_release }}{{ cifmw_repo_setup_dist_major_version }}-{{ cifmw_repo_setup_branch }}/component/{{ cifmw_repo_setup_component_name }}/{{ cifmw_repo_setup_component_promotion_tag }}/delorean.repo, dest={{ cifmw_repo_setup_output }}/{{ cifmw_repo_setup_component_name }}_{{ cifmw_repo_setup_component_promotion_tag }}_delorean.repo, mode=0644] *** 2026-03-16 13:15:06,817 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.789) 0:00:12.890 ********** 2026-03-16 13:15:06,817 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.789) 0:00:12.889 ********** 2026-03-16 13:15:06,843 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:06,849 p=32486 u=zuul n=ansible | TASK [repo_setup : Rename component repo path={{ cifmw_repo_setup_output }}/{{ cifmw_repo_setup_component_name }}_{{ cifmw_repo_setup_component_promotion_tag }}_delorean.repo, regexp=delorean-component-{{ cifmw_repo_setup_component_name }}, replace={{ cifmw_repo_setup_component_name }}-{{ cifmw_repo_setup_component_promotion_tag }}] *** 2026-03-16 13:15:06,849 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.031) 0:00:12.922 ********** 2026-03-16 13:15:06,849 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.031) 0:00:12.921 ********** 2026-03-16 13:15:06,873 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:06,879 p=32486 u=zuul n=ansible | TASK [repo_setup : Disable component repo in current-podified dlrn repo path={{ cifmw_repo_setup_output }}/delorean.repo, section=delorean-component-{{ cifmw_repo_setup_component_name }}, option=enabled, value=0, mode=0644] *** 2026-03-16 13:15:06,879 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.030) 0:00:12.953 ********** 2026-03-16 13:15:06,880 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.030) 0:00:12.951 ********** 2026-03-16 13:15:06,906 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:06,912 p=32486 u=zuul n=ansible | TASK [repo_setup : Run repo-setup-get-hash _raw_params={{ cifmw_repo_setup_venv }}/bin/repo-setup-get-hash --dlrn-url {{ cifmw_repo_setup_dlrn_uri[:-1] }} --os-version {{ cifmw_repo_setup_os_release }}{{ cifmw_repo_setup_dist_major_version }} --release {{ cifmw_repo_setup_branch }} {% if cifmw_repo_setup_component_name | length > 0 -%} --component {{ cifmw_repo_setup_component_name }} --tag {{ cifmw_repo_setup_component_promotion_tag }} {% else -%} --tag {{cifmw_repo_setup_promotion }} {% endif -%} {% if (cifmw_repo_setup_dlrn_hash_tag | length > 0) and (cifmw_repo_setup_component_name | length <= 0) -%} --dlrn-hash-tag {{ cifmw_repo_setup_dlrn_hash_tag }} {% endif -%} --json] *** 2026-03-16 13:15:06,912 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.032) 0:00:12.985 ********** 2026-03-16 13:15:06,912 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:06 +0000 (0:00:00.032) 0:00:12.984 ********** 2026-03-16 13:15:07,410 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:07,416 p=32486 u=zuul n=ansible | TASK [repo_setup : Dump full hash in delorean.repo.md5 file content={{ _repo_setup_json['full_hash'] }} , dest={{ cifmw_repo_setup_basedir }}/artifacts/repositories/delorean.repo.md5, mode=0644] *** 2026-03-16 13:15:07,416 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.504) 0:00:13.489 ********** 2026-03-16 13:15:07,416 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.504) 0:00:13.488 ********** 2026-03-16 13:15:07,933 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:07,938 p=32486 u=zuul n=ansible | TASK [repo_setup : Dump current-podified hash url={{ cifmw_repo_setup_dlrn_uri }}/{{ cifmw_repo_setup_os_release }}{{ cifmw_repo_setup_dist_major_version }}-{{ cifmw_repo_setup_branch }}/current-podified/delorean.repo.md5, dest={{ cifmw_repo_setup_basedir }}/artifacts/repositories/delorean.repo.md5, mode=0644] *** 2026-03-16 13:15:07,938 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.522) 0:00:14.012 ********** 2026-03-16 13:15:07,939 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.522) 0:00:14.010 ********** 2026-03-16 13:15:07,951 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:07,957 p=32486 u=zuul n=ansible | TASK [repo_setup : Slurp current podified hash src={{ cifmw_repo_setup_basedir }}/artifacts/repositories/delorean.repo.md5] *** 2026-03-16 13:15:07,957 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.018) 0:00:14.030 ********** 2026-03-16 13:15:07,957 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.018) 0:00:14.029 ********** 2026-03-16 13:15:07,969 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:07,975 p=32486 u=zuul n=ansible | TASK [repo_setup : Update the value of full_hash _repo_setup_json={{ _repo_setup_json | combine({'full_hash': _hash}, recursive=true) }}] *** 2026-03-16 13:15:07,975 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.018) 0:00:14.049 ********** 2026-03-16 13:15:07,975 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.018) 0:00:14.047 ********** 2026-03-16 13:15:07,988 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:07,993 p=32486 u=zuul n=ansible | TASK [repo_setup : Export hashes facts for further use cifmw_repo_setup_full_hash={{ _repo_setup_json['full_hash'] }}, cifmw_repo_setup_commit_hash={{ _repo_setup_json['commit_hash'] }}, cifmw_repo_setup_distro_hash={{ _repo_setup_json['distro_hash'] }}, cifmw_repo_setup_extended_hash={{ _repo_setup_json['extended_hash'] }}, cifmw_repo_setup_dlrn_api_url={{ _repo_setup_json['dlrn_api_url'] }}, cifmw_repo_setup_dlrn_url={{ _repo_setup_json['dlrn_url'] }}, cifmw_repo_setup_release={{ _repo_setup_json['release'] }}, cacheable=True] *** 2026-03-16 13:15:07,994 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.018) 0:00:14.067 ********** 2026-03-16 13:15:07,994 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:07 +0000 (0:00:00.018) 0:00:14.065 ********** 2026-03-16 13:15:08,017 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:08,022 p=32486 u=zuul n=ansible | TASK [repo_setup : Create download directory path={{ cifmw_repo_setup_rhos_release_path }}, state=directory, mode=0755] *** 2026-03-16 13:15:08,022 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.028) 0:00:14.095 ********** 2026-03-16 13:15:08,022 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.028) 0:00:14.094 ********** 2026-03-16 13:15:08,033 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,039 p=32486 u=zuul n=ansible | TASK [repo_setup : Print the URL to request msg={{ cifmw_repo_setup_rhos_release_rpm }}] *** 2026-03-16 13:15:08,039 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.112 ********** 2026-03-16 13:15:08,039 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.111 ********** 2026-03-16 13:15:08,051 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,056 p=32486 u=zuul n=ansible | TASK [Download the RPM name=krb_request] *************************************** 2026-03-16 13:15:08,056 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.129 ********** 2026-03-16 13:15:08,056 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.128 ********** 2026-03-16 13:15:08,068 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,074 p=32486 u=zuul n=ansible | TASK [repo_setup : Install RHOS Release tool name={{ cifmw_repo_setup_rhos_release_rpm if cifmw_repo_setup_rhos_release_rpm is not url else cifmw_krb_request_out.path }}, state=present, disable_gpg_check={{ cifmw_repo_setup_rhos_release_gpg_check | bool }}] *** 2026-03-16 13:15:08,074 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.147 ********** 2026-03-16 13:15:08,074 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.146 ********** 2026-03-16 13:15:08,085 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,090 p=32486 u=zuul n=ansible | TASK [repo_setup : Get rhos-release tool version _raw_params=rhos-release --version] *** 2026-03-16 13:15:08,090 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.016) 0:00:14.164 ********** 2026-03-16 13:15:08,090 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.016) 0:00:14.162 ********** 2026-03-16 13:15:08,102 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,107 p=32486 u=zuul n=ansible | TASK [repo_setup : Print rhos-release tool version msg={{ rr_version.stdout }}] *** 2026-03-16 13:15:08,107 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.016) 0:00:14.181 ********** 2026-03-16 13:15:08,107 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.016) 0:00:14.179 ********** 2026-03-16 13:15:08,118 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,125 p=32486 u=zuul n=ansible | TASK [repo_setup : Generate repos using rhos-release {{ cifmw_repo_setup_rhos_release_args }} _raw_params=rhos-release {{ cifmw_repo_setup_rhos_release_args }} \ -t {{ cifmw_repo_setup_output }}] *** 2026-03-16 13:15:08,125 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.198 ********** 2026-03-16 13:15:08,125 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.017) 0:00:14.197 ********** 2026-03-16 13:15:08,135 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,141 p=32486 u=zuul n=ansible | TASK [repo_setup : Check for /etc/ci/mirror_info.sh path=/etc/ci/mirror_info.sh] *** 2026-03-16 13:15:08,141 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.016) 0:00:14.214 ********** 2026-03-16 13:15:08,141 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.016) 0:00:14.213 ********** 2026-03-16 13:15:08,289 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:08,295 p=32486 u=zuul n=ansible | TASK [repo_setup : Use RDO proxy mirrors chdir={{ cifmw_repo_setup_output }}, _raw_params=set -o pipefail source /etc/ci/mirror_info.sh sed -i -e "s|https://trunk.rdoproject.org|$NODEPOOL_RDO_PROXY|g" *.repo ] *** 2026-03-16 13:15:08,295 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.154) 0:00:14.369 ********** 2026-03-16 13:15:08,295 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.154) 0:00:14.367 ********** 2026-03-16 13:15:08,465 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:08,471 p=32486 u=zuul n=ansible | TASK [repo_setup : Use RDO CentOS mirrors (remove CentOS 10 conditional when Nodepool mirrors exist) chdir={{ cifmw_repo_setup_output }}, _raw_params=set -o pipefail source /etc/ci/mirror_info.sh sed -i -e "s|http://mirror.stream.centos.org|$NODEPOOL_CENTOS_MIRROR|g" *.repo ] *** 2026-03-16 13:15:08,471 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.175) 0:00:14.544 ********** 2026-03-16 13:15:08,471 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.175) 0:00:14.543 ********** 2026-03-16 13:15:08,643 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:08,649 p=32486 u=zuul n=ansible | TASK [repo_setup : Check for gating.repo file on content provider url=http://{{ content_provider_registry_ip }}:8766/gating.repo] *** 2026-03-16 13:15:08,649 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.177) 0:00:14.722 ********** 2026-03-16 13:15:08,649 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.177) 0:00:14.721 ********** 2026-03-16 13:15:08,665 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,671 p=32486 u=zuul n=ansible | TASK [repo_setup : Populate gating repo from content provider ip content=[gating-repo] baseurl=http://{{ content_provider_registry_ip }}:8766/ enabled=1 gpgcheck=0 priority=1 , dest={{ cifmw_repo_setup_output }}/gating.repo, mode=0644] *** 2026-03-16 13:15:08,671 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.022) 0:00:14.744 ********** 2026-03-16 13:15:08,671 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.022) 0:00:14.743 ********** 2026-03-16 13:15:08,692 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,697 p=32486 u=zuul n=ansible | TASK [repo_setup : Check for DLRN repo at the destination path={{ cifmw_repo_setup_output }}/delorean.repo] *** 2026-03-16 13:15:08,697 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.026) 0:00:14.771 ********** 2026-03-16 13:15:08,698 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.026) 0:00:14.769 ********** 2026-03-16 13:15:08,718 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,724 p=32486 u=zuul n=ansible | TASK [repo_setup : Lower the priority of DLRN repos to allow installation from gating repo path={{ cifmw_repo_setup_output }}/delorean.repo, regexp=priority=1, replace=priority=20] *** 2026-03-16 13:15:08,724 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.026) 0:00:14.797 ********** 2026-03-16 13:15:08,724 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.026) 0:00:14.796 ********** 2026-03-16 13:15:08,744 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,749 p=32486 u=zuul n=ansible | TASK [repo_setup : Check for DLRN component repo path={{ cifmw_repo_setup_output }}/{{ _comp_repo }}] *** 2026-03-16 13:15:08,749 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.025) 0:00:14.823 ********** 2026-03-16 13:15:08,749 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.025) 0:00:14.821 ********** 2026-03-16 13:15:08,769 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,775 p=32486 u=zuul n=ansible | TASK [repo_setup : Lower the priority of component repos to allow installation from gating repo path={{ cifmw_repo_setup_output }}/{{ _comp_repo }}, regexp=priority=1, replace=priority=2] *** 2026-03-16 13:15:08,775 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.025) 0:00:14.848 ********** 2026-03-16 13:15:08,775 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.025) 0:00:14.847 ********** 2026-03-16 13:15:08,795 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:08,801 p=32486 u=zuul n=ansible | TASK [repo_setup : Find existing repos from /etc/yum.repos.d directory paths=/etc/yum.repos.d/, patterns=*.repo, recurse=False] *** 2026-03-16 13:15:08,801 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.025) 0:00:14.874 ********** 2026-03-16 13:15:08,801 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:08 +0000 (0:00:00.025) 0:00:14.873 ********** 2026-03-16 13:15:09,022 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:09,028 p=32486 u=zuul n=ansible | TASK [repo_setup : Remove existing repos from /etc/yum.repos.d directory path={{ item }}, state=absent] *** 2026-03-16 13:15:09,028 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.226) 0:00:15.101 ********** 2026-03-16 13:15:09,028 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.227) 0:00:15.100 ********** 2026-03-16 13:15:09,212 p=32486 u=zuul n=ansible | changed: [localhost] => (item=/etc/yum.repos.d/centos-addons.repo) 2026-03-16 13:15:09,363 p=32486 u=zuul n=ansible | changed: [localhost] => (item=/etc/yum.repos.d/centos.repo) 2026-03-16 13:15:09,370 p=32486 u=zuul n=ansible | TASK [repo_setup : Cleanup existing metadata _raw_params=dnf clean metadata] *** 2026-03-16 13:15:09,370 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.342) 0:00:15.443 ********** 2026-03-16 13:15:09,370 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.342) 0:00:15.442 ********** 2026-03-16 13:15:09,726 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:09,732 p=32486 u=zuul n=ansible | TASK [repo_setup : Copy generated repos to /etc/yum.repos.d directory mode=0755, remote_src=True, src={{ cifmw_repo_setup_output }}/, dest=/etc/yum.repos.d] *** 2026-03-16 13:15:09,732 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.361) 0:00:15.805 ********** 2026-03-16 13:15:09,732 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.361) 0:00:15.804 ********** 2026-03-16 13:15:09,938 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:09,949 p=32486 u=zuul n=ansible | TASK [ci_setup : Gather variables for each operating system _raw_params={{ item }}] *** 2026-03-16 13:15:09,949 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.217) 0:00:16.022 ********** 2026-03-16 13:15:09,950 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.217) 0:00:16.021 ********** 2026-03-16 13:15:09,978 p=32486 u=zuul n=ansible | ok: [localhost] => (item=/home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/ci_setup/vars/redhat.yml) 2026-03-16 13:15:09,984 p=32486 u=zuul n=ansible | TASK [ci_setup : List packages to install var=cifmw_ci_setup_packages] ********* 2026-03-16 13:15:09,984 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.034) 0:00:16.057 ********** 2026-03-16 13:15:09,984 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:09 +0000 (0:00:00.034) 0:00:16.056 ********** 2026-03-16 13:15:09,997 p=32486 u=zuul n=ansible | ok: [localhost] => cifmw_ci_setup_packages: - bash-completion - ca-certificates - git-core - make - tar - tmux - python3-pip 2026-03-16 13:15:10,003 p=32486 u=zuul n=ansible | TASK [ci_setup : Install needed packages name={{ cifmw_ci_setup_packages }}, state=latest] *** 2026-03-16 13:15:10,003 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:10 +0000 (0:00:00.018) 0:00:16.076 ********** 2026-03-16 13:15:10,003 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:10 +0000 (0:00:00.018) 0:00:16.074 ********** 2026-03-16 13:15:36,006 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:36,012 p=32486 u=zuul n=ansible | TASK [ci_setup : Gather version of openshift client _raw_params=oc version --client -o yaml] *** 2026-03-16 13:15:36,012 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:36 +0000 (0:00:26.009) 0:00:42.085 ********** 2026-03-16 13:15:36,012 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:36 +0000 (0:00:26.009) 0:00:42.084 ********** 2026-03-16 13:15:36,159 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:36,165 p=32486 u=zuul n=ansible | TASK [ci_setup : Ensure openshift client install path is present path={{ cifmw_ci_setup_oc_install_path }}, state=directory, mode=0755] *** 2026-03-16 13:15:36,165 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:36 +0000 (0:00:00.153) 0:00:42.239 ********** 2026-03-16 13:15:36,165 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:36 +0000 (0:00:00.153) 0:00:42.237 ********** 2026-03-16 13:15:36,323 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:36,329 p=32486 u=zuul n=ansible | TASK [ci_setup : Install openshift client src={{ cifmw_ci_setup_openshift_client_download_uri }}/{{ cifmw_ci_setup_openshift_client_version }}/openshift-client-linux.tar.gz, dest={{ cifmw_ci_setup_oc_install_path }}, remote_src=True, mode=0755, creates={{ cifmw_ci_setup_oc_install_path }}/oc] *** 2026-03-16 13:15:36,329 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:36 +0000 (0:00:00.163) 0:00:42.402 ********** 2026-03-16 13:15:36,329 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:36 +0000 (0:00:00.163) 0:00:42.400 ********** 2026-03-16 13:15:42,417 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:42,423 p=32486 u=zuul n=ansible | TASK [ci_setup : Add the OC path to cifmw_path if needed cifmw_path={{ cifmw_ci_setup_oc_install_path }}:{{ ansible_env.PATH }}, cacheable=True] *** 2026-03-16 13:15:42,423 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:06.094) 0:00:48.496 ********** 2026-03-16 13:15:42,423 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:06.094) 0:00:48.495 ********** 2026-03-16 13:15:42,443 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:42,448 p=32486 u=zuul n=ansible | TASK [ci_setup : Create completion file] *************************************** 2026-03-16 13:15:42,448 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.025) 0:00:48.522 ********** 2026-03-16 13:15:42,448 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.025) 0:00:48.520 ********** 2026-03-16 13:15:42,693 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:42,698 p=32486 u=zuul n=ansible | TASK [ci_setup : Source completion from within .bashrc create=True, mode=0644, path={{ ansible_user_dir }}/.bashrc, block=if [ -f ~/.oc_completion ]; then source ~/.oc_completion fi] *** 2026-03-16 13:15:42,698 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.250) 0:00:48.772 ********** 2026-03-16 13:15:42,699 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.250) 0:00:48.770 ********** 2026-03-16 13:15:42,936 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:42,941 p=32486 u=zuul n=ansible | TASK [ci_setup : Check rhsm status _raw_params=subscription-manager status] **** 2026-03-16 13:15:42,941 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.242) 0:00:49.014 ********** 2026-03-16 13:15:42,941 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.242) 0:00:49.013 ********** 2026-03-16 13:15:42,953 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:42,958 p=32486 u=zuul n=ansible | TASK [ci_setup : Gather the repos to be enabled _repos={{ cifmw_ci_setup_rhel_rhsm_default_repos + (cifmw_ci_setup_rhel_rhsm_extra_repos | default([])) }}] *** 2026-03-16 13:15:42,958 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.017) 0:00:49.032 ********** 2026-03-16 13:15:42,958 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.017) 0:00:49.030 ********** 2026-03-16 13:15:42,970 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:42,975 p=32486 u=zuul n=ansible | TASK [ci_setup : Enabling the required repositories. name={{ item }}, state={{ rhsm_repo_state | default('enabled') }}] *** 2026-03-16 13:15:42,975 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.016) 0:00:49.048 ********** 2026-03-16 13:15:42,975 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.016) 0:00:49.047 ********** 2026-03-16 13:15:42,986 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:42,992 p=32486 u=zuul n=ansible | TASK [ci_setup : Get current /etc/redhat-release _raw_params=cat /etc/redhat-release] *** 2026-03-16 13:15:42,992 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.016) 0:00:49.065 ********** 2026-03-16 13:15:42,992 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:42 +0000 (0:00:00.016) 0:00:49.064 ********** 2026-03-16 13:15:43,003 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:43,008 p=32486 u=zuul n=ansible | TASK [ci_setup : Print current /etc/redhat-release msg={{ _current_rh_release.stdout }}] *** 2026-03-16 13:15:43,008 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.016) 0:00:49.082 ********** 2026-03-16 13:15:43,009 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.016) 0:00:49.080 ********** 2026-03-16 13:15:43,019 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:43,025 p=32486 u=zuul n=ansible | TASK [ci_setup : Ensure the repos are enabled in the system using yum name={{ item.name }}, baseurl={{ item.baseurl }}, description={{ item.description | default(item.name) }}, gpgcheck={{ item.gpgcheck | default(false) }}, enabled=True, state={{ yum_repo_state | default('present') }}] *** 2026-03-16 13:15:43,025 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.016) 0:00:49.098 ********** 2026-03-16 13:15:43,025 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.016) 0:00:49.097 ********** 2026-03-16 13:15:43,040 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:43,046 p=32486 u=zuul n=ansible | TASK [ci_setup : Manage directories path={{ item }}, state={{ directory_state }}, mode=0755, owner={{ ansible_user_id }}, group={{ ansible_user_id }}] *** 2026-03-16 13:15:43,046 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.021) 0:00:49.119 ********** 2026-03-16 13:15:43,046 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.021) 0:00:49.118 ********** 2026-03-16 13:15:43,241 p=32486 u=zuul n=ansible | changed: [localhost] => (item=/home/zuul/ci-framework-data/artifacts/manifests/openstack/cr) 2026-03-16 13:15:43,396 p=32486 u=zuul n=ansible | changed: [localhost] => (item=/home/zuul/ci-framework-data/logs) 2026-03-16 13:15:43,553 p=32486 u=zuul n=ansible | ok: [localhost] => (item=/home/zuul/ci-framework-data/tmp) 2026-03-16 13:15:43,709 p=32486 u=zuul n=ansible | changed: [localhost] => (item=/home/zuul/ci-framework-data/volumes) 2026-03-16 13:15:43,859 p=32486 u=zuul n=ansible | ok: [localhost] => (item=/home/zuul/ci-framework-data/artifacts/parameters) 2026-03-16 13:15:43,870 p=32486 u=zuul n=ansible | TASK [Prepare install_yamls make targets name=install_yamls, apply={'tags': ['bootstrap']}] *** 2026-03-16 13:15:43,870 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.823) 0:00:49.943 ********** 2026-03-16 13:15:43,870 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.823) 0:00:49.942 ********** 2026-03-16 13:15:43,978 p=32486 u=zuul n=ansible | TASK [install_yamls : Ensure directories exist path={{ item }}, state=directory, mode=0755] *** 2026-03-16 13:15:43,978 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.107) 0:00:50.051 ********** 2026-03-16 13:15:43,978 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:43 +0000 (0:00:00.107) 0:00:50.050 ********** 2026-03-16 13:15:44,137 p=32486 u=zuul n=ansible | ok: [localhost] => (item=/home/zuul/ci-framework-data/artifacts) 2026-03-16 13:15:44,274 p=32486 u=zuul n=ansible | changed: [localhost] => (item=/home/zuul/ci-framework-data/artifacts/roles/install_yamls_makes/tasks) 2026-03-16 13:15:44,411 p=32486 u=zuul n=ansible | ok: [localhost] => (item=/home/zuul/ci-framework-data/artifacts/parameters) 2026-03-16 13:15:44,417 p=32486 u=zuul n=ansible | TASK [Create variables with local repos based on Zuul items name=install_yamls, tasks_from=zuul_set_operators_repo.yml] *** 2026-03-16 13:15:44,417 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.439) 0:00:50.490 ********** 2026-03-16 13:15:44,417 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.439) 0:00:50.489 ********** 2026-03-16 13:15:44,464 p=32486 u=zuul n=ansible | TASK [install_yamls : Set fact with local repos based on Zuul items cifmw_install_yamls_operators_repo={{ cifmw_install_yamls_operators_repo | default({}) | combine(_repo_operator_info | items2dict) }}] *** 2026-03-16 13:15:44,464 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.046) 0:00:50.537 ********** 2026-03-16 13:15:44,464 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.046) 0:00:50.536 ********** 2026-03-16 13:15:44,487 p=32486 u=zuul n=ansible | skipping: [localhost] => (item={'branch': 'main', 'change': '3762', 'change_url': 'https://github.com/openstack-k8s-operators/ci-framework/pull/3762', 'commit_id': 'ed1459308f1be1461735f3a83194ee0409942b2b', 'patchset': 'ed1459308f1be1461735f3a83194ee0409942b2b', 'project': {'canonical_hostname': 'github.com', 'canonical_name': 'github.com/openstack-k8s-operators/ci-framework', 'name': 'openstack-k8s-operators/ci-framework', 'short_name': 'ci-framework', 'src_dir': 'src/github.com/openstack-k8s-operators/ci-framework'}, 'topic': None}) 2026-03-16 13:15:44,489 p=32486 u=zuul n=ansible | skipping: [localhost] => (item={'branch': 'main', 'change': '3768', 'change_url': 'https://github.com/openstack-k8s-operators/ci-framework/pull/3768', 'commit_id': '8933b7e917cb45bba3ac70a793e7699f681c52e9', 'patchset': '8933b7e917cb45bba3ac70a793e7699f681c52e9', 'project': {'canonical_hostname': 'github.com', 'canonical_name': 'github.com/openstack-k8s-operators/ci-framework', 'name': 'openstack-k8s-operators/ci-framework', 'short_name': 'ci-framework', 'src_dir': 'src/github.com/openstack-k8s-operators/ci-framework'}, 'topic': None}) 2026-03-16 13:15:44,491 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:44,497 p=32486 u=zuul n=ansible | TASK [install_yamls : Print helpful data for debugging msg=_repo_operator_name: {{ _repo_operator_name }} _repo_operator_info: {{ _repo_operator_info }} cifmw_install_yamls_operators_repo: {{ cifmw_install_yamls_operators_repo }} ] *** 2026-03-16 13:15:44,497 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.032) 0:00:50.570 ********** 2026-03-16 13:15:44,497 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.032) 0:00:50.569 ********** 2026-03-16 13:15:44,518 p=32486 u=zuul n=ansible | skipping: [localhost] => (item={'branch': 'main', 'change': '3762', 'change_url': 'https://github.com/openstack-k8s-operators/ci-framework/pull/3762', 'commit_id': 'ed1459308f1be1461735f3a83194ee0409942b2b', 'patchset': 'ed1459308f1be1461735f3a83194ee0409942b2b', 'project': {'canonical_hostname': 'github.com', 'canonical_name': 'github.com/openstack-k8s-operators/ci-framework', 'name': 'openstack-k8s-operators/ci-framework', 'short_name': 'ci-framework', 'src_dir': 'src/github.com/openstack-k8s-operators/ci-framework'}, 'topic': None}) 2026-03-16 13:15:44,521 p=32486 u=zuul n=ansible | skipping: [localhost] => (item={'branch': 'main', 'change': '3768', 'change_url': 'https://github.com/openstack-k8s-operators/ci-framework/pull/3768', 'commit_id': '8933b7e917cb45bba3ac70a793e7699f681c52e9', 'patchset': '8933b7e917cb45bba3ac70a793e7699f681c52e9', 'project': {'canonical_hostname': 'github.com', 'canonical_name': 'github.com/openstack-k8s-operators/ci-framework', 'name': 'openstack-k8s-operators/ci-framework', 'short_name': 'ci-framework', 'src_dir': 'src/github.com/openstack-k8s-operators/ci-framework'}, 'topic': None}) 2026-03-16 13:15:44,523 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:44,532 p=32486 u=zuul n=ansible | TASK [Customize install_yamls devsetup vars if needed name=install_yamls, tasks_from=customize_devsetup_vars.yml] *** 2026-03-16 13:15:44,532 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.035) 0:00:50.605 ********** 2026-03-16 13:15:44,532 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.035) 0:00:50.604 ********** 2026-03-16 13:15:44,567 p=32486 u=zuul n=ansible | TASK [install_yamls : Update opm_version in install_yamls devsetup/vars/default.yaml path={{ cifmw_install_yamls_repo }}/devsetup/vars/default.yaml, regexp=^opm_version:, line=opm_version: {{ cifmw_install_yamls_opm_version }}, state=present] *** 2026-03-16 13:15:44,567 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.035) 0:00:50.640 ********** 2026-03-16 13:15:44,567 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.035) 0:00:50.639 ********** 2026-03-16 13:15:44,584 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:44,589 p=32486 u=zuul n=ansible | TASK [install_yamls : Update sdk_version in install_yamls devsetup/vars/default.yaml path={{ cifmw_install_yamls_repo }}/devsetup/vars/default.yaml, regexp=^sdk_version:, line=sdk_version: {{ cifmw_install_yamls_sdk_version }}, state=present] *** 2026-03-16 13:15:44,589 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.022) 0:00:50.663 ********** 2026-03-16 13:15:44,590 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.022) 0:00:50.661 ********** 2026-03-16 13:15:44,606 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:44,611 p=32486 u=zuul n=ansible | TASK [install_yamls : Update go_version in install_yamls devsetup/vars/default.yaml path={{ cifmw_install_yamls_repo }}/devsetup/vars/default.yaml, regexp=^go_version:, line=go_version: {{ cifmw_install_yamls_go_version }}, state=present] *** 2026-03-16 13:15:44,612 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.022) 0:00:50.685 ********** 2026-03-16 13:15:44,612 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.022) 0:00:50.683 ********** 2026-03-16 13:15:44,628 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:44,633 p=32486 u=zuul n=ansible | TASK [install_yamls : Update kustomize_version in install_yamls devsetup/vars/default.yaml path={{ cifmw_install_yamls_repo }}/devsetup/vars/default.yaml, regexp=^kustomize_version:, line=kustomize_version: {{ cifmw_install_yamls_kustomize_version }}, state=present] *** 2026-03-16 13:15:44,633 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.021) 0:00:50.706 ********** 2026-03-16 13:15:44,633 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.021) 0:00:50.705 ********** 2026-03-16 13:15:44,649 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:44,660 p=32486 u=zuul n=ansible | TASK [install_yamls : Compute the cifmw_install_yamls_vars final value _install_yamls_override_vars={{ _install_yamls_override_vars | default({}) | combine(item, recursive=True) }}] *** 2026-03-16 13:15:44,660 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.026) 0:00:50.733 ********** 2026-03-16 13:15:44,660 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.026) 0:00:50.732 ********** 2026-03-16 13:15:44,722 p=32486 u=zuul n=ansible | ok: [localhost] => (item={'BMO_SETUP': False}) 2026-03-16 13:15:44,728 p=32486 u=zuul n=ansible | TASK [install_yamls : Set environment override cifmw_install_yamls_environment fact cifmw_install_yamls_environment={{ _install_yamls_override_vars.keys() | map('upper') | zip(_install_yamls_override_vars.values()) | items2dict(key_name=0, value_name=1) | combine({ 'OUT': cifmw_install_yamls_manifests_dir, 'OUTPUT_DIR': cifmw_install_yamls_edpm_dir, 'CHECKOUT_FROM_OPENSTACK_REF': cifmw_install_yamls_checkout_openstack_ref, 'OPENSTACK_K8S_BRANCH': (zuul is defined and not zuul.branch |regex_search('master|antelope|rhos')) | ternary(zuul.branch, 'main') }) | combine(install_yamls_operators_repos) }}, cacheable=True] *** 2026-03-16 13:15:44,728 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.067) 0:00:50.801 ********** 2026-03-16 13:15:44,728 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.067) 0:00:50.800 ********** 2026-03-16 13:15:44,761 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:44,766 p=32486 u=zuul n=ansible | TASK [install_yamls : Get environment structure base_path={{ cifmw_install_yamls_repo }}] *** 2026-03-16 13:15:44,766 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.038) 0:00:50.839 ********** 2026-03-16 13:15:44,766 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:44 +0000 (0:00:00.038) 0:00:50.838 ********** 2026-03-16 13:15:45,169 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:45,176 p=32486 u=zuul n=ansible | TASK [install_yamls : Ensure Output directory exists path={{ cifmw_install_yamls_out_dir }}, state=directory, mode=0755] *** 2026-03-16 13:15:45,176 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.409) 0:00:51.249 ********** 2026-03-16 13:15:45,176 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.409) 0:00:51.248 ********** 2026-03-16 13:15:45,335 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:45,341 p=32486 u=zuul n=ansible | TASK [install_yamls : Ensure user cifmw_install_yamls_vars contains existing Makefile variables that=_cifmw_install_yamls_unmatched_vars | length == 0, msg=cifmw_install_yamls_vars contains a variable that is not defined in install_yamls Makefile nor cifmw_install_yamls_whitelisted_vars: {{ _cifmw_install_yamls_unmatched_vars | join(', ')}}, quiet=True] *** 2026-03-16 13:15:45,341 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.165) 0:00:51.414 ********** 2026-03-16 13:15:45,341 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.165) 0:00:51.413 ********** 2026-03-16 13:15:45,370 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:45,380 p=32486 u=zuul n=ansible | TASK [install_yamls : Generate /home/zuul/ci-framework-data/artifacts/install_yamls.sh dest={{ cifmw_install_yamls_out_dir }}/{{ cifmw_install_yamls_envfile }}, content={% for k,v in cifmw_install_yamls_environment.items() %} export {{ k }}={{ v }} {% endfor %}, mode=0644] *** 2026-03-16 13:15:45,380 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.038) 0:00:51.453 ********** 2026-03-16 13:15:45,380 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.038) 0:00:51.452 ********** 2026-03-16 13:15:45,705 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:45,711 p=32486 u=zuul n=ansible | TASK [install_yamls : Set install_yamls default values cifmw_install_yamls_defaults={{ get_makefiles_env_output.makefiles_values | combine(cifmw_install_yamls_environment) }}, cacheable=True] *** 2026-03-16 13:15:45,711 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.331) 0:00:51.784 ********** 2026-03-16 13:15:45,711 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.331) 0:00:51.783 ********** 2026-03-16 13:15:45,731 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:45,738 p=32486 u=zuul n=ansible | TASK [install_yamls : Show the env structure var=cifmw_install_yamls_environment] *** 2026-03-16 13:15:45,738 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.026) 0:00:51.811 ********** 2026-03-16 13:15:45,738 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.026) 0:00:51.810 ********** 2026-03-16 13:15:45,753 p=32486 u=zuul n=ansible | ok: [localhost] => cifmw_install_yamls_environment: BMO_SETUP: false CHECKOUT_FROM_OPENSTACK_REF: 'true' OPENSTACK_K8S_BRANCH: main OUT: /home/zuul/ci-framework-data/artifacts/manifests OUTPUT_DIR: /home/zuul/ci-framework-data/artifacts/edpm 2026-03-16 13:15:45,759 p=32486 u=zuul n=ansible | TASK [install_yamls : Show the env structure defaults var=cifmw_install_yamls_defaults] *** 2026-03-16 13:15:45,759 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.021) 0:00:51.832 ********** 2026-03-16 13:15:45,759 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.021) 0:00:51.831 ********** 2026-03-16 13:15:45,784 p=32486 u=zuul n=ansible | ok: [localhost] => cifmw_install_yamls_defaults: ADOPTED_EXTERNAL_NETWORK: 172.21.1.0/24 ADOPTED_INTERNALAPI_NETWORK: 172.17.1.0/24 ADOPTED_STORAGEMGMT_NETWORK: 172.20.1.0/24 ADOPTED_STORAGE_NETWORK: 172.18.1.0/24 ADOPTED_TENANT_NETWORK: 172.9.1.0/24 BARBICAN: config/samples/barbican_v1beta1_barbican.yaml BARBICAN_BRANCH: main BARBICAN_COMMIT_HASH: '' BARBICAN_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/barbican-operator/config/samples/barbican_v1beta1_barbican.yaml BARBICAN_DEPL_IMG: unused BARBICAN_IMG: quay.io/openstack-k8s-operators/barbican-operator-index:latest BARBICAN_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/barbican-operator/kuttl-test.yaml BARBICAN_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/barbican-operator/test/kuttl/tests BARBICAN_KUTTL_NAMESPACE: barbican-kuttl-tests BARBICAN_REPO: https://github.com/openstack-k8s-operators/barbican-operator.git BARBICAN_SERVICE_ENABLED: 'true' BARBICAN_SIMPLE_CRYPTO_ENCRYPTION_KEY: sEFmdFjDUqRM2VemYslV5yGNWjokioJXsg8Nrlc3drU= BAREMETAL_BRANCH: main BAREMETAL_COMMIT_HASH: '' BAREMETAL_IMG: quay.io/openstack-k8s-operators/openstack-baremetal-operator-index:latest BAREMETAL_OS_CONTAINER_IMG: '' BAREMETAL_OS_IMG: '' BAREMETAL_OS_IMG_TYPE: '' BAREMETAL_REPO: https://github.com/openstack-k8s-operators/openstack-baremetal-operator.git BAREMETAL_TIMEOUT: 20m BASH_IMG: quay.io/openstack-k8s-operators/bash:latest BGP_ASN: '64999' BGP_LEAF_1: 100.65.4.1 BGP_LEAF_2: 100.64.4.1 BGP_OVN_ROUTING: 'false' BGP_PEER_ASN: '64999' BGP_SOURCE_IP: 172.30.4.2 BGP_SOURCE_IP6: f00d:f00d:f00d:f00d:f00d:f00d:f00d:42 BMAAS_BRIDGE_IPV4_PREFIX: 172.20.1.2/24 BMAAS_BRIDGE_IPV6_PREFIX: fd00:bbbb::2/64 BMAAS_INSTANCE_DISK_SIZE: '20' BMAAS_INSTANCE_MEMORY: '4096' BMAAS_INSTANCE_NAME_PREFIX: crc-bmaas BMAAS_INSTANCE_NET_MODEL: virtio BMAAS_INSTANCE_OS_VARIANT: centos-stream9 BMAAS_INSTANCE_VCPUS: '2' BMAAS_INSTANCE_VIRT_TYPE: kvm BMAAS_IPV4: 'true' BMAAS_IPV6: 'false' BMAAS_LIBVIRT_USER: sushyemu BMAAS_METALLB_ADDRESS_POOL: 172.20.1.64/26 BMAAS_METALLB_POOL_NAME: baremetal BMAAS_NETWORK_IPV4_PREFIX: 172.20.1.1/24 BMAAS_NETWORK_IPV6_PREFIX: fd00:bbbb::1/64 BMAAS_NETWORK_NAME: crc-bmaas BMAAS_NODE_COUNT: '1' BMAAS_OCP_INSTANCE_NAME: crc BMAAS_REDFISH_PASSWORD: password BMAAS_REDFISH_USERNAME: admin BMAAS_ROUTE_LIBVIRT_NETWORKS: crc-bmaas,crc,default BMAAS_SUSHY_EMULATOR_DRIVER: libvirt BMAAS_SUSHY_EMULATOR_IMAGE: quay.io/metal3-io/sushy-tools:latest BMAAS_SUSHY_EMULATOR_NAMESPACE: sushy-emulator BMAAS_SUSHY_EMULATOR_OS_CLIENT_CONFIG_FILE: /etc/openstack/clouds.yaml BMAAS_SUSHY_EMULATOR_OS_CLOUD: openstack BMH_NAMESPACE: openstack BMO_BRANCH: release-0.9 BMO_CLEANUP: 'true' BMO_COMMIT_HASH: '' BMO_IPA_BASEURI: https://tarballs.opendev.org/openstack/ironic-python-agent/dib BMO_IPA_BRANCH: stable/2024.1 BMO_IPA_FLAVOR: centos9 BMO_IPA_INSECURE: 'false' BMO_IRONIC_HOST: 192.168.122.10 BMO_PROVISIONING_INTERFACE: '' BMO_REPO: https://github.com/metal3-io/baremetal-operator BMO_SETUP: false BMO_SETUP_ROUTE_REPLACE: 'true' BM_CTLPLANE_INTERFACE: enp1s0 BM_INSTANCE_MEMORY: '8192' BM_INSTANCE_NAME_PREFIX: edpm-compute-baremetal BM_INSTANCE_NAME_SUFFIX: '0' BM_NETWORK_NAME: default BM_NODE_COUNT: '1' BM_ROOT_PASSWORD: '' BM_ROOT_PASSWORD_SECRET: '' CEILOMETER_CENTRAL_DEPL_IMG: unused CEILOMETER_NOTIFICATION_DEPL_IMG: unused CEPH_BRANCH: release-1.15 CEPH_CLIENT: /home/zuul/ci-framework-data/artifacts/manifests/operator/rook/deploy/examples/toolbox.yaml CEPH_COMMON: /home/zuul/ci-framework-data/artifacts/manifests/operator/rook/deploy/examples/common.yaml CEPH_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/rook/deploy/examples/cluster-test.yaml CEPH_CRDS: /home/zuul/ci-framework-data/artifacts/manifests/operator/rook/deploy/examples/crds.yaml CEPH_IMG: quay.io/ceph/demo:latest-squid CEPH_OP: /home/zuul/ci-framework-data/artifacts/manifests/operator/rook/deploy/examples/operator-openshift.yaml CEPH_REPO: https://github.com/rook/rook.git CERTMANAGER_TIMEOUT: 300s CHECKOUT_FROM_OPENSTACK_REF: 'true' CINDER: config/samples/cinder_v1beta1_cinder.yaml CINDERAPI_DEPL_IMG: unused CINDERBKP_DEPL_IMG: unused CINDERSCH_DEPL_IMG: unused CINDERVOL_DEPL_IMG: unused CINDER_BRANCH: main CINDER_COMMIT_HASH: '' CINDER_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/cinder-operator/config/samples/cinder_v1beta1_cinder.yaml CINDER_IMG: quay.io/openstack-k8s-operators/cinder-operator-index:latest CINDER_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/cinder-operator/kuttl-test.yaml CINDER_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/cinder-operator/test/kuttl/tests CINDER_KUTTL_NAMESPACE: cinder-kuttl-tests CINDER_REPO: https://github.com/openstack-k8s-operators/cinder-operator.git CLEANUP_DIR_CMD: rm -Rf CRC_BGP_NIC_1_MAC: '52:54:00:11:11:11' CRC_BGP_NIC_2_MAC: '52:54:00:11:11:12' CRC_HTTPS_PROXY: '' CRC_HTTP_PROXY: '' CRC_STORAGE_NAMESPACE: crc-storage CRC_STORAGE_RETRIES: '3' CRC_URL: '''https://developers.redhat.com/content-gateway/rest/mirror/pub/openshift-v4/clients/crc/latest/crc-linux-amd64.tar.xz''' CRC_VERSION: latest DATAPLANE_ANSIBLE_SECRET: dataplane-ansible-ssh-private-key-secret DATAPLANE_ANSIBLE_USER: '' DATAPLANE_COMPUTE_IP: 192.168.122.100 DATAPLANE_CONTAINER_PREFIX: openstack DATAPLANE_CONTAINER_TAG: current-podified DATAPLANE_CUSTOM_SERVICE_RUNNER_IMG: quay.io/openstack-k8s-operators/openstack-ansibleee-runner:latest DATAPLANE_DEFAULT_GW: 192.168.122.1 DATAPLANE_EXTRA_NOVA_CONFIG_FILE: /dev/null DATAPLANE_GROWVOLS_ARGS: /=8GB /tmp=1GB /home=1GB /var=100% DATAPLANE_KUSTOMIZE_SCENARIO: preprovisioned DATAPLANE_NETWORKER_IP: 192.168.122.200 DATAPLANE_NETWORK_INTERFACE_NAME: eth0 DATAPLANE_NOVA_NFS_PATH: '' DATAPLANE_NTP_SERVER: pool.ntp.org DATAPLANE_PLAYBOOK: osp.edpm.download_cache DATAPLANE_REGISTRY_URL: quay.io/podified-antelope-centos9 DATAPLANE_RUNNER_IMG: '' DATAPLANE_SERVER_ROLE: compute DATAPLANE_SSHD_ALLOWED_RANGES: '[''192.168.122.0/24'']' DATAPLANE_TIMEOUT: 30m DATAPLANE_TLS_ENABLED: 'true' DATAPLANE_TOTAL_NETWORKER_NODES: '1' DATAPLANE_TOTAL_NODES: '1' DBSERVICE: galera DESIGNATE: config/samples/designate_v1beta1_designate.yaml DESIGNATE_BRANCH: main DESIGNATE_COMMIT_HASH: '' DESIGNATE_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/designate-operator/config/samples/designate_v1beta1_designate.yaml DESIGNATE_IMG: quay.io/openstack-k8s-operators/designate-operator-index:latest DESIGNATE_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/designate-operator/kuttl-test.yaml DESIGNATE_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/designate-operator/test/kuttl/tests DESIGNATE_KUTTL_NAMESPACE: designate-kuttl-tests DESIGNATE_REPO: https://github.com/openstack-k8s-operators/designate-operator.git DNSDATA: config/samples/network_v1beta1_dnsdata.yaml DNSDATA_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator/config/samples/network_v1beta1_dnsdata.yaml DNSMASQ: config/samples/network_v1beta1_dnsmasq.yaml DNSMASQ_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator/config/samples/network_v1beta1_dnsmasq.yaml DNS_DEPL_IMG: unused DNS_DOMAIN: localdomain DOWNLOAD_TOOLS_SELECTION: all EDPM_ATTACH_EXTNET: 'true' EDPM_COMPUTE_ADDITIONAL_HOST_ROUTES: '''[]''' EDPM_COMPUTE_ADDITIONAL_NETWORKS: '''[]''' EDPM_COMPUTE_CELLS: '1' EDPM_COMPUTE_CEPH_ENABLED: 'true' EDPM_COMPUTE_CEPH_NOVA: 'true' EDPM_COMPUTE_DHCP_AGENT_ENABLED: 'true' EDPM_COMPUTE_SRIOV_ENABLED: 'true' EDPM_COMPUTE_SUFFIX: '0' EDPM_CONFIGURE_DEFAULT_ROUTE: 'true' EDPM_CONFIGURE_HUGEPAGES: 'false' EDPM_CONFIGURE_NETWORKING: 'true' EDPM_FIRSTBOOT_EXTRA: /tmp/edpm-firstboot-extra EDPM_NETWORKER_SUFFIX: '0' EDPM_TOTAL_NETWORKERS: '1' EDPM_TOTAL_NODES: '1' GALERA_REPLICAS: '' GENERATE_SSH_KEYS: 'true' GIT_CLONE_OPTS: '' GLANCE: config/samples/glance_v1beta1_glance.yaml GLANCEAPI_DEPL_IMG: unused GLANCE_BRANCH: main GLANCE_COMMIT_HASH: '' GLANCE_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/glance-operator/config/samples/glance_v1beta1_glance.yaml GLANCE_IMG: quay.io/openstack-k8s-operators/glance-operator-index:latest GLANCE_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/glance-operator/kuttl-test.yaml GLANCE_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/glance-operator/test/kuttl/tests GLANCE_KUTTL_NAMESPACE: glance-kuttl-tests GLANCE_REPO: https://github.com/openstack-k8s-operators/glance-operator.git HEAT: config/samples/heat_v1beta1_heat.yaml HEATAPI_DEPL_IMG: unused HEATCFNAPI_DEPL_IMG: unused HEATENGINE_DEPL_IMG: unused HEAT_AUTH_ENCRYPTION_KEY: 767c3ed056cbaa3b9dfedb8c6f825bf0 HEAT_BRANCH: main HEAT_COMMIT_HASH: '' HEAT_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/heat-operator/config/samples/heat_v1beta1_heat.yaml HEAT_IMG: quay.io/openstack-k8s-operators/heat-operator-index:latest HEAT_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/heat-operator/kuttl-test.yaml HEAT_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/heat-operator/test/kuttl/tests HEAT_KUTTL_NAMESPACE: heat-kuttl-tests HEAT_REPO: https://github.com/openstack-k8s-operators/heat-operator.git HEAT_SERVICE_ENABLED: 'true' HORIZON: config/samples/horizon_v1beta1_horizon.yaml HORIZON_BRANCH: main HORIZON_COMMIT_HASH: '' HORIZON_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/horizon-operator/config/samples/horizon_v1beta1_horizon.yaml HORIZON_DEPL_IMG: unused HORIZON_IMG: quay.io/openstack-k8s-operators/horizon-operator-index:latest HORIZON_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/horizon-operator/kuttl-test.yaml HORIZON_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/horizon-operator/test/kuttl/tests HORIZON_KUTTL_NAMESPACE: horizon-kuttl-tests HORIZON_REPO: https://github.com/openstack-k8s-operators/horizon-operator.git INFRA_BRANCH: main INFRA_COMMIT_HASH: '' INFRA_IMG: quay.io/openstack-k8s-operators/infra-operator-index:latest INFRA_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator/kuttl-test.yaml INFRA_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator/test/kuttl/tests INFRA_KUTTL_NAMESPACE: infra-kuttl-tests INFRA_REPO: https://github.com/openstack-k8s-operators/infra-operator.git INSTALL_CERT_MANAGER: 'true' INSTALL_NMSTATE: true || false INSTALL_NNCP: true || false INTERNALAPI_HOST_ROUTES: '' IPV6_LAB_IPV4_NETWORK_IPADDRESS: 172.30.0.1/24 IPV6_LAB_IPV6_NETWORK_IPADDRESS: fd00:abcd:abcd:fc00::1/64 IPV6_LAB_LIBVIRT_STORAGE_POOL: default IPV6_LAB_MANAGE_FIREWALLD: 'true' IPV6_LAB_NAT64_HOST_IPV4: 172.30.0.2/24 IPV6_LAB_NAT64_HOST_IPV6: fd00:abcd:abcd:fc00::2/64 IPV6_LAB_NAT64_INSTANCE_NAME: nat64-router IPV6_LAB_NAT64_IPV6_NETWORK: fd00:abcd:abcd:fc00::/64 IPV6_LAB_NAT64_TAYGA_DYNAMIC_POOL: 192.168.255.0/24 IPV6_LAB_NAT64_TAYGA_IPV4: 192.168.255.1 IPV6_LAB_NAT64_TAYGA_IPV6: fd00:abcd:abcd:fc00::3 IPV6_LAB_NAT64_TAYGA_IPV6_PREFIX: fd00:abcd:abcd:fcff::/96 IPV6_LAB_NAT64_UPDATE_PACKAGES: 'false' IPV6_LAB_NETWORK_NAME: nat64 IPV6_LAB_SNO_CLUSTER_NETWORK: fd00:abcd:0::/48 IPV6_LAB_SNO_HOST_IP: fd00:abcd:abcd:fc00::11 IPV6_LAB_SNO_HOST_PREFIX: '64' IPV6_LAB_SNO_INSTANCE_NAME: sno IPV6_LAB_SNO_MACHINE_NETWORK: fd00:abcd:abcd:fc00::/64 IPV6_LAB_SNO_OCP_MIRROR_URL: https://mirror.openshift.com/pub/openshift-v4/clients/ocp IPV6_LAB_SNO_OCP_VERSION: latest-4.14 IPV6_LAB_SNO_SERVICE_NETWORK: fd00:abcd:abcd:fc03::/112 IPV6_LAB_SSH_PUB_KEY: /home/zuul/.ssh/id_rsa.pub IPV6_LAB_WORK_DIR: /home/zuul/.ipv6lab IRONIC: config/samples/ironic_v1beta1_ironic.yaml IRONICAPI_DEPL_IMG: unused IRONICCON_DEPL_IMG: unused IRONICINS_DEPL_IMG: unused IRONICNAG_DEPL_IMG: unused IRONICPXE_DEPL_IMG: unused IRONIC_BRANCH: main IRONIC_COMMIT_HASH: '' IRONIC_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/ironic-operator/config/samples/ironic_v1beta1_ironic.yaml IRONIC_IMAGE: quay.io/metal3-io/ironic IRONIC_IMAGE_TAG: release-24.1 IRONIC_IMG: quay.io/openstack-k8s-operators/ironic-operator-index:latest IRONIC_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/ironic-operator/kuttl-test.yaml IRONIC_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/ironic-operator/test/kuttl/tests IRONIC_KUTTL_NAMESPACE: ironic-kuttl-tests IRONIC_REPO: https://github.com/openstack-k8s-operators/ironic-operator.git KEYSTONEAPI: config/samples/keystone_v1beta1_keystoneapi.yaml KEYSTONEAPI_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/keystone-operator/config/samples/keystone_v1beta1_keystoneapi.yaml KEYSTONEAPI_DEPL_IMG: unused KEYSTONE_BRANCH: main KEYSTONE_COMMIT_HASH: '' KEYSTONE_FEDERATION_CLIENT_SECRET: COX8bmlKAWn56XCGMrKQJj7dgHNAOl6f KEYSTONE_FEDERATION_CRYPTO_PASSPHRASE: openstack KEYSTONE_IMG: quay.io/openstack-k8s-operators/keystone-operator-index:latest KEYSTONE_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/keystone-operator/kuttl-test.yaml KEYSTONE_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/keystone-operator/test/kuttl/tests KEYSTONE_KUTTL_NAMESPACE: keystone-kuttl-tests KEYSTONE_REPO: https://github.com/openstack-k8s-operators/keystone-operator.git KUBEADMIN_PWD: '12345678' LIBVIRT_SECRET: libvirt-secret LOKI_DEPLOY_MODE: openshift-network LOKI_DEPLOY_NAMESPACE: netobserv LOKI_DEPLOY_SIZE: 1x.demo LOKI_NAMESPACE: openshift-operators-redhat LOKI_OPERATOR_GROUP: openshift-operators-redhat-loki LOKI_SUBSCRIPTION: loki-operator LVMS_CR: '1' MANILA: config/samples/manila_v1beta1_manila.yaml MANILAAPI_DEPL_IMG: unused MANILASCH_DEPL_IMG: unused MANILASHARE_DEPL_IMG: unused MANILA_BRANCH: main MANILA_COMMIT_HASH: '' MANILA_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/manila-operator/config/samples/manila_v1beta1_manila.yaml MANILA_IMG: quay.io/openstack-k8s-operators/manila-operator-index:latest MANILA_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/manila-operator/kuttl-test.yaml MANILA_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/manila-operator/test/kuttl/tests MANILA_KUTTL_NAMESPACE: manila-kuttl-tests MANILA_REPO: https://github.com/openstack-k8s-operators/manila-operator.git MANILA_SERVICE_ENABLED: 'true' MARIADB: config/samples/mariadb_v1beta1_galera.yaml MARIADB_BRANCH: main MARIADB_CHAINSAW_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator/test/chainsaw/config.yaml MARIADB_CHAINSAW_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator/test/chainsaw/tests MARIADB_CHAINSAW_NAMESPACE: mariadb-chainsaw-tests MARIADB_COMMIT_HASH: '' MARIADB_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator/config/samples/mariadb_v1beta1_galera.yaml MARIADB_DEPL_IMG: unused MARIADB_IMG: quay.io/openstack-k8s-operators/mariadb-operator-index:latest MARIADB_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator/kuttl-test.yaml MARIADB_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator/test/kuttl/tests MARIADB_KUTTL_NAMESPACE: mariadb-kuttl-tests MARIADB_REPO: https://github.com/openstack-k8s-operators/mariadb-operator.git MEMCACHED: config/samples/memcached_v1beta1_memcached.yaml MEMCACHED_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator/config/samples/memcached_v1beta1_memcached.yaml MEMCACHED_DEPL_IMG: unused METADATA_SHARED_SECRET: '1234567842' METALLB_IPV6_POOL: fd00:aaaa::80-fd00:aaaa::90 METALLB_POOL: 192.168.122.80-192.168.122.90 MICROSHIFT: '0' MIRROR_INSECURE: 'true' MIRROR_NAMESPACE: openstack-mirror MIRROR_REGISTRY_HOST: default-route-openshift-image-registry.apps-crc.testing NAMESPACE: openstack NETCONFIG: config/samples/network_v1beta1_netconfig.yaml NETCONFIG_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator/config/samples/network_v1beta1_netconfig.yaml NETCONFIG_DEPL_IMG: unused NETOBSERV_DEPLOY_NAMESPACE: netobserv NETOBSERV_NAMESPACE: openshift-netobserv-operator NETOBSERV_OPERATOR_GROUP: openshift-netobserv-operator-net NETOBSERV_SUBSCRIPTION: netobserv-operator NETWORK_BGP: 'false' NETWORK_DESIGNATE_ADDRESS_PREFIX: 172.28.0 NETWORK_DESIGNATE_EXT_ADDRESS_PREFIX: 172.50.0 NETWORK_INTERNALAPI_ADDRESS_PREFIX: 172.17.0 NETWORK_ISOLATION: 'true' NETWORK_ISOLATION_INSTANCE_NAME: crc NETWORK_ISOLATION_IPV4: 'true' NETWORK_ISOLATION_IPV4_ADDRESS: 172.16.1.1/24 NETWORK_ISOLATION_IPV4_NAT: 'true' NETWORK_ISOLATION_IPV6: 'false' NETWORK_ISOLATION_IPV6_ADDRESS: fd00:aaaa::1/64 NETWORK_ISOLATION_IP_ADDRESS: 192.168.122.10 NETWORK_ISOLATION_MAC: '52:54:00:11:11:10' NETWORK_ISOLATION_NETWORK_NAME: net-iso NETWORK_ISOLATION_NET_NAME: default NETWORK_ISOLATION_USE_DEFAULT_NETWORK: 'true' NETWORK_MTU: '1500' NETWORK_STORAGEMGMT_ADDRESS_PREFIX: 172.20.0 NETWORK_STORAGE_ADDRESS_PREFIX: 172.18.0 NETWORK_STORAGE_MACVLAN: '' NETWORK_TENANT_ADDRESS_PREFIX: 172.19.0 NETWORK_VLAN_START: '20' NETWORK_VLAN_STEP: '1' NEUTRONAPI: config/samples/neutron_v1beta1_neutronapi.yaml NEUTRONAPI_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/neutron-operator/config/samples/neutron_v1beta1_neutronapi.yaml NEUTRONAPI_DEPL_IMG: unused NEUTRON_BRANCH: main NEUTRON_COMMIT_HASH: '' NEUTRON_IMG: quay.io/openstack-k8s-operators/neutron-operator-index:latest NEUTRON_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/neutron-operator/kuttl-test.yaml NEUTRON_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/neutron-operator/test/kuttl/tests NEUTRON_KUTTL_NAMESPACE: neutron-kuttl-tests NEUTRON_REPO: https://github.com/openstack-k8s-operators/neutron-operator.git NFS_HOME: /home/nfs NMSTATE_NAMESPACE: openshift-nmstate NMSTATE_OPERATOR_GROUP: openshift-nmstate-tn6k8 NMSTATE_SUBSCRIPTION: kubernetes-nmstate-operator NNCP_ADDITIONAL_HOST_ROUTES: '' NNCP_BGP_1_INTERFACE: enp7s0 NNCP_BGP_1_IP_ADDRESS: 100.65.4.2 NNCP_BGP_2_INTERFACE: enp8s0 NNCP_BGP_2_IP_ADDRESS: 100.64.4.2 NNCP_BRIDGE: ospbr NNCP_CLEANUP_TIMEOUT: 120s NNCP_CTLPLANE_IPV6_ADDRESS_PREFIX: 'fd00:aaaa::' NNCP_CTLPLANE_IPV6_ADDRESS_SUFFIX: '10' NNCP_CTLPLANE_IP_ADDRESS_PREFIX: 192.168.122 NNCP_CTLPLANE_IP_ADDRESS_SUFFIX: '10' NNCP_DNS_SERVER: 192.168.122.1 NNCP_DNS_SERVER_IPV6: fd00:aaaa::1 NNCP_GATEWAY: 192.168.122.1 NNCP_GATEWAY_IPV6: fd00:aaaa::1 NNCP_INTERFACE: enp6s0 NNCP_NODES: '' NNCP_TIMEOUT: 240s NOVA: config/samples/nova_v1beta1_nova_collapsed_cell.yaml NOVA_BRANCH: main NOVA_COMMIT_HASH: '' NOVA_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/nova-operator/config/samples/nova_v1beta1_nova_collapsed_cell.yaml NOVA_IMG: quay.io/openstack-k8s-operators/nova-operator-index:latest NOVA_REPO: https://github.com/openstack-k8s-operators/nova-operator.git NUMBER_OF_INSTANCES: '1' OCP_NETWORK_NAME: crc OCTAVIA: config/samples/octavia_v1beta1_octavia.yaml OCTAVIA_BRANCH: main OCTAVIA_COMMIT_HASH: '' OCTAVIA_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/octavia-operator/config/samples/octavia_v1beta1_octavia.yaml OCTAVIA_IMG: quay.io/openstack-k8s-operators/octavia-operator-index:latest OCTAVIA_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/octavia-operator/kuttl-test.yaml OCTAVIA_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/octavia-operator/test/kuttl/tests OCTAVIA_KUTTL_NAMESPACE: octavia-kuttl-tests OCTAVIA_REPO: https://github.com/openstack-k8s-operators/octavia-operator.git OKD: 'false' OPENSTACK_BRANCH: main OPENSTACK_BUNDLE_IMG: quay.io/openstack-k8s-operators/openstack-operator-bundle:latest OPENSTACK_COMMIT_HASH: '' OPENSTACK_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml OPENSTACK_CRDS_DIR: openstack_crds OPENSTACK_CTLPLANE: config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml OPENSTACK_IMG: quay.io/openstack-k8s-operators/openstack-operator-index:latest OPENSTACK_K8S_BRANCH: main OPENSTACK_K8S_TAG: latest OPENSTACK_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/kuttl-test.yaml OPENSTACK_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests OPENSTACK_KUTTL_NAMESPACE: openstack-kuttl-tests OPENSTACK_NEUTRON_CUSTOM_CONF: '' OPENSTACK_REPO: https://github.com/openstack-k8s-operators/openstack-operator.git OPENSTACK_STORAGE_BUNDLE_IMG: quay.io/openstack-k8s-operators/openstack-operator-storage-bundle:latest OPERATOR_BASE_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator OPERATOR_CHANNEL: '' OPERATOR_NAMESPACE: openstack-operators OPERATOR_SOURCE: '' OPERATOR_SOURCE_NAMESPACE: '' OUT: /home/zuul/ci-framework-data/artifacts/manifests OUTPUT_DIR: /home/zuul/ci-framework-data/artifacts/edpm OVNCONTROLLER: config/samples/ovn_v1beta1_ovncontroller.yaml OVNCONTROLLER_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator/config/samples/ovn_v1beta1_ovncontroller.yaml OVNCONTROLLER_NMAP: 'true' OVNDBS: config/samples/ovn_v1beta1_ovndbcluster.yaml OVNDBS_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator/config/samples/ovn_v1beta1_ovndbcluster.yaml OVNNORTHD: config/samples/ovn_v1beta1_ovnnorthd.yaml OVNNORTHD_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator/config/samples/ovn_v1beta1_ovnnorthd.yaml OVN_BRANCH: main OVN_COMMIT_HASH: '' OVN_IMG: quay.io/openstack-k8s-operators/ovn-operator-index:latest OVN_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator/kuttl-test.yaml OVN_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator/test/kuttl/tests OVN_KUTTL_NAMESPACE: ovn-kuttl-tests OVN_REPO: https://github.com/openstack-k8s-operators/ovn-operator.git PASSWORD: '12345678' PLACEMENTAPI: config/samples/placement_v1beta1_placementapi.yaml PLACEMENTAPI_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/placement-operator/config/samples/placement_v1beta1_placementapi.yaml PLACEMENTAPI_DEPL_IMG: unused PLACEMENT_BRANCH: main PLACEMENT_COMMIT_HASH: '' PLACEMENT_IMG: quay.io/openstack-k8s-operators/placement-operator-index:latest PLACEMENT_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/placement-operator/kuttl-test.yaml PLACEMENT_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/placement-operator/test/kuttl/tests PLACEMENT_KUTTL_NAMESPACE: placement-kuttl-tests PLACEMENT_REPO: https://github.com/openstack-k8s-operators/placement-operator.git PULL_SECRET: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/ci/playbooks/kuttl/pull-secret.txt RABBITMQ: docs/examples/default-security-context/rabbitmq.yaml RABBITMQ_BRANCH: patches RABBITMQ_COMMIT_HASH: '' RABBITMQ_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/rabbitmq-operator/docs/examples/default-security-context/rabbitmq.yaml RABBITMQ_DEPL_IMG: unused RABBITMQ_IMG: quay.io/openstack-k8s-operators/rabbitmq-cluster-operator-index:latest RABBITMQ_REPO: https://github.com/openstack-k8s-operators/rabbitmq-cluster-operator.git REDHAT_OPERATORS: 'false' REDIS: config/samples/redis_v1beta1_redis.yaml REDIS_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator-redis/config/samples/redis_v1beta1_redis.yaml REDIS_DEPL_IMG: unused RH_REGISTRY_PWD: '' RH_REGISTRY_USER: '' SECRET: osp-secret SG_CORE_DEPL_IMG: unused STANDALONE_COMPUTE_DRIVER: libvirt STANDALONE_EXTERNAL_NET_PREFFIX: 172.21.0 STANDALONE_INTERNALAPI_NET_PREFIX: 172.17.0 STANDALONE_STORAGEMGMT_NET_PREFIX: 172.20.0 STANDALONE_STORAGE_NET_PREFIX: 172.18.0 STANDALONE_TENANT_NET_PREFIX: 172.19.0 STORAGEMGMT_HOST_ROUTES: '' STORAGE_CLASS: local-storage STORAGE_HOST_ROUTES: '' SWIFT: config/samples/swift_v1beta1_swift.yaml SWIFT_BRANCH: main SWIFT_COMMIT_HASH: '' SWIFT_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/swift-operator/config/samples/swift_v1beta1_swift.yaml SWIFT_IMG: quay.io/openstack-k8s-operators/swift-operator-index:latest SWIFT_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/swift-operator/kuttl-test.yaml SWIFT_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/swift-operator/test/kuttl/tests SWIFT_KUTTL_NAMESPACE: swift-kuttl-tests SWIFT_REPO: https://github.com/openstack-k8s-operators/swift-operator.git TELEMETRY: config/samples/telemetry_v1beta1_telemetry.yaml TELEMETRY_BRANCH: main TELEMETRY_COMMIT_HASH: '' TELEMETRY_CR: /home/zuul/ci-framework-data/artifacts/manifests/operator/telemetry-operator/config/samples/telemetry_v1beta1_telemetry.yaml TELEMETRY_IMG: quay.io/openstack-k8s-operators/telemetry-operator-index:latest TELEMETRY_KUTTL_BASEDIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/telemetry-operator TELEMETRY_KUTTL_CONF: /home/zuul/ci-framework-data/artifacts/manifests/operator/telemetry-operator/kuttl-test.yaml TELEMETRY_KUTTL_DIR: /home/zuul/ci-framework-data/artifacts/manifests/operator/telemetry-operator/test/kuttl/suites TELEMETRY_KUTTL_NAMESPACE: telemetry-kuttl-tests TELEMETRY_KUTTL_RELPATH: test/kuttl/suites TELEMETRY_REPO: https://github.com/openstack-k8s-operators/telemetry-operator.git TENANT_HOST_ROUTES: '' TIMEOUT: 300s TLS_ENABLED: 'false' tripleo_deploy: 'export REGISTRY_PWD:' 2026-03-16 13:15:45,791 p=32486 u=zuul n=ansible | TASK [install_yamls : Generate make targets install_yamls_path={{ cifmw_install_yamls_repo }}, output_directory={{ cifmw_install_yamls_tasks_out }}] *** 2026-03-16 13:15:45,791 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.031) 0:00:51.864 ********** 2026-03-16 13:15:45,791 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:45 +0000 (0:00:00.031) 0:00:51.863 ********** 2026-03-16 13:15:46,069 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:46,075 p=32486 u=zuul n=ansible | TASK [install_yamls : Debug generate_make module var=cifmw_generate_makes] ***** 2026-03-16 13:15:46,076 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.284) 0:00:52.149 ********** 2026-03-16 13:15:46,076 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.284) 0:00:52.147 ********** 2026-03-16 13:15:46,093 p=32486 u=zuul n=ansible | ok: [localhost] => cifmw_generate_makes: changed: false debug: /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/Makefile: - all - help - cleanup - deploy_cleanup - wait - crc_storage - crc_storage_cleanup - crc_storage_release - crc_storage_with_retries - crc_storage_cleanup_with_retries - operator_namespace - namespace - namespace_cleanup - input - input_cleanup - crc_bmo_setup - crc_bmo_cleanup - mirror_registry - mirror_registry_secure - mirror_registry_ca - mirror_registry_cleanup - openstack_prep - openstack - openstack_wait - openstack_init - openstack_cleanup - openstack_repo - openstack_deploy_prep - openstack_deploy - openstack_wait_deploy - openstack_deploy_cleanup - openstack_update_run - update_services - update_system - openstack_patch_version - edpm_deploy_generate_keys - edpm_patch_ansible_runner_image - edpm_deploy_prep - edpm_deploy_cleanup - edpm_deploy - edpm_deploy_baremetal_prep - edpm_deploy_baremetal - edpm_wait_deploy_baremetal - edpm_wait_deploy - edpm_register_dns - edpm_nova_discover_hosts - openstack_crds - openstack_crds_cleanup - edpm_deploy_networker_prep - edpm_deploy_networker_cleanup - edpm_deploy_networker - infra_prep - infra - infra_cleanup - dns_deploy_prep - dns_deploy - dns_deploy_cleanup - netconfig_deploy_prep - netconfig_deploy - netconfig_deploy_cleanup - memcached_deploy_prep - memcached_deploy - memcached_deploy_cleanup - keystone_prep - keystone - keystone_cleanup - keystone_deploy_prep - keystone_deploy - keystone_deploy_cleanup - barbican_prep - barbican - barbican_cleanup - barbican_deploy_prep - barbican_deploy - barbican_deploy_validate - barbican_deploy_cleanup - mariadb - mariadb_cleanup - mariadb_deploy_prep - mariadb_deploy - mariadb_deploy_cleanup - placement_prep - placement - placement_cleanup - placement_deploy_prep - placement_deploy - placement_deploy_cleanup - glance_prep - glance - glance_cleanup - glance_deploy_prep - glance_deploy - glance_deploy_cleanup - ovn_prep - ovn - ovn_cleanup - ovn_deploy_prep - ovn_deploy - ovn_deploy_cleanup - neutron_prep - neutron - neutron_cleanup - neutron_deploy_prep - neutron_deploy - neutron_deploy_cleanup - cinder_prep - cinder - cinder_cleanup - cinder_deploy_prep - cinder_deploy - cinder_deploy_cleanup - rabbitmq_prep - rabbitmq - rabbitmq_cleanup - rabbitmq_deploy_prep - rabbitmq_deploy - rabbitmq_deploy_cleanup - ironic_prep - ironic - ironic_cleanup - ironic_deploy_prep - ironic_deploy - ironic_deploy_cleanup - octavia_prep - octavia - octavia_cleanup - octavia_deploy_prep - octavia_deploy - octavia_deploy_cleanup - designate_prep - designate - designate_cleanup - designate_deploy_prep - designate_deploy - designate_deploy_cleanup - nova_prep - nova - nova_cleanup - nova_deploy_prep - nova_deploy - nova_deploy_cleanup - mariadb_kuttl_run - mariadb_kuttl - kuttl_db_prep - kuttl_db_cleanup - kuttl_common_prep - kuttl_common_cleanup - keystone_kuttl_run - keystone_kuttl - barbican_kuttl_run - barbican_kuttl - placement_kuttl_run - placement_kuttl - cinder_kuttl_run - cinder_kuttl - neutron_kuttl_run - neutron_kuttl - octavia_kuttl_run - octavia_kuttl - designate_kuttl - designate_kuttl_run - ovn_kuttl_run - ovn_kuttl - infra_kuttl_run - infra_kuttl - ironic_kuttl_run - ironic_kuttl - ironic_kuttl_crc - heat_kuttl_run - heat_kuttl - heat_kuttl_crc - glance_kuttl_run - glance_kuttl - manila_kuttl_run - manila_kuttl - swift_kuttl_run - swift_kuttl - horizon_kuttl_run - horizon_kuttl - openstack_kuttl_prep - openstack_kuttl_run - openstack_kuttl_cleanup - openstack_kuttl - mariadb_chainsaw_run - mariadb_chainsaw - horizon_prep - horizon - horizon_cleanup - horizon_deploy_prep - horizon_deploy - horizon_deploy_cleanup - heat_prep - heat - heat_cleanup - heat_deploy_prep - heat_deploy - heat_deploy_cleanup - baremetal_prep - baremetal - baremetal_cleanup - ceph_help - ceph - ceph_cleanup - rook_prep - rook - rook_deploy_prep - rook_deploy - rook_crc_disk - rook_cleanup - lvms - nmstate - nncp - nncp_cleanup - netattach - netattach_cleanup - metallb - metallb_config - metallb_config_cleanup - metallb_cleanup - loki - loki_cleanup - loki_deploy - loki_deploy_cleanup - netobserv - netobserv_cleanup - netobserv_deploy - netobserv_deploy_cleanup - manila_prep - manila - manila_cleanup - manila_deploy_prep - manila_deploy - manila_deploy_cleanup - telemetry_prep - telemetry - telemetry_cleanup - telemetry_deploy_prep - telemetry_deploy - telemetry_deploy_cleanup - telemetry_kuttl_run - telemetry_kuttl - swift_prep - swift - swift_cleanup - swift_deploy_prep - swift_deploy - swift_deploy_cleanup - certmanager - certmanager_cleanup - validate_marketplace - redis_deploy_prep - redis_deploy - redis_deploy_cleanup - set_slower_etcd_profile /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/devsetup/Makefile: - help - download_tools - nfs - nfs_cleanup - crc - crc_cleanup - crc_scrub - crc_attach_default_interface - crc_attach_default_interface_cleanup - ipv6_lab_network - ipv6_lab_network_cleanup - ipv6_lab_nat64_router - ipv6_lab_nat64_router_cleanup - ipv6_lab_sno - ipv6_lab_sno_cleanup - ipv6_lab - ipv6_lab_cleanup - attach_default_interface - attach_default_interface_cleanup - network_isolation_bridge - network_isolation_bridge_cleanup - edpm_baremetal_compute - edpm_compute - edpm_compute_bootc - edpm_ansible_runner - edpm_computes_bgp - edpm_compute_repos - edpm_compute_cleanup - edpm_networker - edpm_networker_cleanup - edpm_deploy_instance - tripleo_deploy - standalone_deploy - standalone_sync - standalone - standalone_cleanup - standalone_snapshot - standalone_revert - cifmw_prepare - cifmw_cleanup - bmaas_network - bmaas_network_cleanup - bmaas_route_crc_and_crc_bmaas_networks - bmaas_route_crc_and_crc_bmaas_networks_cleanup - bmaas_crc_attach_network - bmaas_crc_attach_network_cleanup - bmaas_crc_baremetal_bridge - bmaas_crc_baremetal_bridge_cleanup - bmaas_baremetal_net_nad - bmaas_baremetal_net_nad_cleanup - bmaas_metallb - bmaas_metallb_cleanup - bmaas_virtual_bms - bmaas_virtual_bms_cleanup - bmaas_sushy_emulator - bmaas_sushy_emulator_cleanup - bmaas_sushy_emulator_wait - bmaas_generate_nodes_yaml - bmaas - bmaas_cleanup failed: false success: true 2026-03-16 13:15:46,100 p=32486 u=zuul n=ansible | TASK [install_yamls : Create the install_yamls parameters file dest={{ cifmw_basedir }}/artifacts/parameters/install-yamls-params.yml, content={{ { 'cifmw_install_yamls_environment': cifmw_install_yamls_environment, 'cifmw_install_yamls_defaults': cifmw_install_yamls_defaults } | to_nice_yaml }}, mode=0644] *** 2026-03-16 13:15:46,100 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.024) 0:00:52.173 ********** 2026-03-16 13:15:46,100 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.024) 0:00:52.172 ********** 2026-03-16 13:15:46,420 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:46,427 p=32486 u=zuul n=ansible | TASK [install_yamls : Create empty cifmw_install_yamls_environment if needed cifmw_install_yamls_environment={}] *** 2026-03-16 13:15:46,427 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.326) 0:00:52.500 ********** 2026-03-16 13:15:46,427 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.326) 0:00:52.499 ********** 2026-03-16 13:15:46,443 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:46,454 p=32486 u=zuul n=ansible | TASK [discover_latest_image : Set the discovered image vars to empty/null cifmw_discovered_images_dict={}, cifmw_discovered_image_name=None, cifmw_discovered_image_url=None, cifmw_discovered_hash=None, cifmw_discovered_hash_algorithm=None] *** 2026-03-16 13:15:46,454 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.027) 0:00:52.527 ********** 2026-03-16 13:15:46,454 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.027) 0:00:52.526 ********** 2026-03-16 13:15:46,466 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:46,473 p=32486 u=zuul n=ansible | TASK [discover_latest_image : Discover images _raw_params=per-image.yml] ******* 2026-03-16 13:15:46,473 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.018) 0:00:52.546 ********** 2026-03-16 13:15:46,473 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.018) 0:00:52.545 ********** 2026-03-16 13:15:46,495 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/discover_latest_image/tasks/per-image.yml for localhost => (item={'key': 'default', 'value': {'base_url': 'https://cloud.centos.org/centos/9-stream/x86_64/images/', 'qcow_prefix': 'CentOS-Stream-GenericCloud-', 'images_file': 'CHECKSUM'}}) 2026-03-16 13:15:46,502 p=32486 u=zuul n=ansible | TASK [discover_latest_image : Ensure the current image dict entry has the expected data that=['_expected_keys | difference(_given_keys) | length == 0'], fail_msg=The image discovery request dict's {{ _current_image.key }} entry does not match the expected schema. Requests must have the following keys: {{ _expected_keys }}, this entry had: {{ _given_keys }} See the discover_latest_image role's README for more information.] *** 2026-03-16 13:15:46,502 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.029) 0:00:52.575 ********** 2026-03-16 13:15:46,502 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.029) 0:00:52.574 ********** 2026-03-16 13:15:46,529 p=32486 u=zuul n=ansible | ok: [localhost] => changed: false msg: All assertions passed 2026-03-16 13:15:46,537 p=32486 u=zuul n=ansible | TASK [discover_latest_image : Get latest image for the current entry url={{ _current_image.value.base_url }}, image_prefix={{ _current_image.value.qcow_prefix }}, images_file={{ _current_image.value.images_file }}] *** 2026-03-16 13:15:46,537 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.034) 0:00:52.610 ********** 2026-03-16 13:15:46,537 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:46 +0000 (0:00:00.034) 0:00:52.609 ********** 2026-03-16 13:15:48,416 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:48,422 p=32486 u=zuul n=ansible | TASK [discover_latest_image : Append the current return value to the discovered images dict cifmw_discovered_images_dict={{ cifmw_discovered_images_dict | combine({_current_image.key: discovered_image.data}) }}, cacheable=True] *** 2026-03-16 13:15:48,422 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:01.885) 0:00:54.496 ********** 2026-03-16 13:15:48,423 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:01.885) 0:00:54.494 ********** 2026-03-16 13:15:48,440 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:48,445 p=32486 u=zuul n=ansible | TASK [discover_latest_image : Export single-image facts if an image with name 'default' was discovered cifmw_discovered_image_name={{ cifmw_discovered_images_dict.default.image_name }}, cifmw_discovered_image_url={{ cifmw_discovered_images_dict.default.image_url }}, cifmw_discovered_hash={{ cifmw_discovered_images_dict.default.hash }}, cifmw_discovered_hash_algorithm={{ cifmw_discovered_images_dict.default.hash_algorithm }}, cacheable=True] *** 2026-03-16 13:15:48,446 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.023) 0:00:54.519 ********** 2026-03-16 13:15:48,446 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.023) 0:00:54.517 ********** 2026-03-16 13:15:48,468 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:15:48,479 p=32486 u=zuul n=ansible | TASK [cifmw_setup : Create artifacts with custom params mode=0644, dest={{ cifmw_basedir }}/artifacts/parameters/custom-params.yml, content={{ ci_framework_params | to_nice_yaml }}] *** 2026-03-16 13:15:48,479 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.033) 0:00:54.552 ********** 2026-03-16 13:15:48,479 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.033) 0:00:54.551 ********** 2026-03-16 13:15:48,795 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:15:48,821 p=32486 u=zuul n=ansible | PLAY [Install deps and prepare for KUTTL run] ********************************** 2026-03-16 13:15:48,836 p=32486 u=zuul n=ansible | TASK [Download install_yamls deps name=install_yamls_makes, tasks_from=make_download_tools] *** 2026-03-16 13:15:48,836 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.356) 0:00:54.909 ********** 2026-03-16 13:15:48,836 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.356) 0:00:54.908 ********** 2026-03-16 13:15:48,877 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Debug make_download_tools_env var=make_download_tools_env] *** 2026-03-16 13:15:48,877 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.041) 0:00:54.950 ********** 2026-03-16 13:15:48,877 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.041) 0:00:54.949 ********** 2026-03-16 13:15:48,894 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:48,900 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Debug make_download_tools_params var=make_download_tools_params] *** 2026-03-16 13:15:48,900 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.023) 0:00:54.973 ********** 2026-03-16 13:15:48,900 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.023) 0:00:54.972 ********** 2026-03-16 13:15:48,916 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:15:48,924 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Run download_tools output_dir={{ cifmw_basedir }}/artifacts, chdir=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/devsetup, script=make download_tools, dry_run={{ make_download_tools_dryrun|default(false)|bool }}, extra_args={{ dict((make_download_tools_env|default({})), **(make_download_tools_params|default({}))) }}] *** 2026-03-16 13:15:48,925 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.024) 0:00:54.998 ********** 2026-03-16 13:15:48,925 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:15:48 +0000 (0:00:00.024) 0:00:54.996 ********** 2026-03-16 13:15:48,957 p=32486 u=zuul n=ansible | Follow script's output here: /home/zuul/ci-framework-data/logs/ci_script_000_run_download.log 2026-03-16 13:16:29,406 p=32486 u=zuul n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ make_download_tools_until | default(true) }} 2026-03-16 13:16:29,407 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:29,417 p=32486 u=zuul n=ansible | TASK [Login into Openshift cluster name=openshift_login] *********************** 2026-03-16 13:16:29,417 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:40.492) 0:01:35.490 ********** 2026-03-16 13:16:29,417 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:40.492) 0:01:35.489 ********** 2026-03-16 13:16:29,462 p=32486 u=zuul n=ansible | TASK [openshift_login : Ensure output directory exists path={{ cifmw_openshift_login_basedir }}/artifacts, state=directory, mode=0755] *** 2026-03-16 13:16:29,462 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.045) 0:01:35.536 ********** 2026-03-16 13:16:29,463 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.045) 0:01:35.534 ********** 2026-03-16 13:16:29,623 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:29,629 p=32486 u=zuul n=ansible | TASK [openshift_login : OpenShift login _raw_params=login.yml] ***************** 2026-03-16 13:16:29,629 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.166) 0:01:35.703 ********** 2026-03-16 13:16:29,629 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.166) 0:01:35.701 ********** 2026-03-16 13:16:29,652 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/openshift_login/tasks/login.yml for localhost 2026-03-16 13:16:29,659 p=32486 u=zuul n=ansible | TASK [openshift_login : Check if the password file is present path={{ cifmw_openshift_login_password_file | default(cifmw_openshift_password_file) }}] *** 2026-03-16 13:16:29,659 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.029) 0:01:35.732 ********** 2026-03-16 13:16:29,659 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.029) 0:01:35.731 ********** 2026-03-16 13:16:29,677 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:29,683 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch user password content src={{ cifmw_openshift_login_password_file | default(cifmw_openshift_password_file) }}] *** 2026-03-16 13:16:29,683 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.024) 0:01:35.757 ********** 2026-03-16 13:16:29,683 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.024) 0:01:35.755 ********** 2026-03-16 13:16:29,701 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:29,707 p=32486 u=zuul n=ansible | TASK [openshift_login : Set user password as a fact cifmw_openshift_login_password={{ cifmw_openshift_login_password_file_slurp.content | b64decode }}, cacheable=True] *** 2026-03-16 13:16:29,707 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.023) 0:01:35.780 ********** 2026-03-16 13:16:29,707 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.023) 0:01:35.779 ********** 2026-03-16 13:16:29,723 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:29,730 p=32486 u=zuul n=ansible | TASK [openshift_login : Set role variables cifmw_openshift_login_kubeconfig={{ cifmw_openshift_login_kubeconfig | default(cifmw_openshift_kubeconfig) | default( ansible_env.KUBECONFIG if 'KUBECONFIG' in ansible_env else cifmw_openshift_login_kubeconfig_default_path ) | trim }}, cifmw_openshift_login_user={{ cifmw_openshift_login_user | default(cifmw_openshift_user) | default(omit) }}, cifmw_openshift_login_password={{ cifmw_openshift_login_password | default(cifmw_openshift_password) | default(omit) }}, cifmw_openshift_login_api={{ cifmw_openshift_login_api | default(cifmw_openshift_api) | default(omit) }}, cifmw_openshift_login_cert_login={{ cifmw_openshift_login_cert_login | default(false)}}, cifmw_openshift_login_provided_token={{ cifmw_openshift_provided_token | default(omit) }}, cacheable=True] *** 2026-03-16 13:16:29,730 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.022) 0:01:35.803 ********** 2026-03-16 13:16:29,730 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.022) 0:01:35.802 ********** 2026-03-16 13:16:29,755 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:29,761 p=32486 u=zuul n=ansible | TASK [openshift_login : Check if kubeconfig exists path={{ cifmw_openshift_login_kubeconfig }}] *** 2026-03-16 13:16:29,761 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.030) 0:01:35.834 ********** 2026-03-16 13:16:29,761 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.030) 0:01:35.833 ********** 2026-03-16 13:16:29,893 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:29,899 p=32486 u=zuul n=ansible | TASK [openshift_login : Assert that enough data is provided to log in to OpenShift that=cifmw_openshift_login_kubeconfig_stat.stat.exists or (cifmw_openshift_login_provided_token is defined and cifmw_openshift_login_provided_token != '') or ( (cifmw_openshift_login_user is defined) and (cifmw_openshift_login_password is defined) and (cifmw_openshift_login_api is defined) ), msg=If an existing kubeconfig is not provided user/pwd or provided/initial token and API URL must be given] *** 2026-03-16 13:16:29,899 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.138) 0:01:35.972 ********** 2026-03-16 13:16:29,899 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.138) 0:01:35.971 ********** 2026-03-16 13:16:29,918 p=32486 u=zuul n=ansible | ok: [localhost] => changed: false msg: All assertions passed 2026-03-16 13:16:29,924 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch kubeconfig content src={{ cifmw_openshift_login_kubeconfig }}] *** 2026-03-16 13:16:29,924 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.024) 0:01:35.997 ********** 2026-03-16 13:16:29,924 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.024) 0:01:35.996 ********** 2026-03-16 13:16:29,938 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:29,944 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch x509 key based users cifmw_openshift_login_key_based_users={{ ( cifmw_openshift_login_kubeconfig_content_b64.content | b64decode | from_yaml ). users | default([]) | selectattr('user.client-certificate-data', 'defined') | map(attribute="name") | map("split", "/") | map("first") }}, cacheable=True] *** 2026-03-16 13:16:29,945 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.020) 0:01:36.018 ********** 2026-03-16 13:16:29,945 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.020) 0:01:36.016 ********** 2026-03-16 13:16:29,959 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:29,965 p=32486 u=zuul n=ansible | TASK [openshift_login : Assign key based user if not provided and available cifmw_openshift_login_user={{ (cifmw_openshift_login_assume_cert_system_user | ternary('system:', '')) + (cifmw_openshift_login_key_based_users | map('replace', 'system:', '') | unique | first) }}, cifmw_openshift_login_cert_login=True, cacheable=True] *** 2026-03-16 13:16:29,965 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.020) 0:01:36.039 ********** 2026-03-16 13:16:29,965 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.020) 0:01:36.037 ********** 2026-03-16 13:16:29,980 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:29,987 p=32486 u=zuul n=ansible | TASK [openshift_login : Set the retry count cifmw_openshift_login_retries_cnt={{ 0 if cifmw_openshift_login_retries_cnt is undefined else cifmw_openshift_login_retries_cnt|int + 1 }}] *** 2026-03-16 13:16:29,987 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.021) 0:01:36.060 ********** 2026-03-16 13:16:29,987 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:29 +0000 (0:00:00.021) 0:01:36.059 ********** 2026-03-16 13:16:30,005 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:30,011 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch token _raw_params=try_login.yml] ***************** 2026-03-16 13:16:30,011 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.024) 0:01:36.084 ********** 2026-03-16 13:16:30,011 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.024) 0:01:36.083 ********** 2026-03-16 13:16:30,028 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/openshift_login/tasks/try_login.yml for localhost 2026-03-16 13:16:30,035 p=32486 u=zuul n=ansible | TASK [openshift_login : Try get OpenShift access token _raw_params=oc whoami -t] *** 2026-03-16 13:16:30,035 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.024) 0:01:36.108 ********** 2026-03-16 13:16:30,035 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.024) 0:01:36.107 ********** 2026-03-16 13:16:30,259 p=32486 u=zuul n=ansible | fatal: [localhost]: FAILED! => changed: true cmd: - oc - whoami - -t delta: '0:00:00.081314' end: '2026-03-16 13:16:30.245008' msg: non-zero return code rc: 1 start: '2026-03-16 13:16:30.163694' stderr: |- error: Missing or incomplete configuration info. Please point to an existing, complete config file: 1. Via the command-line flag --kubeconfig 2. Via the KUBECONFIG environment variable 3. In your home directory as ~/.kube/config To view or setup config directly use the 'config' command. stderr_lines: - 'error: Missing or incomplete configuration info. Please point to an existing, complete config file:' - '' - '' - ' 1. Via the command-line flag --kubeconfig' - ' 2. Via the KUBECONFIG environment variable' - ' 3. In your home directory as ~/.kube/config' - '' - To view or setup config directly use the 'config' command. stdout: '' stdout_lines: [] 2026-03-16 13:16:30,260 p=32486 u=zuul n=ansible | ...ignoring 2026-03-16 13:16:30,266 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch OpenShift token output_dir={{ cifmw_openshift_login_basedir }}/artifacts, script=oc login {%- if cifmw_openshift_login_provided_token is not defined %} {%- if cifmw_openshift_login_user is defined %} -u {{ cifmw_openshift_login_user }} {%- endif %} {%- if cifmw_openshift_login_password is defined %} -p {{ cifmw_openshift_login_password }} {%- endif %} {% else %} --token={{ cifmw_openshift_login_provided_token }} {%- endif %} {%- if cifmw_openshift_login_skip_tls_verify|bool %} --insecure-skip-tls-verify=true {%- endif %} {%- if cifmw_openshift_login_api is defined %} {{ cifmw_openshift_login_api }} {%- endif %}] *** 2026-03-16 13:16:30,266 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.230) 0:01:36.339 ********** 2026-03-16 13:16:30,266 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.230) 0:01:36.338 ********** 2026-03-16 13:16:30,304 p=32486 u=zuul n=ansible | Follow script's output here: /home/zuul/ci-framework-data/logs/ci_script_001_fetch_openshift.log 2026-03-16 13:16:30,573 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:30,580 p=32486 u=zuul n=ansible | TASK [openshift_login : Ensure kubeconfig is provided that=cifmw_openshift_login_kubeconfig != ""] *** 2026-03-16 13:16:30,580 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.314) 0:01:36.653 ********** 2026-03-16 13:16:30,580 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.314) 0:01:36.652 ********** 2026-03-16 13:16:30,596 p=32486 u=zuul n=ansible | ok: [localhost] => changed: false msg: All assertions passed 2026-03-16 13:16:30,602 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch new OpenShift access token _raw_params=oc whoami -t] *** 2026-03-16 13:16:30,602 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.021) 0:01:36.675 ********** 2026-03-16 13:16:30,602 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.021) 0:01:36.674 ********** 2026-03-16 13:16:30,839 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:30,845 p=32486 u=zuul n=ansible | TASK [openshift_login : Set new OpenShift token cifmw_openshift_login_token={{ (not cifmw_openshift_login_new_token_out.skipped | default(false)) | ternary(cifmw_openshift_login_new_token_out.stdout, cifmw_openshift_login_whoami_out.stdout) }}, cacheable=True] *** 2026-03-16 13:16:30,845 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.243) 0:01:36.919 ********** 2026-03-16 13:16:30,845 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.243) 0:01:36.917 ********** 2026-03-16 13:16:30,864 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:30,870 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch OpenShift API URL _raw_params=oc whoami --show-server=true] *** 2026-03-16 13:16:30,870 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.024) 0:01:36.943 ********** 2026-03-16 13:16:30,870 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:30 +0000 (0:00:00.024) 0:01:36.942 ********** 2026-03-16 13:16:31,091 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:31,097 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch OpenShift kubeconfig context _raw_params=oc whoami -c] *** 2026-03-16 13:16:31,097 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.227) 0:01:37.170 ********** 2026-03-16 13:16:31,097 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.227) 0:01:37.169 ********** 2026-03-16 13:16:31,324 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:31,331 p=32486 u=zuul n=ansible | TASK [openshift_login : Fetch OpenShift current user _raw_params=oc whoami] **** 2026-03-16 13:16:31,331 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.233) 0:01:37.404 ********** 2026-03-16 13:16:31,331 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.233) 0:01:37.403 ********** 2026-03-16 13:16:31,558 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:31,565 p=32486 u=zuul n=ansible | TASK [openshift_login : Set OpenShift user, context and API facts cifmw_openshift_login_api={{ cifmw_openshift_login_api_out.stdout }}, cifmw_openshift_login_context={{ cifmw_openshift_login_context_out.stdout }}, cifmw_openshift_login_user={{ _oauth_user }}, cifmw_openshift_kubeconfig={{ cifmw_openshift_login_kubeconfig }}, cifmw_openshift_api={{ cifmw_openshift_login_api_out.stdout }}, cifmw_openshift_context={{ cifmw_openshift_login_context_out.stdout }}, cifmw_openshift_user={{ _oauth_user }}, cifmw_openshift_token={{ cifmw_openshift_login_token | default(omit) }}, cifmw_install_yamls_environment={{ ( cifmw_install_yamls_environment | combine({'KUBECONFIG': cifmw_openshift_login_kubeconfig}) ) if cifmw_install_yamls_environment is defined else omit }}, cacheable=True] *** 2026-03-16 13:16:31,565 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.234) 0:01:37.638 ********** 2026-03-16 13:16:31,565 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.234) 0:01:37.637 ********** 2026-03-16 13:16:31,592 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:31,597 p=32486 u=zuul n=ansible | TASK [openshift_login : Create the openshift_login parameters file dest={{ cifmw_basedir }}/artifacts/parameters/openshift-login-params.yml, content={{ cifmw_openshift_login_params_content | from_yaml | to_nice_yaml }}, mode=0600] *** 2026-03-16 13:16:31,597 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.032) 0:01:37.671 ********** 2026-03-16 13:16:31,598 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.032) 0:01:37.669 ********** 2026-03-16 13:16:31,928 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:31,934 p=32486 u=zuul n=ansible | TASK [openshift_login : Read the install yamls parameters file path={{ cifmw_basedir }}/artifacts/parameters/install-yamls-params.yml] *** 2026-03-16 13:16:31,934 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.336) 0:01:38.007 ********** 2026-03-16 13:16:31,934 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:31 +0000 (0:00:00.336) 0:01:38.006 ********** 2026-03-16 13:16:32,173 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:32,179 p=32486 u=zuul n=ansible | TASK [openshift_login : Append the KUBECONFIG to the install yamls parameters content={{ cifmw_openshift_login_install_yamls_artifacts_slurp['content'] | b64decode | from_yaml | combine( { 'cifmw_install_yamls_environment': { 'KUBECONFIG': cifmw_openshift_login_kubeconfig } }, recursive=true) | to_nice_yaml }}, dest={{ cifmw_basedir }}/artifacts/parameters/install-yamls-params.yml, mode=0600] *** 2026-03-16 13:16:32,179 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.245) 0:01:38.253 ********** 2026-03-16 13:16:32,179 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.245) 0:01:38.251 ********** 2026-03-16 13:16:32,526 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:32,537 p=32486 u=zuul n=ansible | TASK [openshift_setup : Ensure output directory exists path={{ cifmw_openshift_setup_basedir }}/artifacts, state=directory, mode=0755] *** 2026-03-16 13:16:32,537 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.357) 0:01:38.610 ********** 2026-03-16 13:16:32,537 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.357) 0:01:38.609 ********** 2026-03-16 13:16:32,681 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:32,688 p=32486 u=zuul n=ansible | TASK [openshift_setup : Fetch namespaces to create cifmw_openshift_setup_namespaces={{ (( ([cifmw_install_yamls_defaults['NAMESPACE']] + ([cifmw_install_yamls_defaults['OPERATOR_NAMESPACE']] if 'OPERATOR_NAMESPACE' is in cifmw_install_yamls_defaults else []) ) if cifmw_install_yamls_defaults is defined else [] ) + cifmw_openshift_setup_create_namespaces) | unique }}] *** 2026-03-16 13:16:32,688 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.150) 0:01:38.761 ********** 2026-03-16 13:16:32,688 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.150) 0:01:38.760 ********** 2026-03-16 13:16:32,708 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:32,717 p=32486 u=zuul n=ansible | TASK [openshift_setup : Create required namespaces kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit) }}, name={{ item }}, kind=Namespace, state=present] *** 2026-03-16 13:16:32,717 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.029) 0:01:38.790 ********** 2026-03-16 13:16:32,717 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:32 +0000 (0:00:00.029) 0:01:38.789 ********** 2026-03-16 13:16:34,195 p=32486 u=zuul n=ansible | changed: [localhost] => (item=openstack) 2026-03-16 13:16:34,767 p=32486 u=zuul n=ansible | changed: [localhost] => (item=openstack-operators) 2026-03-16 13:16:34,777 p=32486 u=zuul n=ansible | TASK [openshift_setup : Get internal OpenShift registry route kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, kind=Route, name=default-route, namespace=openshift-image-registry] *** 2026-03-16 13:16:34,777 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:02.060) 0:01:40.851 ********** 2026-03-16 13:16:34,778 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:02.060) 0:01:40.849 ********** 2026-03-16 13:16:34,789 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,796 p=32486 u=zuul n=ansible | TASK [openshift_setup : Allow anonymous image-pulls in CRC registry for targeted namespaces state=present, kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, definition={'kind': 'RoleBinding', 'apiVersion': 'rbac.authorization.k8s.io/v1', 'metadata': {'name': 'system:image-puller', 'namespace': '{{ item }}'}, 'subjects': [{'kind': 'User', 'name': 'system:anonymous'}, {'kind': 'User', 'name': 'system:unauthenticated'}], 'roleRef': {'kind': 'ClusterRole', 'name': 'system:image-puller'}}] *** 2026-03-16 13:16:34,796 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.018) 0:01:40.869 ********** 2026-03-16 13:16:34,796 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.018) 0:01:40.868 ********** 2026-03-16 13:16:34,812 p=32486 u=zuul n=ansible | skipping: [localhost] => (item=openstack) 2026-03-16 13:16:34,813 p=32486 u=zuul n=ansible | skipping: [localhost] => (item=openstack-operators) 2026-03-16 13:16:34,813 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,820 p=32486 u=zuul n=ansible | TASK [openshift_setup : Wait for the image registry to be ready kind=Deployment, name=image-registry, namespace=openshift-image-registry, kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, wait=True, wait_sleep=10, wait_timeout=600, wait_condition={'type': 'Available', 'status': 'True'}] *** 2026-03-16 13:16:34,820 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.023) 0:01:40.893 ********** 2026-03-16 13:16:34,820 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.023) 0:01:40.892 ********** 2026-03-16 13:16:34,838 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,844 p=32486 u=zuul n=ansible | TASK [openshift_setup : Login into OpenShift internal registry output_dir={{ cifmw_openshift_setup_basedir }}/artifacts, script=podman login -u {{ cifmw_openshift_user }} -p {{ cifmw_openshift_token }} {%- if cifmw_openshift_setup_skip_internal_registry_tls_verify|bool %} --tls-verify=false {%- endif %} {{ cifmw_openshift_setup_registry_default_route.resources[0].spec.host }}] *** 2026-03-16 13:16:34,844 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.024) 0:01:40.917 ********** 2026-03-16 13:16:34,844 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.024) 0:01:40.916 ********** 2026-03-16 13:16:34,860 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,866 p=32486 u=zuul n=ansible | TASK [Ensure we have custom CA installed on host role=install_ca] ************** 2026-03-16 13:16:34,866 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.021) 0:01:40.939 ********** 2026-03-16 13:16:34,866 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.021) 0:01:40.938 ********** 2026-03-16 13:16:34,880 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,886 p=32486 u=zuul n=ansible | TASK [openshift_setup : Update ca bundle _raw_params=update-ca-trust extract] *** 2026-03-16 13:16:34,886 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:40.960 ********** 2026-03-16 13:16:34,886 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:40.958 ********** 2026-03-16 13:16:34,901 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,907 p=32486 u=zuul n=ansible | TASK [openshift_setup : Slurp CAs file src={{ cifmw_openshift_setup_ca_bundle_path }}] *** 2026-03-16 13:16:34,907 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.021) 0:01:40.981 ********** 2026-03-16 13:16:34,908 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.021) 0:01:40.979 ********** 2026-03-16 13:16:34,922 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,928 p=32486 u=zuul n=ansible | TASK [openshift_setup : Create config map with registry CAs kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, definition={'apiVersion': 'v1', 'kind': 'ConfigMap', 'metadata': {'namespace': 'openshift-config', 'name': 'registry-cas'}, 'data': '{{ _config_map_data | items2dict }}'}] *** 2026-03-16 13:16:34,928 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:41.001 ********** 2026-03-16 13:16:34,928 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:41.000 ********** 2026-03-16 13:16:34,943 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,949 p=32486 u=zuul n=ansible | TASK [openshift_setup : Install Red Hat CA for pulling images from internal registry kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, merge_type=merge, definition={'apiVersion': 'config.openshift.io/v1', 'kind': 'Image', 'metadata': {'name': 'cluster'}, 'spec': {'additionalTrustedCA': {'name': 'registry-cas'}}}] *** 2026-03-16 13:16:34,949 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:41.022 ********** 2026-03-16 13:16:34,949 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:41.021 ********** 2026-03-16 13:16:34,967 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,973 p=32486 u=zuul n=ansible | TASK [openshift_setup : Add insecure registry kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, merge_type=merge, definition={'apiVersion': 'config.openshift.io/v1', 'kind': 'Image', 'metadata': {'name': 'cluster'}, 'spec': {'registrySources': {'insecureRegistries': ['{{ cifmw_update_containers_registry }}'], 'allowedRegistries': '{{ all_registries }}'}}}] *** 2026-03-16 13:16:34,973 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.023) 0:01:41.046 ********** 2026-03-16 13:16:34,973 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.023) 0:01:41.045 ********** 2026-03-16 13:16:34,988 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:34,993 p=32486 u=zuul n=ansible | TASK [openshift_setup : Create a ICSP with repository digest mirrors kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, definition={'apiVersion': 'operator.openshift.io/v1alpha1', 'kind': 'ImageContentSourcePolicy', 'metadata': {'name': 'registry-digest-mirrors'}, 'spec': {'repositoryDigestMirrors': '{{ cifmw_openshift_setup_digest_mirrors }}'}}] *** 2026-03-16 13:16:34,993 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:41.067 ********** 2026-03-16 13:16:34,994 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:34 +0000 (0:00:00.020) 0:01:41.065 ********** 2026-03-16 13:16:35,010 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:35,016 p=32486 u=zuul n=ansible | TASK [openshift_setup : Gather network.operator info kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, api_version=operator.openshift.io/v1, kind=Network, name=cluster] *** 2026-03-16 13:16:35,016 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:35 +0000 (0:00:00.022) 0:01:41.089 ********** 2026-03-16 13:16:35,016 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:35 +0000 (0:00:00.022) 0:01:41.088 ********** 2026-03-16 13:16:35,704 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:35,714 p=32486 u=zuul n=ansible | TASK [openshift_setup : Patch network operator api_version=operator.openshift.io/v1, kubeconfig={{ cifmw_openshift_kubeconfig }}, kind=Network, name=cluster, persist_config=True, patch=[{'path': '/spec/defaultNetwork/ovnKubernetesConfig/gatewayConfig/routingViaHost', 'value': True, 'op': 'replace'}, {'path': '/spec/defaultNetwork/ovnKubernetesConfig/gatewayConfig/ipForwarding', 'value': 'Global', 'op': 'replace'}]] *** 2026-03-16 13:16:35,714 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:35 +0000 (0:00:00.698) 0:01:41.787 ********** 2026-03-16 13:16:35,714 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:35 +0000 (0:00:00.698) 0:01:41.786 ********** 2026-03-16 13:16:36,428 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:36,435 p=32486 u=zuul n=ansible | TASK [openshift_setup : Patch samples registry configuration kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, api_version=samples.operator.openshift.io/v1, kind=Config, name=cluster, patch=[{'op': 'replace', 'path': '/spec/samplesRegistry', 'value': '{{ cifmw_openshift_setup_samples_registry }}'}]] *** 2026-03-16 13:16:36,435 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:36 +0000 (0:00:00.720) 0:01:42.508 ********** 2026-03-16 13:16:36,435 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:36 +0000 (0:00:00.720) 0:01:42.507 ********** 2026-03-16 13:16:37,013 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:37,019 p=32486 u=zuul n=ansible | TASK [openshift_setup : Delete the pods from openshift-marketplace namespace kind=Pod, state=absent, delete_all=True, kubeconfig={{ cifmw_openshift_kubeconfig }}, namespace=openshift-marketplace] *** 2026-03-16 13:16:37,019 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.584) 0:01:43.092 ********** 2026-03-16 13:16:37,019 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.584) 0:01:43.091 ********** 2026-03-16 13:16:37,032 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:37,038 p=32486 u=zuul n=ansible | TASK [openshift_setup : Wait for openshift-marketplace pods to be running _raw_params=oc wait pod --all --for=condition=Ready -n openshift-marketplace --timeout=1m] *** 2026-03-16 13:16:37,038 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.018) 0:01:43.111 ********** 2026-03-16 13:16:37,038 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.018) 0:01:43.110 ********** 2026-03-16 13:16:37,049 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:37,060 p=32486 u=zuul n=ansible | TASK [Attach default network to CRC name=install_yamls_makes, tasks_from=make_crc_attach_default_interface] *** 2026-03-16 13:16:37,060 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.022) 0:01:43.133 ********** 2026-03-16 13:16:37,060 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.022) 0:01:43.132 ********** 2026-03-16 13:16:37,110 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Debug make_crc_attach_default_interface_env var=make_crc_attach_default_interface_env] *** 2026-03-16 13:16:37,110 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.050) 0:01:43.183 ********** 2026-03-16 13:16:37,110 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.050) 0:01:43.182 ********** 2026-03-16 13:16:37,125 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:37,131 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Debug make_crc_attach_default_interface_params var=make_crc_attach_default_interface_params] *** 2026-03-16 13:16:37,131 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.020) 0:01:43.204 ********** 2026-03-16 13:16:37,131 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.020) 0:01:43.203 ********** 2026-03-16 13:16:37,147 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:37,153 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Run crc_attach_default_interface output_dir={{ cifmw_basedir }}/artifacts, chdir=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/devsetup, script=make crc_attach_default_interface, dry_run={{ make_crc_attach_default_interface_dryrun|default(false)|bool }}, extra_args={{ dict((make_crc_attach_default_interface_env|default({})), **(make_crc_attach_default_interface_params|default({}))) }}] *** 2026-03-16 13:16:37,153 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.022) 0:01:43.226 ********** 2026-03-16 13:16:37,153 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:37 +0000 (0:00:00.022) 0:01:43.225 ********** 2026-03-16 13:16:37,185 p=32486 u=zuul n=ansible | Follow script's output here: /home/zuul/ci-framework-data/logs/ci_script_002_run_crc_attach_default.log 2026-03-16 13:16:42,298 p=32486 u=zuul n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ make_crc_attach_default_interface_until | default(true) }} 2026-03-16 13:16:42,299 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:42,310 p=32486 u=zuul n=ansible | TASK [run_hook : Assert parameters are valid quiet=True, that=['_list_hooks is not string', '_list_hooks is not mapping', '_list_hooks is iterable', '(hooks | default([])) is not string', '(hooks | default([])) is not mapping', '(hooks | default([])) is iterable']] *** 2026-03-16 13:16:42,310 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:05.156) 0:01:48.383 ********** 2026-03-16 13:16:42,310 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:05.156) 0:01:48.382 ********** 2026-03-16 13:16:42,363 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:42,369 p=32486 u=zuul n=ansible | TASK [run_hook : Assert single hooks are all mappings quiet=True, that=['_not_mapping_hooks | length == 0'], msg=All single hooks must be a list of mappings or a mapping.] *** 2026-03-16 13:16:42,369 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.059) 0:01:48.443 ********** 2026-03-16 13:16:42,369 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.059) 0:01:48.441 ********** 2026-03-16 13:16:42,441 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:42,448 p=32486 u=zuul n=ansible | TASK [run_hook : Loop on hooks for pre_kuttl _raw_params={{ hook.type }}.yml] *** 2026-03-16 13:16:42,448 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.078) 0:01:48.521 ********** 2026-03-16 13:16:42,448 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.078) 0:01:48.520 ********** 2026-03-16 13:16:42,548 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/run_hook/tasks/playbook.yml for localhost => (item={'name': 'Fetch crc facts and save them as parameters for kuttl jobs', 'type': 'playbook', 'inventory': '/home/zuul/ci-framework-data/artifacts/zuul_inventory.yml', 'source': 'kuttl_openstack_prep.yml'}) 2026-03-16 13:16:42,554 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/run_hook/tasks/playbook.yml for localhost => (item={'name': 'Fetch crc facts and save them as parameters for kuttl jobs', 'type': 'playbook', 'inventory': '/home/zuul/ci-framework-data/artifacts/zuul_inventory.yml', 'source': 'kuttl_openstack_prep.yml'}) 2026-03-16 13:16:42,562 p=32486 u=zuul n=ansible | TASK [run_hook : Set playbook path for Fetch crc facts and save them as parameters for kuttl jobs cifmw_basedir={{ _bdir }}, hook_name={{ _hook_name }}, playbook_path={{ _play | realpath }}, log_path={{ _bdir }}/logs/{{ step }}_{{ _hook_name }}.log, extra_vars=-e namespace={{ cifmw_openstack_namespace }} {%- if hook.extra_vars is defined and hook.extra_vars|length > 0 -%} {% for key,value in hook.extra_vars.items() -%} {%- if key == 'file' %} -e "@{{ value }}" {%- else %} -e "{{ key }}={{ value }}" {%- endif %} {%- endfor %} {%- endif %}] *** 2026-03-16 13:16:42,562 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.113) 0:01:48.635 ********** 2026-03-16 13:16:42,562 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.113) 0:01:48.634 ********** 2026-03-16 13:16:42,597 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:42,603 p=32486 u=zuul n=ansible | TASK [run_hook : Get file stat path={{ playbook_path }}] *********************** 2026-03-16 13:16:42,603 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.041) 0:01:48.677 ********** 2026-03-16 13:16:42,604 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.041) 0:01:48.675 ********** 2026-03-16 13:16:42,759 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:42,766 p=32486 u=zuul n=ansible | TASK [run_hook : Fail if playbook doesn't exist msg=Playbook {{ playbook_path }} doesn't seem to exist.] *** 2026-03-16 13:16:42,766 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.162) 0:01:48.839 ********** 2026-03-16 13:16:42,766 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.162) 0:01:48.838 ********** 2026-03-16 13:16:42,778 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:42,785 p=32486 u=zuul n=ansible | TASK [run_hook : Get parameters files paths={{ (cifmw_basedir, 'artifacts/parameters') | path_join }}, file_type=file, patterns=*.yml] *** 2026-03-16 13:16:42,785 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.018) 0:01:48.858 ********** 2026-03-16 13:16:42,785 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.018) 0:01:48.857 ********** 2026-03-16 13:16:42,934 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:42,940 p=32486 u=zuul n=ansible | TASK [run_hook : Add parameters artifacts as extra variables extra_vars={{ extra_vars }} {% for file in cifmw_run_hook_parameters_files.files %} -e "@{{ file.path }}" {%- endfor %}] *** 2026-03-16 13:16:42,940 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.155) 0:01:49.014 ********** 2026-03-16 13:16:42,941 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.155) 0:01:49.012 ********** 2026-03-16 13:16:42,955 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:42,962 p=32486 u=zuul n=ansible | TASK [run_hook : Ensure log directory exists path={{ log_path | dirname }}, state=directory, mode=0755] *** 2026-03-16 13:16:42,962 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.021) 0:01:49.035 ********** 2026-03-16 13:16:42,962 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:42 +0000 (0:00:00.021) 0:01:49.034 ********** 2026-03-16 13:16:43,112 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:43,118 p=32486 u=zuul n=ansible | TASK [run_hook : Ensure artifacts directory exists path={{ cifmw_basedir }}/artifacts, state=directory, mode=0755] *** 2026-03-16 13:16:43,118 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:43 +0000 (0:00:00.156) 0:01:49.192 ********** 2026-03-16 13:16:43,118 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:43 +0000 (0:00:00.156) 0:01:49.190 ********** 2026-03-16 13:16:43,273 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:43,280 p=32486 u=zuul n=ansible | TASK [run_hook : Run hook without retry - Fetch crc facts and save them as parameters for kuttl jobs] *** 2026-03-16 13:16:43,280 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:43 +0000 (0:00:00.161) 0:01:49.353 ********** 2026-03-16 13:16:43,280 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:43 +0000 (0:00:00.161) 0:01:49.352 ********** 2026-03-16 13:16:43,324 p=32486 u=zuul n=ansible | Follow script's output here: /home/zuul/ci-framework-data/logs/ci_script_003_run_hook_without_retry_fetch.log 2026-03-16 13:16:44,594 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:44,601 p=32486 u=zuul n=ansible | TASK [run_hook : Run hook with retry - Fetch crc facts and save them as parameters for kuttl jobs] *** 2026-03-16 13:16:44,601 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:01.321) 0:01:50.675 ********** 2026-03-16 13:16:44,601 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:01.321) 0:01:50.673 ********** 2026-03-16 13:16:44,616 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:44,622 p=32486 u=zuul n=ansible | TASK [run_hook : Check if we have a file path={{ cifmw_basedir }}/artifacts/{{ step }}_{{ hook_name }}.yml] *** 2026-03-16 13:16:44,622 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.021) 0:01:50.696 ********** 2026-03-16 13:16:44,623 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.021) 0:01:50.694 ********** 2026-03-16 13:16:44,766 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:44,772 p=32486 u=zuul n=ansible | TASK [run_hook : Load generated content in main playbook file={{ cifmw_basedir }}/artifacts/{{ step }}_{{ hook_name }}.yml] *** 2026-03-16 13:16:44,772 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.149) 0:01:50.845 ********** 2026-03-16 13:16:44,772 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.149) 0:01:50.844 ********** 2026-03-16 13:16:44,784 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:44,791 p=32486 u=zuul n=ansible | TASK [run_hook : Set playbook path for Fetch crc facts and save them as parameters for kuttl jobs cifmw_basedir={{ _bdir }}, hook_name={{ _hook_name }}, playbook_path={{ _play | realpath }}, log_path={{ _bdir }}/logs/{{ step }}_{{ _hook_name }}.log, extra_vars=-e namespace={{ cifmw_openstack_namespace }} {%- if hook.extra_vars is defined and hook.extra_vars|length > 0 -%} {% for key,value in hook.extra_vars.items() -%} {%- if key == 'file' %} -e "@{{ value }}" {%- else %} -e "{{ key }}={{ value }}" {%- endif %} {%- endfor %} {%- endif %}] *** 2026-03-16 13:16:44,791 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.019) 0:01:50.865 ********** 2026-03-16 13:16:44,791 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.019) 0:01:50.863 ********** 2026-03-16 13:16:44,826 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:44,833 p=32486 u=zuul n=ansible | TASK [run_hook : Get file stat path={{ playbook_path }}] *********************** 2026-03-16 13:16:44,833 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.041) 0:01:50.906 ********** 2026-03-16 13:16:44,833 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.041) 0:01:50.905 ********** 2026-03-16 13:16:44,987 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:44,993 p=32486 u=zuul n=ansible | TASK [run_hook : Fail if playbook doesn't exist msg=Playbook {{ playbook_path }} doesn't seem to exist.] *** 2026-03-16 13:16:44,993 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.160) 0:01:51.066 ********** 2026-03-16 13:16:44,993 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:44 +0000 (0:00:00.160) 0:01:51.065 ********** 2026-03-16 13:16:45,004 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:45,010 p=32486 u=zuul n=ansible | TASK [run_hook : Get parameters files paths={{ (cifmw_basedir, 'artifacts/parameters') | path_join }}, file_type=file, patterns=*.yml] *** 2026-03-16 13:16:45,010 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.017) 0:01:51.084 ********** 2026-03-16 13:16:45,010 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.017) 0:01:51.082 ********** 2026-03-16 13:16:45,161 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:45,168 p=32486 u=zuul n=ansible | TASK [run_hook : Add parameters artifacts as extra variables extra_vars={{ extra_vars }} {% for file in cifmw_run_hook_parameters_files.files %} -e "@{{ file.path }}" {%- endfor %}] *** 2026-03-16 13:16:45,168 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.157) 0:01:51.241 ********** 2026-03-16 13:16:45,168 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.157) 0:01:51.240 ********** 2026-03-16 13:16:45,184 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:45,190 p=32486 u=zuul n=ansible | TASK [run_hook : Ensure log directory exists path={{ log_path | dirname }}, state=directory, mode=0755] *** 2026-03-16 13:16:45,190 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.021) 0:01:51.263 ********** 2026-03-16 13:16:45,190 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.021) 0:01:51.262 ********** 2026-03-16 13:16:45,338 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:45,344 p=32486 u=zuul n=ansible | TASK [run_hook : Ensure artifacts directory exists path={{ cifmw_basedir }}/artifacts, state=directory, mode=0755] *** 2026-03-16 13:16:45,344 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.153) 0:01:51.417 ********** 2026-03-16 13:16:45,344 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.153) 0:01:51.416 ********** 2026-03-16 13:16:45,489 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:45,497 p=32486 u=zuul n=ansible | TASK [run_hook : Run hook without retry - Fetch crc facts and save them as parameters for kuttl jobs] *** 2026-03-16 13:16:45,498 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.153) 0:01:51.571 ********** 2026-03-16 13:16:45,498 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:45 +0000 (0:00:00.153) 0:01:51.569 ********** 2026-03-16 13:16:45,541 p=32486 u=zuul n=ansible | Follow script's output here: /home/zuul/ci-framework-data/logs/ci_script_004_run_hook_without_retry_fetch.log 2026-03-16 13:16:46,821 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:16:46,829 p=32486 u=zuul n=ansible | TASK [run_hook : Run hook with retry - Fetch crc facts and save them as parameters for kuttl jobs] *** 2026-03-16 13:16:46,830 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:46 +0000 (0:00:01.331) 0:01:52.903 ********** 2026-03-16 13:16:46,830 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:46 +0000 (0:00:01.331) 0:01:52.901 ********** 2026-03-16 13:16:46,844 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:46,852 p=32486 u=zuul n=ansible | TASK [run_hook : Check if we have a file path={{ cifmw_basedir }}/artifacts/{{ step }}_{{ hook_name }}.yml] *** 2026-03-16 13:16:46,852 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:46 +0000 (0:00:00.022) 0:01:52.925 ********** 2026-03-16 13:16:46,852 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:46 +0000 (0:00:00.022) 0:01:52.924 ********** 2026-03-16 13:16:46,991 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:46,998 p=32486 u=zuul n=ansible | TASK [run_hook : Load generated content in main playbook file={{ cifmw_basedir }}/artifacts/{{ step }}_{{ hook_name }}.yml] *** 2026-03-16 13:16:46,998 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:46 +0000 (0:00:00.146) 0:01:53.071 ********** 2026-03-16 13:16:46,998 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:46 +0000 (0:00:00.146) 0:01:53.070 ********** 2026-03-16 13:16:47,010 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:47,021 p=32486 u=zuul n=ansible | TASK [Run kuttl tests _raw_params=run-kuttl-tests.yml] ************************* 2026-03-16 13:16:47,021 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.094 ********** 2026-03-16 13:16:47,021 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.093 ********** 2026-03-16 13:16:47,051 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/ci/playbooks/kuttl/run-kuttl-tests.yml for localhost => (item=openstack) 2026-03-16 13:16:47,057 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/ci/playbooks/kuttl/run-kuttl-tests.yml for localhost => (item=barbican) 2026-03-16 13:16:47,062 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/ci/playbooks/kuttl/run-kuttl-tests.yml for localhost => (item=keystone) 2026-03-16 13:16:47,067 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/ci/playbooks/kuttl/run-kuttl-tests.yml for localhost => (item=horizon) 2026-03-16 13:16:47,086 p=32486 u=zuul n=ansible | TASK [Load parameters dir={{ cifmw_basedir }}/artifacts/parameters] ************ 2026-03-16 13:16:47,086 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.065) 0:01:53.159 ********** 2026-03-16 13:16:47,086 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.065) 0:01:53.158 ********** 2026-03-16 13:16:47,118 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:47,125 p=32486 u=zuul n=ansible | TASK [Use the locally built operators if any _local_operators_indexes={{ _local_operators_indexes|default({}) | combine({ item.key.split('-')[0]|upper+'_IMG': cifmw_operator_build_output['operators'][item.key].image_catalog}) }}] *** 2026-03-16 13:16:47,125 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.039) 0:01:53.199 ********** 2026-03-16 13:16:47,126 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.039) 0:01:53.197 ********** 2026-03-16 13:16:47,142 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:47,148 p=32486 u=zuul n=ansible | TASK [Set environment vars for kuttl test cifmw_kuttl_tests_env={{ _local_operators_indexes | default({}) | combine(cifmw_install_yamls_environment) | combine(cifmw_kuttl_tests_env_vars | default({})) | combine(cifmw_kuttl_openstack_prep_vars | default({})) | combine({'PATH': cifmw_path}) }}] *** 2026-03-16 13:16:47,148 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.221 ********** 2026-03-16 13:16:47,148 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.220 ********** 2026-03-16 13:16:47,164 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:47,170 p=32486 u=zuul n=ansible | TASK [Clean storage beforehand name=ci_local_storage, tasks_from=cleanup.yml] *** 2026-03-16 13:16:47,171 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.244 ********** 2026-03-16 13:16:47,171 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.243 ********** 2026-03-16 13:16:47,206 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Get all pvs kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, kind=PersistentVolume, label_selectors=['provisioned-by={{ cifmw_cls_storage_provisioner }}']] *** 2026-03-16 13:16:47,206 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.035) 0:01:53.279 ********** 2026-03-16 13:16:47,206 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.035) 0:01:53.278 ********** 2026-03-16 13:16:47,781 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:47,787 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Export PVs as facts cifmw_cls_pvs={{ _pv_info.resources | selectattr("metadata.name", "defined") | map(attribute="metadata.name") }}] *** 2026-03-16 13:16:47,788 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.581) 0:01:53.861 ********** 2026-03-16 13:16:47,788 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.581) 0:01:53.859 ********** 2026-03-16 13:16:47,804 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:47,810 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Delete all pvs kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, kind=PersistentVolume, state=absent, api_version=v1, namespace={{ cifmw_cls_namespace }}, name={{ item }}] *** 2026-03-16 13:16:47,810 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.884 ********** 2026-03-16 13:16:47,811 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.022) 0:01:53.882 ********** 2026-03-16 13:16:47,821 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:16:47,826 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Get k8s nodes kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, kind=Node] *** 2026-03-16 13:16:47,826 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.015) 0:01:53.900 ********** 2026-03-16 13:16:47,826 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:47 +0000 (0:00:00.015) 0:01:53.898 ********** 2026-03-16 13:16:48,399 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:48,406 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Fetch hostnames for all hosts _raw_params=hostname] *** 2026-03-16 13:16:48,406 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:48 +0000 (0:00:00.579) 0:01:54.479 ********** 2026-03-16 13:16:48,406 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:48 +0000 (0:00:00.579) 0:01:54.478 ********** 2026-03-16 13:16:49,063 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=crc) 2026-03-16 13:16:49,509 p=32486 u=zuul n=ansible | changed: [localhost -> controller(192.168.25.249)] => (item=controller) 2026-03-16 13:16:49,641 p=32486 u=zuul n=ansible | changed: [localhost] => (item=localhost) 2026-03-16 13:16:49,649 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Set the hosts k8s ansible hosts cifmw_ci_local_storage_k8s_hosts={{ _host_map | selectattr("key", "in", k8s_nodes_hostnames) | map(attribute="value") | list }}, cifmw_ci_local_storage_k8s_hostnames={{ k8s_nodes_hostnames }}] *** 2026-03-16 13:16:49,650 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:49 +0000 (0:00:01.243) 0:01:55.723 ********** 2026-03-16 13:16:49,650 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:49 +0000 (0:00:01.243) 0:01:55.721 ********** 2026-03-16 13:16:49,679 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:16:49,686 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Delete directories on worker node _raw_params=worker_node_dirs.yml] *** 2026-03-16 13:16:49,686 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:49 +0000 (0:00:00.036) 0:01:55.759 ********** 2026-03-16 13:16:49,686 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:49 +0000 (0:00:00.036) 0:01:55.758 ********** 2026-03-16 13:16:49,706 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/ci_local_storage/tasks/worker_node_dirs.yml for localhost => (item=crc) 2026-03-16 13:16:49,715 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Perform action in the PV directory path={{ [ cifmw_cls_local_storage_name, 'pv'+ ("%02d" | format(item | int)) ] | path_join }}, state={{ 'directory' if cifmw_cls_action == 'create' else 'absent' }}, mode=0775] *** 2026-03-16 13:16:49,715 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:49 +0000 (0:00:00.029) 0:01:55.788 ********** 2026-03-16 13:16:49,715 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:49 +0000 (0:00:00.029) 0:01:55.787 ********** 2026-03-16 13:16:50,135 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=1) 2026-03-16 13:16:50,534 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=2) 2026-03-16 13:16:50,949 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=3) 2026-03-16 13:16:51,359 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=4) 2026-03-16 13:16:51,769 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=5) 2026-03-16 13:16:52,210 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=6) 2026-03-16 13:16:52,689 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=7) 2026-03-16 13:16:53,137 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=8) 2026-03-16 13:16:53,613 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=9) 2026-03-16 13:16:54,019 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=10) 2026-03-16 13:16:54,485 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=11) 2026-03-16 13:16:55,000 p=32486 u=zuul n=ansible | ok: [localhost -> crc(192.168.25.179)] => (item=12) 2026-03-16 13:16:55,008 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Remove the cifmw_cls_namespace namespace state=absent, kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, kind=Namespace, name={{ cifmw_cls_namespace }}, wait=True, wait_timeout=300] *** 2026-03-16 13:16:55,009 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:55 +0000 (0:00:05.293) 0:02:01.082 ********** 2026-03-16 13:16:55,009 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:16:55 +0000 (0:00:05.293) 0:02:01.080 ********** 2026-03-16 13:17:05,611 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:05,622 p=32486 u=zuul n=ansible | TASK [Create storage name=ci_local_storage] ************************************ 2026-03-16 13:17:05,622 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:05 +0000 (0:00:10.613) 0:02:11.695 ********** 2026-03-16 13:17:05,622 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:05 +0000 (0:00:10.613) 0:02:11.694 ********** 2026-03-16 13:17:05,660 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Create role needed directories path={{ cifmw_cls_manifests_dir }}, state=directory, mode=0755] *** 2026-03-16 13:17:05,661 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:05 +0000 (0:00:00.038) 0:02:11.734 ********** 2026-03-16 13:17:05,661 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:05 +0000 (0:00:00.038) 0:02:11.732 ********** 2026-03-16 13:17:05,812 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:05,818 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Create the cifmw_cls_namespace namespace" kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit) }}, name={{ cifmw_cls_namespace }}, kind=Namespace, state=present] *** 2026-03-16 13:17:05,818 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:05 +0000 (0:00:00.157) 0:02:11.891 ********** 2026-03-16 13:17:05,818 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:05 +0000 (0:00:00.157) 0:02:11.890 ********** 2026-03-16 13:17:06,403 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:06,410 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Save storage manifests as artifacts dest={{ cifmw_cls_manifests_dir }}/storage-class.yaml, content={{ cifmw_cls_storage_manifest | to_nice_yaml }}, mode=0644] *** 2026-03-16 13:17:06,410 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:06 +0000 (0:00:00.591) 0:02:12.483 ********** 2026-03-16 13:17:06,410 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:06 +0000 (0:00:00.591) 0:02:12.482 ********** 2026-03-16 13:17:06,708 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:06,715 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Get k8s nodes kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit)}}, context={{ cifmw_openshift_context | default(omit)}}, kind=Node] *** 2026-03-16 13:17:06,715 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:06 +0000 (0:00:00.304) 0:02:12.788 ********** 2026-03-16 13:17:06,715 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:06 +0000 (0:00:00.304) 0:02:12.787 ********** 2026-03-16 13:17:07,270 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:17:07,278 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Fetch hostnames for all hosts _raw_params=hostname] *** 2026-03-16 13:17:07,278 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:07 +0000 (0:00:00.563) 0:02:13.351 ********** 2026-03-16 13:17:07,278 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:07 +0000 (0:00:00.563) 0:02:13.350 ********** 2026-03-16 13:17:07,700 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=crc) 2026-03-16 13:17:07,954 p=32486 u=zuul n=ansible | changed: [localhost -> controller(192.168.25.249)] => (item=controller) 2026-03-16 13:17:08,088 p=32486 u=zuul n=ansible | changed: [localhost] => (item=localhost) 2026-03-16 13:17:08,095 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Set the hosts k8s ansible hosts cifmw_ci_local_storage_k8s_hosts={{ _host_map | selectattr("key", "in", k8s_nodes_hostnames) | map(attribute="value") | list }}, cifmw_ci_local_storage_k8s_hostnames={{ k8s_nodes_hostnames }}] *** 2026-03-16 13:17:08,096 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.817) 0:02:14.169 ********** 2026-03-16 13:17:08,096 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.817) 0:02:14.167 ********** 2026-03-16 13:17:08,121 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:17:08,127 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Apply the storage class manifests kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit) }}, context={{ cifmw_openshift_context | default(omit) }}, state=present, src={{ cifmw_cls_manifests_dir }}/storage-class.yaml] *** 2026-03-16 13:17:08,128 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.032) 0:02:14.201 ********** 2026-03-16 13:17:08,128 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.032) 0:02:14.199 ********** 2026-03-16 13:17:08,706 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:08,713 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Create directories on worker node _raw_params=worker_node_dirs.yml] *** 2026-03-16 13:17:08,713 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.585) 0:02:14.786 ********** 2026-03-16 13:17:08,713 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.585) 0:02:14.785 ********** 2026-03-16 13:17:08,730 p=32486 u=zuul n=ansible | included: /home/zuul/src/github.com/openstack-k8s-operators/ci-framework/roles/ci_local_storage/tasks/worker_node_dirs.yml for localhost => (item=crc) 2026-03-16 13:17:08,739 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Perform action in the PV directory path={{ [ cifmw_cls_local_storage_name, 'pv'+ ("%02d" | format(item | int)) ] | path_join }}, state={{ 'directory' if cifmw_cls_action == 'create' else 'absent' }}, mode=0775] *** 2026-03-16 13:17:08,739 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.026) 0:02:14.813 ********** 2026-03-16 13:17:08,739 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:08 +0000 (0:00:00.026) 0:02:14.811 ********** 2026-03-16 13:17:09,158 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=1) 2026-03-16 13:17:09,576 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=2) 2026-03-16 13:17:09,978 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=3) 2026-03-16 13:17:10,395 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=4) 2026-03-16 13:17:10,812 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=5) 2026-03-16 13:17:11,208 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=6) 2026-03-16 13:17:11,628 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=7) 2026-03-16 13:17:12,056 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=8) 2026-03-16 13:17:12,480 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=9) 2026-03-16 13:17:12,903 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=10) 2026-03-16 13:17:13,338 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=11) 2026-03-16 13:17:13,743 p=32486 u=zuul n=ansible | changed: [localhost -> crc(192.168.25.179)] => (item=12) 2026-03-16 13:17:13,752 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Generate pv related storage manifest file src=storage.yaml.j2, dest={{ cifmw_cls_manifests_dir }}/storage.yaml, mode=0644] *** 2026-03-16 13:17:13,752 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:13 +0000 (0:00:05.013) 0:02:19.826 ********** 2026-03-16 13:17:13,752 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:13 +0000 (0:00:05.013) 0:02:19.824 ********** 2026-03-16 13:17:14,067 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:14,074 p=32486 u=zuul n=ansible | TASK [ci_local_storage : Apply pv related storage manifest file kubeconfig={{ cifmw_openshift_kubeconfig }}, api_key={{ cifmw_openshift_token | default(omit) }}, context={{ cifmw_openshift_context | default(omit) }}, state=present, src={{ cifmw_cls_manifests_dir }}/storage.yaml] *** 2026-03-16 13:17:14,074 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:14 +0000 (0:00:00.321) 0:02:20.147 ********** 2026-03-16 13:17:14,074 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:14 +0000 (0:00:00.321) 0:02:20.146 ********** 2026-03-16 13:17:14,737 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:17:14,751 p=32486 u=zuul n=ansible | TASK [Get resource status before openstack_kuttl run _raw_params={{ item }} >> {{ cifmw_artifacts_basedir }}/logs/cmd_before_{{ operator }}_kuttl.log ] *** 2026-03-16 13:17:14,751 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:14 +0000 (0:00:00.677) 0:02:20.824 ********** 2026-03-16 13:17:14,751 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:14 +0000 (0:00:00.677) 0:02:20.823 ********** 2026-03-16 13:17:15,023 p=32486 u=zuul n=ansible | changed: [localhost] => (item=oc get pv) 2026-03-16 13:17:15,399 p=32486 u=zuul n=ansible | changed: [localhost] => (item=oc get all) 2026-03-16 13:17:15,405 p=32486 u=zuul n=ansible | TASK [Set make_openstack_kuttl_env vars make_{{ operator }}_kuttl_env={{ cifmw_kuttl_tests_env }}] *** 2026-03-16 13:17:15,405 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.654) 0:02:21.479 ********** 2026-03-16 13:17:15,406 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.654) 0:02:21.477 ********** 2026-03-16 13:17:15,420 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:17:15,428 p=32486 u=zuul n=ansible | TASK [Run make_openstack_kuttl name=install_yamls_makes, tasks_from=make_{{ operator }}_kuttl.yml, apply={'ignore_errors': True}] *** 2026-03-16 13:17:15,428 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.022) 0:02:21.501 ********** 2026-03-16 13:17:15,428 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.022) 0:02:21.500 ********** 2026-03-16 13:17:15,475 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Debug make_openstack_kuttl_env var=make_openstack_kuttl_env] *** 2026-03-16 13:17:15,475 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.047) 0:02:21.548 ********** 2026-03-16 13:17:15,475 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.047) 0:02:21.547 ********** 2026-03-16 13:17:15,495 p=32486 u=zuul n=ansible | ok: [localhost] => make_openstack_kuttl_env: BMO_SETUP: false CHECKOUT_FROM_OPENSTACK_REF: 'true' KUBECONFIG: /home/zuul/.crc/machines/crc/kubeconfig NETWORK_MTU: 1440 NNCP_DNS_SERVER: 192.168.122.10 NNCP_INTERFACE: enp7s0 OPENSTACK_K8S_BRANCH: main OUT: /home/zuul/ci-framework-data/artifacts/manifests OUTPUT_DIR: /home/zuul/ci-framework-data/artifacts/edpm PATH: /home/zuul/.crc/bin:/home/zuul/.crc/bin/oc:/home/zuul/bin:/home/zuul/.local/bin:/home/zuul/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin PV_NUM: 20 2026-03-16 13:17:15,501 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Debug make_openstack_kuttl_params var=make_openstack_kuttl_params] *** 2026-03-16 13:17:15,501 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.025) 0:02:21.574 ********** 2026-03-16 13:17:15,501 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.025) 0:02:21.573 ********** 2026-03-16 13:17:15,518 p=32486 u=zuul n=ansible | skipping: [localhost] 2026-03-16 13:17:15,523 p=32486 u=zuul n=ansible | TASK [install_yamls_makes : Run openstack_kuttl output_dir={{ cifmw_basedir }}/artifacts, chdir=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls, script=make openstack_kuttl, dry_run={{ make_openstack_kuttl_dryrun|default(false)|bool }}, extra_args={{ dict((make_openstack_kuttl_env|default({})), **(make_openstack_kuttl_params|default({}))) }}] *** 2026-03-16 13:17:15,523 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.022) 0:02:21.597 ********** 2026-03-16 13:17:15,524 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:17:15 +0000 (0:00:00.022) 0:02:21.595 ********** 2026-03-16 13:17:15,555 p=32486 u=zuul n=ansible | Follow script's output here: /home/zuul/ci-framework-data/logs/ci_script_005_run_openstack.log 2026-03-16 13:51:08,082 p=32486 u=zuul n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ make_openstack_kuttl_until | default(true) }} 2026-03-16 13:51:08,098 p=32486 u=zuul n=ansible | An exception occurred during task execution. To see the full traceback, use -vvv. The error was: NoneType: None 2026-03-16 13:51:08,198 p=32486 u=zuul n=ansible | fatal: [localhost]: FAILED! => attempts: 1 changed: true msg: non-zero return code rc: 2 stderr: '' stderr_lines: [] stdout: "~/src/github.com/openstack-k8s-operators/install_yamls ~/ci-framework-data/artifacts\nerror: the server doesn't have a resource type \"openstackversion\"\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z openstack-kuttl-tests ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/namespace.yaml\nnamespace/openstack-kuttl-tests created\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io openstack-kuttl-tests); do sleep 1; done\"\nNAME DISPLAY NAME \ STATUS\nopenstack-kuttl-tests Active\noc project openstack-kuttl-tests\nNow using project \"openstack-kuttl-tests\" on server \"https://api.crc.testing:6443\".\nbash scripts/gen-input-kustomize.sh\n+ OUT=/home/zuul/ci-framework-data/artifacts/manifests\n+ '[' -z openstack-kuttl-tests ']'\n+ '[' -z osp-secret ']'\n+ '[' -z 12345678 ']'\n+ '[' -z 1234567842 ']'\n+ '[' -z 767c3ed056cbaa3b9dfedb8c6f825bf0 ']'\n+ '[' -z sEFmdFjDUqRM2VemYslV5yGNWjokioJXsg8Nrlc3drU= ']'\n+ '[' -z COX8bmlKAWn56XCGMrKQJj7dgHNAOl6f ']'\n+ '[' -z openstack ']'\n+ '[' -z libvirt-secret ']'\n+ DIR=/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input\n+ pushd /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input\n~/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input ~/src/github.com/openstack-k8s-operators/install_yamls\n+ cat\noc get secret/osp-secret || oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input | oc apply -f -\nError from server (NotFound): secrets \"osp-secret\" not found\nsecret/libvirt-secret created\nsecret/octavia-ca-passphrase created\nsecret/osp-secret created\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/manila-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists manila;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/heat-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/horizon-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/nova-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova/cr\noc rsh openstack-galera-0 mysql -u root --password=12345678 -ss -e \"show databases like 'nova_%';\" | xargs -I '{}' oc rsh openstack-galera-0 mysql -u root --password=12345678 -ss -e \"flush tables; drop database if exists {};\"\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator-redis /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/octavia-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists octavia;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/designate-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists designate;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/neutron-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists neutron;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/ironic-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists ironic;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists ironic_inspector;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/cinder-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists cinder;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/glance-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists glance;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/placement-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists placement;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift: no such file or directory\nNo resources found\nrm -Rf -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/swift-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/barbican-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists barbican;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/keystone-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists keystone;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/telemetry-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/ceilometer-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr\noc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e \"flush tables; drop database if exists aodh;\" || true\nError from server (NotFound): pods \"openstack-galera-0\" not found\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr\nif oc get RabbitmqCluster; then oc delete --ignore-not-found=true RabbitmqCluster --all; fi\nerror: the server doesn't have a resource type \"RabbitmqCluster\"\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/rabbitmq-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/rabbitmq/cr\nbash scripts/validate-marketplace.sh\n+ '[' -z 500s ']'\n+ OPERATOR_NAMESPACE=openshift-marketplace\n+ oc get pods -n openshift-marketplace\n+ grep CrashLoopBackOff\n+ '[' 1 -eq 0 ']'\n+ OPERATORS='openshift-cert-manager-operator kubernetes-nmstate-operator metallb-operator'\n+ for operator in $OPERATORS\n+ n=0\n+ retries=20\n+ true\n+ oc get packagemanifests -n openshift-marketplace\n+ grep openshift-cert-manager-operator\nopenshift-cert-manager-operator \ Red Hat Operators 134d\n+ '[' 0 -eq 0 ']'\n+ break\n+ for operator in $OPERATORS\n+ n=0\n+ retries=20\n+ true\n+ oc get packagemanifests -n openshift-marketplace\n+ grep kubernetes-nmstate-operator\nkubernetes-nmstate-operator \ Red Hat Operators 134d\n+ '[' 0 -eq 0 ']'\n+ break\n+ for operator in $OPERATORS\n+ n=0\n+ retries=20\n+ true\n+ oc get packagemanifests -n openshift-marketplace\n+ grep metallb-operator\nmetallb-operator Red Hat Operators 134d\n+ '[' 0 -eq 0 ']'\n+ break\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z openshift-nmstate ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/namespace.yaml\nnamespace/openshift-nmstate created\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io openshift-nmstate); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\nopenshift-nmstate \ Active\nbash scripts/gen-olm-nmstate.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr\n+ echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op\nOPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op\n+ echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr\nDEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr\n+ cat\n+ cat\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op\noperatorgroup.operators.coreos.com/openshift-nmstate-tn6k8 created\nsubscription.operators.coreos.com/kubernetes-nmstate-operator created\ntimeout 500s bash -c \"while ! (oc get deployments/nmstate-operator -n openshift-nmstate); do sleep 10; done\"\nError from server (NotFound): deployments.apps \"nmstate-operator\" not found\nError from server (NotFound): deployments.apps \"nmstate-operator\" not found\nNAME READY UP-TO-DATE AVAILABLE AGE\nnmstate-operator \ 0/1 1 0 8s\noc wait deployments/nmstate-operator -n openshift-nmstate --for condition=Available --timeout=500s\ndeployment.apps/nmstate-operator condition met\ntimeout 500s bash -c \"while ! (oc wait pod -n openshift-apiserver -l apiserver=true --for condition=Ready); do sleep 10; done\"\npod/apiserver-9ddfb9f55-f7gz7 condition met\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr\nnmstate.nmstate.io/nmstate created\ntimeout 500s bash -c \"while ! (oc get pod --no-headers=true -l component=kubernetes-nmstate-handler -n openshift-nmstate| grep nmstate-handler); do sleep 10; done\"\nNo resources found in openshift-nmstate namespace.\nnmstate-handler-6f7qf 0/1 Running 0 10s\noc wait pod -n openshift-nmstate -l component=kubernetes-nmstate-handler --for condition=Ready --timeout=500s\npod/nmstate-handler-6f7qf condition met\ntimeout 500s bash -c \"while ! (oc get deployments/nmstate-webhook -n openshift-nmstate); do sleep 10; done\"\nNAME \ READY UP-TO-DATE AVAILABLE AGE\nnmstate-webhook 0/1 1 \ 0 11s\noc wait deployments/nmstate-webhook -n openshift-nmstate --for condition=Available --timeout=500s\ndeployment.apps/nmstate-webhook condition met\nWORKERS='crc' \\\nbash scripts/gen-nncp.sh\n+ check_var_set DEPLOY_DIR\n+ [[ ! -v DEPLOY_DIR ]]\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr\n+ check_var_set WORKERS\n+ [[ ! -v WORKERS ]]\n+ check_var_set INTERFACE\n+ [[ ! -v INTERFACE ]]\n+ check_var_set BRIDGE_NAME\n+ [[ ! -v BRIDGE_NAME ]]\n+ check_var_set INTERFACE_MTU\n+ [[ ! -v INTERFACE_MTU ]]\n+ check_var_set VLAN_START\n+ [[ ! -v VLAN_START ]]\n+ check_var_set VLAN_STEP\n+ [[ ! -v VLAN_STEP ]]\n+ check_var_set VLAN_STEP\n+ [[ ! -v VLAN_STEP ]]\n+ check_var_set INTERNALAPI_PREFIX\n+ [[ ! -v INTERNALAPI_PREFIX ]]\n+ check_var_set STORAGE_PREFIX\n+ [[ ! -v STORAGE_PREFIX ]]\n+ check_var_set STORAGEMGMT_PREFIX\n+ [[ ! -v STORAGEMGMT_PREFIX ]]\n+ check_var_set TENANT_PREFIX\n+ [[ ! -v TENANT_PREFIX ]]\n+ check_var_set DESIGNATE_PREFIX\n+ [[ ! -v DESIGNATE_PREFIX ]]\n+ check_var_set DESIGNATE_EXT_PREFIX\n+ [[ ! -v DESIGNATE_EXT_PREFIX ]]\n+ '[' -n '' ']'\n+ echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr\nDEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr\n+ echo WORKERS crc\nWORKERS crc\n+ echo INTERFACE enp7s0\nINTERFACE enp7s0\n+ echo BRIDGE_NAME ospbr\nBRIDGE_NAME ospbr\n+ echo INTERFACE_BGP_1\nINTERFACE_BGP_1\n+ echo INTERFACE_BGP_2\nINTERFACE_BGP_2\n+ echo INTERFACE_MTU 1440\nINTERFACE_MTU 1440\n+ echo VLAN_START 20\nVLAN_START 20\n+ echo VLAN_STEP 1\nVLAN_STEP 1\n+ echo STORAGE_MACVLAN\nSTORAGE_MACVLAN\n+ '[' -n true ']'\n+ echo CTLPLANE_IP_ADDRESS_PREFIX 192.168.122\nCTLPLANE_IP_ADDRESS_PREFIX 192.168.122\n+ echo CTLPLANE_IP_ADDRESS_SUFFIX 10\nCTLPLANE_IP_ADDRESS_SUFFIX 10\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ IP_ADDRESS_SUFFIX=5\n+ IPV6_ADDRESS_SUFFIX=5\n+ rm --force '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr/*_nncp.yaml'\n+ internalapi_vlan_id=20\n+ storage_vlan_id=21\n+ tenant_vlan_id=22\n+ storagemgmt_vlan_id=23\n+ octavia_vlan_id=24\n+ designate_vlan_id=25\n+ designate_ext_vlan_id=26\n+ for WORKER in ${WORKERS}\n+ cat\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ '[' -n '' ']'\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ IP_ADDRESS_SUFFIX=6\n+ IPV6_ADDRESS_SUFFIX=6\n+ CTLPLANE_IP_ADDRESS_SUFFIX=11\n+ CTLPLANE_IPV6_ADDRESS_SUFFIX=1\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr/\nnodenetworkconfigurationpolicy.nmstate.io/enp7s0-crc created\ntimeout 240s bash -c \"while ! (oc wait nncp -l osp/interface=enp7s0 --for jsonpath='{.status.conditions[0].reason}'=SuccessfullyConfigured); do sleep 10; done\"\nnodenetworkconfigurationpolicy.nmstate.io/enp7s0-crc condition met\nif test -n \"192.168.122.10\"; then oc patch dns.operator/default --type merge -p '{\"spec\":{\"upstreamResolvers\":{\"policy\":\"Sequential\",\"upstreams\":[{\"type\":\"Network\",\"address\":\"'192.168.122.10'\",\"port\":53},{\"type\":\"SystemResolvConf\"}]}}}'; fi\ndns.operator.openshift.io/default patched\ntimeout 240s bash -c \"while ! (oc wait dns.operator/default --for condition=available); do sleep 10; done\"\ndns.operator.openshift.io/default condition met\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z metallb-system ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/metallb-system\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/metallb-system ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/metallb-system\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/namespace.yaml\nnamespace/metallb-system created\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io metallb-system); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\nmetallb-system \ Active\nbash scripts/gen-olm-metallb.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr\n+ echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op\nOPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op\n+ echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr\nDEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr\n+ echo INTERFACE\nINTERFACE\n+ cat\n+ cat\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op\noperatorgroup.operators.coreos.com/metallb-operator created\nsubscription.operators.coreos.com/metallb-operator-sub created\ntimeout 500s bash -c \"while ! (oc get pod --no-headers=true -l control-plane=controller-manager -n metallb-system| grep metallb-operator-controller); do sleep 10; done\"\nNo resources found in metallb-system namespace.\nNo resources found in metallb-system namespace.\nmetallb-operator-controller-manager-6cdcb85899-x7t65 \ 0/1 ContainerCreating 0 5s\noc wait pod -n metallb-system --for condition=Ready -l control-plane=controller-manager --timeout=500s\npod/metallb-operator-controller-manager-6cdcb85899-x7t65 condition met\ntimeout 500s bash -c \"while ! (oc get pod --no-headers=true -l component=webhook-server -n metallb-system| grep metallb-operator-webhook); do sleep 10; done\"\nmetallb-operator-webhook-server-754d499d9c-wvks6 \ 1/1 Running 0 38s\noc wait pod -n metallb-system --for condition=Ready -l component=webhook-server --timeout=500s\npod/metallb-operator-webhook-server-754d499d9c-wvks6 condition met\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/deploy_operator.yaml\nmetallb.metallb.io/metallb created\ntimeout 500s bash -c \"while ! (oc get pod --no-headers=true -l component=speaker -n metallb-system | grep speaker); do sleep 10; done\"\nNo resources found in metallb-system namespace.\nspeaker-ccvkx 1/2 Running 0 10s\noc wait pod -n metallb-system -l component=speaker --for condition=Ready --timeout=500s\npod/speaker-ccvkx condition met\nmake operator_namespace\nmake[1]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nerror: the server doesn't have a resource type \"openstackversion\"\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z cert-manager-operator ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/namespace.yaml\nnamespace/cert-manager-operator created\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io cert-manager-operator); do sleep 1; done\"\nNAME DISPLAY NAME \ STATUS\ncert-manager-operator Active\noc project cert-manager-operator\nNow using project \"cert-manager-operator\" on server \"https://api.crc.testing:6443\".\nmake[1]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-olm-cert-manager.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op ']'\n+ '[' -z cert-manager-operator ']'\n+ '[' -z stable-v1 ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op\n+ echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op\nOPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op\n+ echo OPERATOR_NAMESPACE cert-manager-operator\nOPERATOR_NAMESPACE cert-manager-operator\n+ echo CHANNEL stable-v1\nCHANNEL stable-v1\n+ cat\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op\noperatorgroup.operators.coreos.com/cert-manager-operator-bccwx created\nsubscription.operators.coreos.com/openshift-cert-manager-operator created\nwhile ! (oc get pod --no-headers=true -l name=cert-manager-operator -n cert-manager-operator| grep \"cert-manager-operator\"); do sleep 10; done\nNo resources found in cert-manager-operator namespace.\nNo resources found in cert-manager-operator namespace.\ncert-manager-operator-controller-manager-7f6f97fb86-nm6kj \ 1/1 Running 0 8s\noc wait pod -n cert-manager-operator --for condition=Ready -l name=cert-manager-operator --timeout=300s\npod/cert-manager-operator-controller-manager-7f6f97fb86-nm6kj condition met\nwhile ! (oc get pod --no-headers=true -l app=cainjector -n cert-manager | grep \"cert-manager-cainjector\"); do sleep 10; done\nNo resources found in cert-manager namespace.\ncert-manager-cainjector-8966b78d4-9lvw8 1/1 Running 0 9s\noc wait pod -n cert-manager -l app=cainjector --for condition=Ready --timeout=300s\npod/cert-manager-cainjector-8966b78d4-9lvw8 condition met\nwhile ! (oc get pod --no-headers=true -l app=webhook -n cert-manager | grep \"cert-manager-webhook\"); do sleep 10; done\ncert-manager-webhook-597b96b99b-5xkqn \ 0/1 Running 0 10s\noc wait pod -n cert-manager -l app=webhook --for condition=Ready --timeout=300s\npod/cert-manager-webhook-597b96b99b-5xkqn condition met\nwhile ! (oc get pod --no-headers=true -l app=cert-manager -n cert-manager | grep \"cert-manager\"); do sleep 10; done\nNo resources found in cert-manager namespace.\ncert-manager-759f64656b-g2hjp \ 1/1 Running 0 7s\noc wait pod -n cert-manager -l app=cert-manager --for condition=Ready --timeout=300s\npod/cert-manager-759f64656b-g2hjp condition met\nbash scripts/gen-netatt.sh\n+ check_var_set DEPLOY_DIR\n+ [[ ! -v DEPLOY_DIR ]]\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr\n+ check_var_set INTERFACE\n+ [[ ! -v INTERFACE ]]\n+ check_var_set BRIDGE_NAME\n+ [[ ! -v BRIDGE_NAME ]]\n+ check_var_set VLAN_START\n+ [[ ! -v VLAN_START ]]\n+ check_var_set VLAN_STEP\n+ [[ ! -v VLAN_STEP ]]\n+ '[' -z true ']'\n+ '[' -n true ']'\n+ '[' -n '' ']'\n+ '[' -n true ']'\n+ check_var_set INTERNALAPI_PREFIX\n+ [[ ! -v INTERNALAPI_PREFIX ]]\n+ check_var_set STORAGE_PREFIX\n+ [[ ! -v STORAGE_PREFIX ]]\n+ check_var_set STORAGEMGMT_PREFIX\n+ [[ ! -v STORAGEMGMT_PREFIX ]]\n+ check_var_set TENANT_PREFIX\n+ [[ ! -v TENANT_PREFIX ]]\n+ check_var_set DESIGNATE_PREFIX\n+ [[ ! -v DESIGNATE_PREFIX ]]\n+ check_var_set DESIGNATE_EXT_PREFIX\n+ [[ ! -v DESIGNATE_EXT_PREFIX ]]\n+ echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr\nDEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr\n+ echo INTERFACE enp7s0\nINTERFACE enp7s0\n+ echo VLAN_START 20\nVLAN_START 20\n+ echo VLAN_STEP 1\nVLAN_STEP 1\n+ '[' -n true ']'\n+ echo CTLPLANE_IP_ADDRESS_PREFIX 192.168.122\nCTLPLANE_IP_ADDRESS_PREFIX 192.168.122\n+ echo CTLPLANE_IP_ADDRESS_SUFFIX 10\nCTLPLANE_IP_ADDRESS_SUFFIX 10\n+ echo 'INTERNALAPI_PREFIX 172.17.0'\nINTERNALAPI_PREFIX 172.17.0\n+ echo 'STORAGE_PREFIX 172.18.0'\nSTORAGE_PREFIX 172.18.0\n+ echo 'STORAGEMGMT_PREFIX 172.20.0'\nSTORAGEMGMT_PREFIX 172.20.0\n+ echo 'TENANT_PREFIX 172.19.0'\nTENANT_PREFIX 172.19.0\n+ echo 'DESIGNATE_PREFIX 172.28.0'\nDESIGNATE_PREFIX 172.28.0\n+ echo 'DESIGNATE_PREFIX 172.50.0'\nDESIGNATE_PREFIX 172.50.0\n+ '[' -n '' ']'\n+ cat\n+ '[' -n true ']'\n+ cat\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ cat\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ cat\n+ cat\n+ '[' -n true ']'\n+ cat\n+ cat\n+ cat\n+ cat\n+ '[' -n '' ']'\n+ '[' -n '' ']'\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr/\nnetworkattachmentdefinition.k8s.cni.cncf.io/ctlplane created\nnetworkattachmentdefinition.k8s.cni.cncf.io/datacentre created\nnetworkattachmentdefinition.k8s.cni.cncf.io/designate created\nnetworkattachmentdefinition.k8s.cni.cncf.io/designateext created\nnetworkattachmentdefinition.k8s.cni.cncf.io/internalapi created\nnetworkattachmentdefinition.k8s.cni.cncf.io/octavia created\nnetworkattachmentdefinition.k8s.cni.cncf.io/storage created\nnetworkattachmentdefinition.k8s.cni.cncf.io/storagemgmt created\nnetworkattachmentdefinition.k8s.cni.cncf.io/tenant created\noc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml\nerror: the path \"/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml\" does not exist\nmake: [Makefile:2542: metallb_config_cleanup] Error 1 (ignored)\noc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml\nerror: the path \"/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml\" does not exist\nmake: [Makefile:2543: metallb_config_cleanup] Error 1 (ignored)\noc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgppeers.yaml\nerror: the path \"/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgppeers.yaml\" does not exist\nmake: [Makefile:2544: metallb_config_cleanup] Error 1 (ignored)\noc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpadvertisement.yaml\nerror: the path \"/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpadvertisement.yaml\" does not exist\nmake: [Makefile:2545: metallb_config_cleanup] Error 1 (ignored)\noc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpextras.yaml\nerror: the path \"/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpextras.yaml\" does not exist\nmake: [Makefile:2546: metallb_config_cleanup] Error 1 (ignored)\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgppeers.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpadvertisement.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpextras.yaml\nbash scripts/gen-metallb-config.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']'\n+ '[' -z enp7s0 ']'\n+ '[' -z ospbr ']'\n+ '[' -z 64999 ']'\n+ '[' -z 64999 ']'\n+ '[' -z 100.65.4.1 ']'\n+ '[' -z 100.64.4.1 ']'\n+ '[' -z 172.30.4.2 ']'\n+ '[' -z true ']'\n+ echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr\nDEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr\n+ echo INTERFACE enp7s0\nINTERFACE enp7s0\n+ echo CTLPLANE_METALLB_POOL 192.168.122.80-192.168.122.90\nCTLPLANE_METALLB_POOL 192.168.122.80-192.168.122.90\n+ echo CTLPLANE_METALLB_IPV6_POOL fd00:aaaa::80-fd00:aaaa::90\nCTLPLANE_METALLB_IPV6_POOL fd00:aaaa::80-fd00:aaaa::90\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ '[' -n true ']'\n+ cat\n+ '[' -n '' ']'\n+ cat\n+ cat\n+ cat\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml\nipaddresspool.metallb.io/ctlplane created\nipaddresspool.metallb.io/internalapi created\nipaddresspool.metallb.io/storage created\nipaddresspool.metallb.io/tenant created\nipaddresspool.metallb.io/designateext created\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml\nl2advertisement.metallb.io/ctlplane created\nl2advertisement.metallb.io/internalapi created\nl2advertisement.metallb.io/storage created\nl2advertisement.metallb.io/tenant created\nl2advertisement.metallb.io/designateext created\nbash scripts/gen-olm.sh\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' -z quay.io/openstack-k8s-operators/openstack-operator-index:latest ']'\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op\n+ OPERATOR_CHANNEL=alpha\n+ OPERATOR_SOURCE=openstack-operator-index\n+ OPERATOR_SOURCE_NAMESPACE=openstack-operators\n+ echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op\nOPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op\n+ echo OPERATOR_CHANNEL alpha\nOPERATOR_CHANNEL alpha\n+ echo OPERATOR_SOURCE openstack-operator-index\nOPERATOR_SOURCE openstack-operator-index\n+ echo OPERATOR_SOURCE_NAMESPACE openstack-operators\nOPERATOR_SOURCE_NAMESPACE openstack-operators\n+ cat\n+ cat\n+ cat\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z openstack-operators ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/openstack-operators\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/namespace.yaml\nWarning: resource namespaces/openstack-operators is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\nnamespace/openstack-operators configured\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io openstack-operators); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\nopenstack-operators \ Active\noc project openstack-operators\nNow using project \"openstack-operators\" on server \"https://api.crc.testing:6443\".\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op\ncatalogsource.operators.coreos.com/openstack-operator-index created\noperatorgroup.operators.coreos.com/openstack created\nsubscription.operators.coreos.com/openstack-operator created\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr | oc delete --ignore-not-found=true -f -\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr\noc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr | oc delete --ignore-not-found=true -f - || true\nerror: must build at directory: not a valid directory: evalsymlink failure on '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack: no such file or directory\nNo resources found\nrm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr\nmkdir -p /home/zuul/ci-framework-data/artifacts/manifests/operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr\nbash -c \"test -d /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator || CHECKOUT_FROM_OPENSTACK_REF=false scripts/clone-operator-repo.sh\"\nCloning repo: git clone -b main https://github.com/openstack-k8s-operators/openstack-operator.git openstack-operator\nCloning into 'openstack-operator'...\ncp /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr\nbash scripts/gen-service-kustomize.sh\n+++ dirname scripts/gen-service-kustomize.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/common.sh --source-only\n++ set -e\n+ '[' -z openstack-kuttl-tests ']'\n+ '[' -z OpenStackControlPlane ']'\n+ '[' -z osp-secret ']'\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr ']'\n+ '[' -n '' ']'\n+ REPLACEMENTS=\n+ IMAGE=unused\n+ IMAGE_PATH=containerImage\n+ STORAGE_REQUEST=10G\n+ INTERFACE_MTU=1500\n+ VLAN_START=20\n+ VLAN_STEP=1\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr ']'\n+ pushd /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr\n~/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr ~/src/github.com/openstack-k8s-operators/install_yamls\n+ cat\n+ [[ OpenStackControlPlane == \\O\\p\\e\\n\\S\\t\\a\\c\\k\\C\\o\\n\\t\\r\\o\\l\\P\\l\\a\\n\\e ]]\n+ [[ '' != '' ]]\n+ IFS=,\n+ read -ra IMAGES\n+ IFS=,\n+ read -ra IMAGE_PATHS\n+ '[' 1 '!=' 1 ']'\n+ (( i=0 ))\n+ (( i < 1 ))\n+ SPEC_PATH=containerImage\n+ SPEC_VALUE=unused\n+ '[' unused '!=' unused ']'\n+ (( i++ ))\n+ (( i < 1 ))\n+ '[' -n '' ']'\n+ '[' OpenStackControlPlane == OpenStackControlPlane ']'\n+ cat\n+ '[' OpenStackControlPlane == Galera ']'\n+ '[' OpenStackControlPlane == NetConfig ']'\n+ '[' -n '' ']'\n+ [[ OpenStackControlPlane == \\O\\p\\e\\n\\S\\t\\a\\c\\k\\C\\o\\n\\t\\r\\o\\l\\P\\l\\a\\n\\e ]]\n+ [[ true == \\t\\r\\u\\e ]]\n+ cat\n+ [[ OpenStackControlPlane == \\O\\p\\e\\n\\S\\t\\a\\c\\k\\C\\o\\n\\t\\r\\o\\l\\P\\l\\a\\n\\e ]]\n+ '[' -z true ']'\n+ cat\n+ '[' -n '' ']'\n+ '[' -z true ']'\n+ '[' -n true ']'\n+ '[' -n '' ']'\n+ '[' -n '' ']'\n+ kustomization_add_resources\n+ echo merge config dir\nmerge config dir\n++ find . -type f -name '*.yaml'\n++ grep -v kustomization\n+ yamls=./core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml\n+ for y in ${yamls[@]}\n+ kustomize edit add resource ./core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml\n+ popd\n~/src/github.com/openstack-k8s-operators/install_yamls\n# Wait until OLM installs openstack CRDs\ntimeout 500s bash -c \"while ! (oc get crd openstacks.operator.openstack.org); do sleep 1; done\"\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nError from server (NotFound): customresourcedefinitions.apiextensions.k8s.io \"openstacks.operator.openstack.org\" not found\nNAME CREATED AT\nopenstacks.operator.openstack.org 2026-03-16T13:20:45Z\nmake openstack_init\nmake[1]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nerror: the server doesn't have a resource type \"openstackversion\"\n# call make_openstack if it isn't already\nbash -c '(oc get subscription -n openstack-operators openstack-operator || make openstack) || true'\nNAME PACKAGE SOURCE CHANNEL\nopenstack-operator \ openstack-operator openstack-operator-index alpha\ntimeout 500s bash -c 'until $(oc get csv -l operators.coreos.com/openstack-operator.openstack-operators -n openstack-operators | grep -q Succeeded); do sleep 1; done'\nNo resources found in openstack-operators namespace.\nbash -c 'test -f /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/operator_v1beta1_openstack.yaml || make openstack_repo'\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/operator_v1beta1_openstack.yaml\nopenstack.operator.openstack.org/openstack created\n# FIXME: Ugly hack to prevent OpenStack Baremetal operator from crashing when BMO is not installed\nif ! echo \"\" | grep -q \"baremetalhosts.metal3.io\"; then \\\n\tcurl -o /tmp/bmh_crd.yaml --retry-all-errors --retry 5 --retry-delay 10 https://raw.githubusercontent.com/metal3-io/baremetal-operator/refs/heads/main/config/base/crds/bases/metal3.io_baremetalhosts.yaml; \\\n\toc apply -f /tmp/bmh_crd.yaml; \\\n\trm -f /tmp/bmh_crd.yaml; \\\nfi\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload \ Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 \ 0 --:--:-- --:--:-- --:--:-- 0\r100 65898 100 65898 0 0 431k \ 0 --:--:-- --:--:-- --:--:-- 434k\ncustomresourcedefinition.apiextensions.k8s.io/baremetalhosts.metal3.io created\noc wait openstack/openstack -n openstack-operators --for condition=Ready --timeout=500s\nopenstack.operator.openstack.org/openstack condition met\ntimeout 500s bash -c \"while ! (oc get services -n openstack-operators | grep -E '^(openstack|openstack-baremetal|infra)-operator-webhook-service' | wc -l | grep -q -e 3); do sleep 5; done\"\nmake[1]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake wait\nmake[1]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/operator-wait.sh\n+ TIMEOUT=500s\n+++ dirname scripts/operator-wait.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' openstack = rabbitmq ']'\n+ pushd /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n~/src/github.com/openstack-k8s-operators/install_yamls/scripts ~/src/github.com/openstack-k8s-operators/install_yamls\n+ timeout 500s bash -c 'until [ \"$(bash ./get-operator-status.sh)\" == \"Succeeded\" ]; do sleep 5; done'\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' openstack = rabbitmq-cluster ']'\n+ DEPL_NAME=openstack-operator-controller-manager\n++ oc get -n openstack-operators deployment openstack-operator-controller-manager -o json\n++ jq -e .status.availableReplicas\n+ REPLICAS=1\n+ '[' 1 '!=' 1 ']'\n+ echo Succeeded\n+ exit 0\n+ rc=0\n+ popd\n~/src/github.com/openstack-k8s-operators/install_yamls\n+ exit 0\nmake[1]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake wait\nmake[1]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/operator-wait.sh\n+ TIMEOUT=500s\n+++ dirname scripts/operator-wait.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' openstack = rabbitmq ']'\n+ pushd /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n~/src/github.com/openstack-k8s-operators/install_yamls/scripts ~/src/github.com/openstack-k8s-operators/install_yamls\n+ timeout 500s bash -c 'until [ \"$(bash ./get-operator-status.sh)\" == \"Succeeded\" ]; do sleep 5; done'\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' openstack = rabbitmq-cluster ']'\n+ DEPL_NAME=openstack-operator-controller-manager\n++ oc get -n openstack-operators deployment openstack-operator-controller-manager -o json\n++ jq -e .status.availableReplicas\n+ REPLICAS=1\n+ '[' 1 '!=' 1 ']'\n+ echo Succeeded\n+ exit 0\n+ rc=0\n+ popd\n~/src/github.com/openstack-k8s-operators/install_yamls\n+ exit 0\nmake[1]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake wait\nmake[1]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/operator-wait.sh\n+ TIMEOUT=500s\n+++ dirname scripts/operator-wait.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' openstack = rabbitmq ']'\n+ pushd /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n~/src/github.com/openstack-k8s-operators/install_yamls/scripts ~/src/github.com/openstack-k8s-operators/install_yamls\n+ timeout 500s bash -c 'until [ \"$(bash ./get-operator-status.sh)\" == \"Succeeded\" ]; do sleep 5; done'\n+ '[' -z openstack-operators ']'\n+ '[' -z openstack ']'\n+ '[' openstack = rabbitmq-cluster ']'\n+ DEPL_NAME=openstack-operator-controller-manager\n++ oc get -n openstack-operators deployment openstack-operator-controller-manager -o json\n++ jq -e .status.availableReplicas\n+ REPLICAS=1\n+ '[' 1 '!=' 1 ']'\n+ echo Succeeded\n+ exit 0\n+ rc=0\n+ popd\n~/src/github.com/openstack-k8s-operators/install_yamls\n+ exit 0\nmake[1]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake openstack_kuttl_run\nmake[1]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nset -e; \\\nfor test_dir in ctlplane-basic-deployment ctlplane-basic-deployment-with-appcred ctlplane-basic-deployment-with-nicMappings ctlplane-collapsed ctlplane-galera-3replicas ctlplane-nodeselectors ctlplane-staged-deployment ctlplane-tls-cert-rotation ctlplane-tls-custom-issuers ctlplane-tls-custom-route dataplane-create-test dataplane-deploy-global-service-test dataplane-deploy-multiple-secrets dataplane-deploy-no-nodes-test dataplane-deploy-tls-test dataplane-extramounts dataplane-multinode-nodeset-create-test dataplane-service-config dataplane-service-custom-image dataplane-service-failure; do \\\n oc delete osctlplane --all --namespace openstack-kuttl-tests; \\\n\tmake crc_storage_cleanup_with_retries; \\\n\tmake crc_storage_with_retries; \\\n\tkubectl-kuttl test --config /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/kuttl-test.yaml /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests --test ${test_dir}; \\\ndone\nNo resources found\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage_cleanup.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage created\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nNow using project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/cleanup-crc-pv.sh\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $6}'\n++ grep Bound\nNo resources found\n++ awk '{print $1}'\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\nNo resources found\nif oc get sc \"local-storage\"; then oc delete sc \"local-storage\"; fi\nNAME PROVISIONER RECLAIMPOLICY \ VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nlocal-storage kubernetes.io/no-provisioner \ Delete WaitForFirstConsumer true 5m4s\nstorageclass.storage.k8s.io \"local-storage\" deleted\nbash scripts/delete-pv.sh\n+++ dirname scripts/delete-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage created\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage created\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role created\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding created\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete\n++ set -ex\n++ NODE=crc\n++ OPERATION=delete\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/create-pv.sh\n+++ dirname scripts/create-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get pv -o json\n++ jq -r '.items[] | select(.status.phase | test(\"Released\")).metadata.name'\n+ released=\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create\n++ set -ex\n++ NODE=crc\n++ OPERATION=create\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nbash scripts/gen-crc-pv-kustomize.sh\n+ OUT=/home/zuul/ci-framework-data/artifacts/manifests\n+ '[' -z '\"local-storage\"' ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']'\n+ mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/crc\n+ PV_NUM=20\n+ STORAGE_CAPACITY=10\n++ oc get node -o name -l node-role.kubernetes.io/worker\n++ head -c-1\n++ sed -e 's|node/||'\n++ tr '\\n' ' '\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ cat\n+ for node in $NODE_NAMES\n++ seq -w 20\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml\nstorageclass.storage.k8s.io/local-storage created\nWarning: resource persistentvolumes/local-storage01-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage01-crc configured\nWarning: resource persistentvolumes/local-storage02-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage02-crc configured\nWarning: resource persistentvolumes/local-storage03-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage03-crc configured\nWarning: resource persistentvolumes/local-storage04-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage04-crc configured\nWarning: resource persistentvolumes/local-storage05-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage05-crc configured\nWarning: resource persistentvolumes/local-storage06-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage06-crc configured\nWarning: resource persistentvolumes/local-storage07-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage07-crc configured\nWarning: resource persistentvolumes/local-storage08-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage08-crc configured\nWarning: resource persistentvolumes/local-storage09-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage09-crc configured\nWarning: resource persistentvolumes/local-storage10-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage10-crc configured\nWarning: resource persistentvolumes/local-storage11-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage11-crc configured\nWarning: resource persistentvolumes/local-storage12-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.\npersistentvolume/local-storage12-crc configured\npersistentvolume/local-storage13-crc created\npersistentvolume/local-storage14-crc created\npersistentvolume/local-storage15-crc created\npersistentvolume/local-storage16-crc created\npersistentvolume/local-storage17-crc created\npersistentvolume/local-storage18-crc created\npersistentvolume/local-storage19-crc created\npersistentvolume/local-storage20-crc created\npersistentvolumeclaim/ansible-ee-logs created\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\n2026/03/16 13:22:26 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]\n=== RUN kuttl\n harness.go:463: starting setup\n harness.go:255: running tests using configured kubeconfig.\n harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443\n logger.go:42: 13:22:26 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]\n \ logger.go:42: 13:22:26 | | netconfig.network.openstack.org/netconfig created\n \ logger.go:42: 13:22:26 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]\n \ logger.go:42: 13:22:27 | | dnsmasq.network.openstack.org/dnsmasq created\n \ logger.go:42: 13:22:27 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then\n ssh-keygen -f ansibleee-ssh-key-id_rsa -N \"\" -t rsa -b 4096\n \ fi\n oc create secret generic dataplane-ansible-ssh-private-key-secret \\\n --save-config \\\n --dry-run=client \\\n --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \\\n --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \\\n --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \\\n -n openstack-kuttl-tests \\\n -o yaml | \\\n oc apply -f -\n ]\n logger.go:42: 13:22:27 | | Generating public/private rsa key pair.\n logger.go:42: 13:22:27 | | Your identification has been saved in ansibleee-ssh-key-id_rsa\n \ logger.go:42: 13:22:27 | | Your public key has been saved in ansibleee-ssh-key-id_rsa.pub\n \ logger.go:42: 13:22:27 | | The key fingerprint is:\n logger.go:42: 13:22:27 | | SHA256:dOaS3eduFIwRmdQzdm5h3DAhZhErn8G9x/tRxOwh9/k zuul@controller\n logger.go:42: 13:22:27 | | The key's randomart image is:\n logger.go:42: 13:22:27 | | +---[RSA 4096]----+\n logger.go:42: 13:22:27 | | | .OB=o.|\n logger.go:42: 13:22:27 | | | +++=Bo|\n logger.go:42: 13:22:27 | | | . + +*oB=|\n logger.go:42: 13:22:27 | | | . * +.o==*|\n logger.go:42: 13:22:27 | | | S o + o+*|\n logger.go:42: 13:22:27 | | | . o..+|\n \ logger.go:42: 13:22:27 | | | ..oE|\n logger.go:42: 13:22:27 | | | .. o|\n logger.go:42: 13:22:27 | | | .. .|\n \ logger.go:42: 13:22:27 | | +----[SHA256]-----+\n logger.go:42: 13:22:27 | | secret/dataplane-ansible-ssh-private-key-secret created\n harness.go:363: running tests\n harness.go:75: going to run test suite with timeout of 1380 seconds for each step\n harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests\n=== RUN kuttl/harness\n=== RUN kuttl/harness/ctlplane-basic-deployment\n=== PAUSE kuttl/harness/ctlplane-basic-deployment\n=== RUN kuttl/harness/ctlplane-basic-deployment-with-appcred\n=== PAUSE kuttl/harness/ctlplane-basic-deployment-with-appcred\n=== RUN kuttl/harness/ctlplane-basic-deployment-with-nicMappings\n=== PAUSE kuttl/harness/ctlplane-basic-deployment-with-nicMappings\n=== CONT kuttl/harness/ctlplane-basic-deployment\n \ logger.go:42: 13:22:27 | ctlplane-basic-deployment | Skipping creation of user-supplied namespace: openstack-kuttl-tests\n logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | starting test step 1-deploy-openstack\n logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created\n logger.go:42: 13:27:17 | ctlplane-basic-deployment/1-deploy-openstack | test step completed 1-deploy-openstack\n \ logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | starting test step 2-deploy-custom-cacert-secret\n logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | running command: [sh -c oc apply -n $NAMESPACE -f ../../common/custom-ca.yaml\n ]\n logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | secret/ca-custom-kuttl created\n logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | test step completed 2-deploy-custom-cacert-secret\n logger.go:42: 13:27:17 | ctlplane-basic-deployment/3-deploy-custom-cacert | starting test step 3-deploy-custom-cacert\n \ logger.go:42: 13:27:17 | ctlplane-basic-deployment/3-deploy-custom-cacert | running command: [sh -c oc kustomize ../../../../config/samples/tls/custom_ca | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/3-deploy-custom-cacert | openstackcontrolplane.core.openstack.org/openstack configured\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/3-deploy-custom-cacert | test step completed 3-deploy-custom-cacert\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | starting test step 4-\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | running command: [sh -c echo \"Checking ca-custom-kuttl.pem is present in combined-ca-bundle...\"\n \ CUSTOM_CERT_CONTENT=$(oc get secret ca-custom-kuttl -n $NAMESPACE -o jsonpath=\"{.data['ca-custom-kuttl\\.pem']}\" | base64 --decode | tr -d '\\n')\n TLS_BUNDLE_CONTENT=$(oc get secret combined-ca-bundle -n $NAMESPACE -o jsonpath=\"{.data['tls-ca-bundle\\.pem']}\" | base64 --decode | tr -d '\\n')\n if [[ \"$TLS_BUNDLE_CONTENT\" == *\"$CUSTOM_CERT_CONTENT\"* ]]; then\n echo \"OK\"\n exit 0\n else\n echo \"Not present\"\n exit 1\n fi\n ]\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | Checking ca-custom-kuttl.pem is present in combined-ca-bundle...\n \ logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | OK\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | test step completed 4-\n logger.go:42: 13:27:21 | ctlplane-basic-deployment/5-cleanup | starting test step 5-cleanup\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | running command: [sh -c oc delete --ignore-not-found=true -n $NAMESPACE pvc \\\n srv-swift-storage-0\n \ oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE\n \ oc delete secret -l service-cert -n $NAMESPACE\n oc delete secret -l ca-cert -n $NAMESPACE\n ]\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"combined-ca-bundle\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-barbican-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-barbican-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-barbican-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-ceilometer-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-cinder-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-cinder-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-cinder-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-galera-openstack-cell1-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-galera-openstack-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-glance-default-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-glance-default-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-glance-default-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-keystone-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-keystone-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-keystone-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-kube-state-metrics-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-memcached-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-neutron-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-neutron-ovndbs\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-neutron-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-neutron-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret \"cert-nova-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-nova-novncproxy-cell1-vencrypt\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-nova-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-nova-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-ovn-metrics\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-ovndbcluster-nb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-ovndbcluster-sb-ovndbs\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-ovnnorthd-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-placement-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-placement-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-placement-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-rabbitmq-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-rabbitmq-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-swift-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-swift-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret \"cert-swift-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret \"rootca-internal\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret \"rootca-libvirt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret \"rootca-ovn\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret \"rootca-public\" deleted from openstack-kuttl-tests namespace\nWarning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice\n logger.go:42: 13:28:01 | ctlplane-basic-deployment/5-cleanup | test step completed 5-cleanup\n \ logger.go:42: 13:28:01 | ctlplane-basic-deployment | skipping kubernetes event logging\n=== CONT kuttl/harness/ctlplane-basic-deployment-with-nicMappings\n logger.go:42: 13:28:01 | ctlplane-basic-deployment-with-nicMappings | Skipping creation of user-supplied namespace: openstack-kuttl-tests\n logger.go:42: 13:28:01 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | starting test step 1-create-nic-mappings\n logger.go:42: 13:28:01 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | running command: [sh -c oc apply -n $NAMESPACE -f ../../../../config/samples/nad_datacentre.yaml\n \ ]\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | networkattachmentdefinition.k8s.cni.cncf.io/datacentre configured\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | test step completed 1-create-nic-mappings\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | starting test step 2-deploy-openstack\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created\n logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | test step completed 2-deploy-openstack\n logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | starting test step 3-add-ovn-nic-mappings\n logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | running command: [sh -c oc patch openstackcontrolplane -n $NAMESPACE openstack --type='json' -p='[{\n \"op\": \"replace\",\n \"path\": \"/spec/ovn/template/ovnController/nicMappings\",\n \ \"value\":{\"datacentre\":\"ospbr\"}\n }]'\n ]\n logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | test step completed 3-add-ovn-nic-mappings\n logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | starting test step 4-remove-ovn-nic-mappings\n logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c oc patch OpenStackControlPlane -n $NAMESPACE openstack --type='json' -p='[{\n \"op\": \"remove\",\n \"path\": \"/spec/ovn/template/ovnController/nicMappings\",\n \ }]'\n ]\n logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:25 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:26 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:27 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:28 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:30 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:31 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:32 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:33 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:34 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:36 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:37 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:38 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:39 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:40 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:42 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:43 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:44 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:45 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:47 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:48 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:49 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:50 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:51 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:53 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:54 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:56 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | test step completed 4-remove-ovn-nic-mappings\n logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | starting test step 5-cleanup\n logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | running command: [sh -c oc delete --ignore-not-found=true -n $NAMESPACE pvc \\\n \ srv-swift-storage-0\n oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE\n oc delete secret -l service-cert -n $NAMESPACE\n oc delete secret -l ca-cert -n $NAMESPACE\n ]\n logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"combined-ca-bundle\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-barbican-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-barbican-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-barbican-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ceilometer-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-cinder-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-cinder-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-cinder-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-galera-openstack-cell1-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-galera-openstack-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-glance-default-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-glance-default-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-glance-default-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-keystone-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-keystone-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-keystone-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-kube-state-metrics-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-memcached-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-novncproxy-cell1-vencrypt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovn-metrics\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovncontroller-ovndbs\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovndbcluster-nb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovndbcluster-sb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovnnorthd-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-placement-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-placement-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-placement-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-rabbitmq-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-rabbitmq-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-swift-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-swift-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-swift-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-internal\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-libvirt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-ovn\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-public\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | test step completed 5-cleanup\n logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-nicMappings | skipping kubernetes event logging\n=== CONT kuttl/harness/ctlplane-basic-deployment-with-appcred\n \ logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred | Skipping creation of user-supplied namespace: openstack-kuttl-tests\n logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | starting test step 1-deploy-openstack\n \ logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created\n logger.go:42: 13:38:01 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | test step completed 1-deploy-openstack\n logger.go:42: 13:38:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | starting test step 2-deploy-appcred-config\n logger.go:42: 13:38:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c oc kustomize ../../../../config/samples/applicationcredentials | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | openstackcontrolplane.core.openstack.org/openstack configured\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n }\n \n \ check_field() {\n local name=$1 field=$2 expected=$3\n local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n }\n \n \ check_roles() {\n local name=$1\n shift\n local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n done\n \ \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met\n \ logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.expirationDays = 730\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.gracePeriodDays = 364\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.roles = [admin service]\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.unrestricted = false\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-cinder (full custom overrides) ===\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-cinder to be Ready...\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-cinder condition met\n \ logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.expirationDays = 10\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.gracePeriodDays = 5\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.roles = [admin service]\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.unrestricted = true\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-glance (partial overrides) ===\n logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-glance to be Ready...\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met\n \ logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.expirationDays = 180\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.gracePeriodDays = 60\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.roles = [admin service]\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.unrestricted = false\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-swift (roles override) ===\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-swift to be Ready...\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-swift condition met\n \ logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.expirationDays = 730\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.gracePeriodDays = 364\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.roles = [service]\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.unrestricted = false\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-neutron (inherits defaults) ===\n logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-neutron to be Ready...\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-neutron condition met\n \ logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.expirationDays = 730\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.gracePeriodDays = 364\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.roles = [admin service]\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.unrestricted = false\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-placement (expiration override) ===\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-placement to be Ready...\n logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-placement condition met\n \ logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.expirationDays = 90\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.gracePeriodDays = 30\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.roles = [admin service]\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.unrestricted = false\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-nova (multiple roles) ===\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-nova to be Ready...\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-nova condition met\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.expirationDays = 730\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.gracePeriodDays = 364\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.roles = [admin service member]\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.unrestricted = false\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-ceilometer (telemetry/ceilometer) ===\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-ceilometer to be Ready...\n logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-ceilometer condition met\n \ logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.expirationDays = 45\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.gracePeriodDays = 20\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.roles = [service]\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.unrestricted = false\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | All ApplicationCredential CRs validated successfully\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | test step completed 2-deploy-appcred-config\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | starting test step 3-update-appcred-config\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c # Change barbican's expirationDays from the default (730) to 365\n oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \\\n '{\"spec\":{\"barbican\":{\"applicationCredential\":{\"expirationDays\":365,\"gracePeriodDays\":180}}}}'\n \ \n # Change glance's roles from [admin,service] to [service] only\n \ oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \\\n \ '{\"spec\":{\"glance\":{\"applicationCredential\":{\"roles\":[\"service\"]}}}}'\n \ ]\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual\n actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n }\n \n check_roles() {\n local name=$1\n \ shift\n local expected_roles=(\"$@\")\n local roles\n \ roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \ \n for role in \"${expected_roles[@]}\"; do\n if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n done\n \ \n local role_count\n role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n \ exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n \ echo \"Testing ApplicationCredential Spec Propagation\"\n echo \"=========================================\"\n \ echo\n \n # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----\n echo \"=== Verifying expirationDays propagation on ac-barbican ===\"\n wait_ready barbican\n check_field barbican expirationDays 365\n check_field barbican gracePeriodDays 180\n echo\n \n \ # ---- ac-glance: roles [admin,service] -> [service] ----\n echo \"=== Verifying roles propagation on ac-glance ===\"\n wait_ready glance\n \ check_roles glance \"service\"\n echo\n \n echo \"All spec changes propagated to existing ApplicationCredential CRs successfully\"]\n \ logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met\n \ logger.go:42: 13:38:17 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ERROR: ac-barbican.expirationDays: expected '365', got '730'\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n }\n \n \ check_field() {\n local name=$1 field=$2 expected=$3\n local actual\n actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles\n roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n for role in \"${expected_roles[@]}\"; do\n if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n done\n \n local role_count\n role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \ \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \ \n echo \"=========================================\"\n echo \"Testing ApplicationCredential Spec Propagation\"\n echo \"=========================================\"\n \ echo\n \n # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----\n echo \"=== Verifying expirationDays propagation on ac-barbican ===\"\n wait_ready barbican\n check_field barbican expirationDays 365\n check_field barbican gracePeriodDays 180\n echo\n \n \ # ---- ac-glance: roles [admin,service] -> [service] ----\n echo \"=== Verifying roles propagation on ac-glance ===\"\n wait_ready glance\n \ check_roles glance \"service\"\n echo\n \n echo \"All spec changes propagated to existing ApplicationCredential CRs successfully\"]\n \ logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met\n \ logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.expirationDays = 365\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.gracePeriodDays = 180\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying roles propagation on ac-glance ===\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-glance to be Ready...\n logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met\n \ logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-glance.roles = [service]\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | All spec changes propagated to existing ApplicationCredential CRs successfully\n \ logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | test step completed 3-update-appcred-config\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | starting test step 4-disable-appcred-config\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p '{\"spec\":{\"applicationCredential\":{\"enabled\":false}}}'\n ]\n \ logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n SERVICES=(barbican cinder glance swift neutron placement nova ceilometer)\n \n wait_deleted() {\n local kind=$1 name=$2 timeout=${3:-180}\n echo \"Waiting for $kind/$name to be deleted...\"\n local end=$((SECONDS + timeout))\n while [ $SECONDS -lt $end ]; do\n if ! oc get \"$kind\" \"$name\" -n \"$NS\" &>/dev/null; then\n echo \"✓ $kind/$name deleted\"\n return 0\n fi\n sleep 5\n done\n echo \"ERROR: $kind/$name still exists after ${timeout}s\"\n exit 1\n }\n \n \ echo \"=========================================\"\n echo \"Testing Application Credential Cleanup\"\n echo \"=========================================\"\n \ echo\n \n echo \"=== Verifying global ApplicationCredential is disabled ===\"\n global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n if [ \"$global_enabled\" != \"false\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'false', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = false\"\n echo\n \ \n echo \"=== Verifying AC CRs are deleted ===\"\n for svc in \"${SERVICES[@]}\"; do\n wait_deleted appcred \"ac-$svc\" 180\n done\n \ echo\n \n echo \"=== Verifying AC Secrets are cleaned up ===\"\n \ for svc in \"${SERVICES[@]}\"; do\n wait_deleted secret \"ac-$svc-secret\" 120\n done\n echo\n \n echo \"All ApplicationCredential CRs and Secrets cleaned up successfully\"]\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Testing Application Credential Cleanup\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying global ApplicationCredential is disabled ===\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = false\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC CRs are deleted ===\n logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-barbican to be deleted...\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-barbican deleted\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-cinder to be deleted...\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-cinder deleted\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-glance to be deleted...\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-glance deleted\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-swift to be deleted...\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-swift deleted\n logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-neutron to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-neutron deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-placement to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-placement deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-nova to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-nova deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-ceilometer to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-ceilometer deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC Secrets are cleaned up ===\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-barbican-secret to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-barbican-secret deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-cinder-secret to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-cinder-secret deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-glance-secret to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-glance-secret deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-swift-secret to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-swift-secret deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-neutron-secret to be deleted...\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-neutron-secret deleted\n logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-placement-secret to be deleted...\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-placement-secret deleted\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-nova-secret to be deleted...\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-nova-secret deleted\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-ceilometer-secret to be deleted...\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-ceilometer-secret deleted\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | All ApplicationCredential CRs and Secrets cleaned up successfully\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | test step completed 4-disable-appcred-config\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | starting test step 5-cleanup\n logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | running command: [sh -c oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE\n oc delete secret -l service-cert -n $NAMESPACE\n oc delete secret -l ca-cert -n $NAMESPACE\n ]\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"combined-ca-bundle\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-barbican-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-barbican-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-barbican-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ceilometer-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-cinder-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-cinder-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-cinder-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-galera-openstack-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-galera-openstack-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-glance-default-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-glance-default-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-glance-default-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-keystone-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-keystone-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-keystone-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-kube-state-metrics-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-memcached-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-novncproxy-cell1-vencrypt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovn-metrics\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovndbcluster-nb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovndbcluster-sb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovnnorthd-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-placement-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-placement-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-placement-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-rabbitmq-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-rabbitmq-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:28 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-swift-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:28 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-swift-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:28 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-swift-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-internal\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-libvirt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-ovn\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-public\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:39:01 | ctlplane-basic-deployment-with-appcred/5-cleanup | test step completed 5-cleanup\n logger.go:42: 13:39:01 | ctlplane-basic-deployment-with-appcred | skipping kubernetes event logging\n=== NAME kuttl\n harness.go:406: run tests finished\n harness.go:514: cleaning up\n harness.go:571: removing temp folder: \"\"\n--- PASS: kuttl (994.83s)\n --- PASS: kuttl/harness (0.00s)\n --- PASS: kuttl/harness/ctlplane-basic-deployment (334.64s)\n --- PASS: kuttl/harness/ctlplane-basic-deployment-with-nicMappings (329.77s)\n --- PASS: kuttl/harness/ctlplane-basic-deployment-with-appcred (329.38s)\nPASS\nNo resources found\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage_cleanup.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/cleanup-crc-pv.sh\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $6}'\n++ grep Bound\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0\n++ cut -d / -f 2\n+ NAME=mysql-db-openstack-galera-0\n+ oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-galera-0 --ignore-not-found\npersistentvolumeclaim \"mysql-db-openstack-galera-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0\n++ cut -d / -f 2\n+ NAME=mysql-db-openstack-cell1-galera-0\n+ oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-cell1-galera-0 --ignore-not-found\npersistentvolumeclaim \"mysql-db-openstack-cell1-galera-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/swift-swift-storage-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/swift-swift-storage-0\n++ cut -d / -f 2\n+ NAME=swift-swift-storage-0\n+ oc delete -n openstack-kuttl-tests pvc/swift-swift-storage-0 --ignore-not-found\npersistentvolumeclaim \"swift-swift-storage-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n++ cut -d / -f 2\n+ NAME=ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n+ oc delete -n openstack-kuttl-tests pvc/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 --ignore-not-found\npersistentvolumeclaim \"ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/glance-glance-default-external-api-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/glance-glance-default-external-api-0\n++ cut -d / -f 2\n+ NAME=glance-glance-default-external-api-0\n+ oc delete -n openstack-kuttl-tests pvc/glance-glance-default-external-api-0 --ignore-not-found\npersistentvolumeclaim \"glance-glance-default-external-api-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n++ cut -d / -f 2\n+ NAME=ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n+ oc delete -n openstack-kuttl-tests pvc/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 --ignore-not-found\npersistentvolumeclaim \"ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ cut -d / -f 2\n++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0\n+ NAME=glance-glance-default-internal-api-0\n+ oc delete -n openstack-kuttl-tests pvc/glance-glance-default-internal-api-0 --ignore-not-found\npersistentvolumeclaim \"glance-glance-default-internal-api-0\" deleted from openstack-kuttl-tests namespace\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $1}'\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage01-crc\npersistentvolume \"local-storage01-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage02-crc\npersistentvolume \"local-storage02-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage03-crc\npersistentvolume \"local-storage03-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage04-crc\npersistentvolume \"local-storage04-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage05-crc\npersistentvolume \"local-storage05-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage06-crc\npersistentvolume \"local-storage06-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage07-crc\npersistentvolume \"local-storage07-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage08-crc\npersistentvolume \"local-storage08-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage09-crc\npersistentvolume \"local-storage09-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage10-crc\npersistentvolume \"local-storage10-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage11-crc\npersistentvolume \"local-storage11-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage12-crc\npersistentvolume \"local-storage12-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage13-crc\npersistentvolume \"local-storage13-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage14-crc\npersistentvolume \"local-storage14-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage15-crc\npersistentvolume \"local-storage15-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage16-crc\npersistentvolume \"local-storage16-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage17-crc\npersistentvolume \"local-storage17-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage18-crc\npersistentvolume \"local-storage18-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage19-crc\npersistentvolume \"local-storage19-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage20-crc\npersistentvolume \"local-storage20-crc\" deleted\nif oc get sc \"local-storage\"; then oc delete sc \"local-storage\"; fi\nNAME \ PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION \ AGE\nlocal-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer \ true 16m\nstorageclass.storage.k8s.io \"local-storage\" deleted\nbash scripts/delete-pv.sh\n+++ dirname scripts/delete-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete\n++ set -ex\n++ NODE=crc\n++ OPERATION=delete\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/create-pv.sh\n+++ dirname scripts/create-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get pv -o json\n++ jq -r '.items[] | select(.status.phase | test(\"Released\")).metadata.name'\n+ released=\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create\n++ set -ex\n++ NODE=crc\n++ OPERATION=create\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nbash scripts/gen-crc-pv-kustomize.sh\n+ OUT=/home/zuul/ci-framework-data/artifacts/manifests\n+ '[' -z '\"local-storage\"' ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']'\n+ PV_NUM=20\n+ STORAGE_CAPACITY=10\n++ oc get node -o name -l node-role.kubernetes.io/worker\n++ head -c-1\n++ sed -e 's|node/||'\n++ tr '\\n' ' '\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ cat\n+ for node in $NODE_NAMES\n++ seq -w 20\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml\nstorageclass.storage.k8s.io/local-storage created\npersistentvolume/local-storage01-crc created\npersistentvolume/local-storage02-crc created\npersistentvolume/local-storage03-crc created\npersistentvolume/local-storage04-crc created\npersistentvolume/local-storage05-crc created\npersistentvolume/local-storage06-crc created\npersistentvolume/local-storage07-crc created\npersistentvolume/local-storage08-crc created\npersistentvolume/local-storage09-crc created\npersistentvolume/local-storage10-crc created\npersistentvolume/local-storage11-crc created\npersistentvolume/local-storage12-crc created\npersistentvolume/local-storage13-crc created\npersistentvolume/local-storage14-crc created\npersistentvolume/local-storage15-crc created\npersistentvolume/local-storage16-crc created\npersistentvolume/local-storage17-crc created\npersistentvolume/local-storage18-crc created\npersistentvolume/local-storage19-crc created\npersistentvolume/local-storage20-crc created\npersistentvolumeclaim/ansible-ee-logs unchanged\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\n2026/03/16 13:39:20 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]\n=== RUN kuttl\n harness.go:463: starting setup\n harness.go:255: running tests using configured kubeconfig.\n harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443\n logger.go:42: 13:39:20 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]\n \ logger.go:42: 13:39:20 | | netconfig.network.openstack.org/netconfig configured\n \ logger.go:42: 13:39:20 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]\n \ logger.go:42: 13:39:21 | | dnsmasq.network.openstack.org/dnsmasq configured\n \ logger.go:42: 13:39:21 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then\n ssh-keygen -f ansibleee-ssh-key-id_rsa -N \"\" -t rsa -b 4096\n \ fi\n oc create secret generic dataplane-ansible-ssh-private-key-secret \\\n --save-config \\\n --dry-run=client \\\n --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \\\n --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \\\n --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \\\n -n openstack-kuttl-tests \\\n -o yaml | \\\n oc apply -f -\n ]\n logger.go:42: 13:39:21 | | secret/dataplane-ansible-ssh-private-key-secret unchanged\n harness.go:363: running tests\n harness.go:75: going to run test suite with timeout of 1380 seconds for each step\n harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests\n=== RUN kuttl/harness\n=== RUN kuttl/harness/ctlplane-basic-deployment-with-appcred\n=== PAUSE kuttl/harness/ctlplane-basic-deployment-with-appcred\n=== CONT kuttl/harness/ctlplane-basic-deployment-with-appcred\n \ logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred | Skipping creation of user-supplied namespace: openstack-kuttl-tests\n logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | starting test step 1-deploy-openstack\n \ logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | test step completed 1-deploy-openstack\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | starting test step 2-deploy-appcred-config\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c oc kustomize ../../../../config/samples/applicationcredentials | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | openstackcontrolplane.core.openstack.org/openstack configured\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n }\n \n \ check_field() {\n local name=$1 field=$2 expected=$3\n local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n }\n \n \ check_roles() {\n local name=$1\n shift\n local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n done\n \ \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:43:54 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org \"ac-barbican\" not found\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n # Check each expected role is present\n for role in \"${expected_roles[@]}\"; do\n \ if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n \ done\n \n # Check role count matches\n local role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n echo \"Testing Application Credential CRs\"\n echo \"=========================================\"\n echo\n \ \n echo \"=== Checking global ApplicationCredential is enabled ===\"\n \ global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n \ if [ \"$global_enabled\" != \"true\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'true', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\"\n echo\n \ \n # ---- ac-barbican ----\n # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false\n echo \"=== Testing ac-barbican (pure defaults) ===\"\n wait_ready barbican\n check_field barbican expirationDays 730\n check_field barbican gracePeriodDays 364\n \ check_roles barbican \"admin\" \"service\"\n check_field barbican unrestricted \"false\"\n echo\n \n # ---- ac-cinder ----\n \ # Full custom overrides\n echo \"=== Testing ac-cinder (full custom overrides) ===\"\n wait_ready cinder\n check_field cinder expirationDays 10\n check_field cinder gracePeriodDays 5\n check_roles cinder \"admin\" \"service\"\n check_field cinder unrestricted \"true\"\n echo\n \n \ # ---- ac-glance ----\n # Partial overrides (expiration values only)\n \ echo \"=== Testing ac-glance (partial overrides) ===\"\n wait_ready glance\n check_field glance expirationDays 180\n check_field glance gracePeriodDays 60\n check_roles glance \"admin\" \"service\"\n check_field glance unrestricted \"false\"\n echo\n \n # ---- ac-swift ----\n \ # Role override only\n echo \"=== Testing ac-swift (roles override) ===\"\n wait_ready swift\n check_field swift expirationDays 730\n \ check_field swift gracePeriodDays 364\n check_roles swift \"service\"\n \ check_field swift unrestricted \"false\"\n echo\n \n # ---- ac-neutron ----\n # Inherits all defaults\n echo \"=== Testing ac-neutron (inherits defaults) ===\"\n wait_ready neutron\n check_field neutron expirationDays 730\n check_field neutron gracePeriodDays 364\n check_roles neutron \"admin\" \"service\"\n check_field neutron unrestricted \"false\"\n \ echo\n \n # ---- ac-placement ----\n # Custom expiration only\n echo \"=== Testing ac-placement (expiration override) ===\"\n wait_ready placement\n check_field placement expirationDays 90\n check_field placement gracePeriodDays 30\n check_roles placement \"admin\" \"service\"\n \ check_field placement unrestricted \"false\"\n echo\n \n # ---- ac-nova ----\n # Multiple roles\n echo \"=== Testing ac-nova (multiple roles) ===\"\n wait_ready nova\n check_field nova expirationDays 730\n check_field nova gracePeriodDays 364\n check_roles nova \"admin\" \"service\" \"member\"\n check_field nova unrestricted \"false\"\n echo\n \ \n # ---- ac-ceilometer ----\n # Telemetry/Ceilometer component (enabled by default in base sample)\n echo \"=== Testing ac-ceilometer (telemetry/ceilometer) ===\"\n wait_ready ceilometer\n check_field ceilometer expirationDays 45\n check_field ceilometer gracePeriodDays 20\n check_roles ceilometer \"service\"\n check_field ceilometer unrestricted \"false\"\n echo\n \ \n echo \"All ApplicationCredential CRs validated successfully\"]\n \ logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===\n logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:44:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met\n \ logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.expirationDays = 730\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.gracePeriodDays = 364\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.roles = [admin service]\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.unrestricted = false\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-cinder (full custom overrides) ===\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-cinder to be Ready...\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-cinder condition met\n \ logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.expirationDays = 10\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.gracePeriodDays = 5\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.roles = [admin service]\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.unrestricted = true\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-glance (partial overrides) ===\n logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-glance to be Ready...\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met\n \ logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.expirationDays = 180\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.gracePeriodDays = 60\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.roles = [admin service]\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.unrestricted = false\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-swift (roles override) ===\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-swift to be Ready...\n logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-swift condition met\n \ logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.expirationDays = 730\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.gracePeriodDays = 364\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.roles = [service]\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.unrestricted = false\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-neutron (inherits defaults) ===\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-neutron to be Ready...\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-neutron condition met\n \ logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.expirationDays = 730\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.gracePeriodDays = 364\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.roles = [admin service]\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.unrestricted = false\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-placement (expiration override) ===\n logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-placement to be Ready...\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-placement condition met\n \ logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.expirationDays = 90\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.gracePeriodDays = 30\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.roles = [admin service]\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.unrestricted = false\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-nova (multiple roles) ===\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-nova to be Ready...\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-nova condition met\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.expirationDays = 730\n logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.gracePeriodDays = 364\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.roles = [admin service member]\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.unrestricted = false\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-ceilometer (telemetry/ceilometer) ===\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-ceilometer to be Ready...\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-ceilometer condition met\n \ logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.expirationDays = 45\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.gracePeriodDays = 20\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.roles = [service]\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.unrestricted = false\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | \n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | All ApplicationCredential CRs validated successfully\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | test step completed 2-deploy-appcred-config\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | starting test step 3-update-appcred-config\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c # Change barbican's expirationDays from the default (730) to 365\n oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \\\n '{\"spec\":{\"barbican\":{\"applicationCredential\":{\"expirationDays\":365,\"gracePeriodDays\":180}}}}'\n \ \n # Change glance's roles from [admin,service] to [service] only\n \ oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \\\n \ '{\"spec\":{\"glance\":{\"applicationCredential\":{\"roles\":[\"service\"]}}}}'\n \ ]\n logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n \ wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n \ oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n \ }\n \n check_field() {\n local name=$1 field=$2 expected=$3\n \ local actual\n actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n }\n \n check_roles() {\n local name=$1\n \ shift\n local expected_roles=(\"$@\")\n local roles\n \ roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \ \n for role in \"${expected_roles[@]}\"; do\n if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n done\n \ \n local role_count\n role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n \ exit 1\n fi\n \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \n echo \"=========================================\"\n \ echo \"Testing ApplicationCredential Spec Propagation\"\n echo \"=========================================\"\n \ echo\n \n # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----\n echo \"=== Verifying expirationDays propagation on ac-barbican ===\"\n wait_ready barbican\n check_field barbican expirationDays 365\n check_field barbican gracePeriodDays 180\n echo\n \n \ # ---- ac-glance: roles [admin,service] -> [service] ----\n echo \"=== Verifying roles propagation on ac-glance ===\"\n wait_ready glance\n \ check_roles glance \"service\"\n echo\n \n echo \"All spec changes propagated to existing ApplicationCredential CRs successfully\"]\n \ logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met\n \ logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ERROR: ac-barbican.expirationDays: expected '365', got '730'\n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n wait_ready() {\n echo \"Waiting for appcred/ac-$1 to be Ready...\"\n oc wait appcred/ac-$1 -n \"$NS\" --for=condition=Ready --timeout=180s\n }\n \n \ check_field() {\n local name=$1 field=$2 expected=$3\n local actual\n actual=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath=\"{.spec.$field}\" 2>/dev/null || echo \"\")\n if [ \"$actual\" != \"$expected\" ]; then\n \ echo \"ERROR: ac-$name.$field: expected '$expected', got '$actual'\"\n \ exit 1\n fi\n echo \"✓ ac-$name.$field = $expected\"\n \ }\n \n check_roles() {\n local name=$1\n shift\n \ local expected_roles=(\"$@\")\n local roles\n roles=$(oc get appcred ac-$name -n \"$NS\" -o jsonpath='{.spec.roles[*]}')\n \n for role in \"${expected_roles[@]}\"; do\n if [[ ! \" $roles \" =~ \" $role \" ]]; then\n echo \"ERROR: ac-$name: Role '$role' not found. Got: $roles\"\n exit 1\n fi\n done\n \n local role_count\n role_count=$(echo \"$roles\" | wc -w)\n if [ \"$role_count\" -ne \"${#expected_roles[@]}\" ]; then\n echo \"ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles\"\n exit 1\n fi\n \ \n echo \"✓ ac-$name.roles = [${expected_roles[*]}]\"\n }\n \ \n echo \"=========================================\"\n echo \"Testing ApplicationCredential Spec Propagation\"\n echo \"=========================================\"\n \ echo\n \n # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----\n echo \"=== Verifying expirationDays propagation on ac-barbican ===\"\n wait_ready barbican\n check_field barbican expirationDays 365\n check_field barbican gracePeriodDays 180\n echo\n \n \ # ---- ac-glance: roles [admin,service] -> [service] ----\n echo \"=== Verifying roles propagation on ac-glance ===\"\n wait_ready glance\n \ check_roles glance \"service\"\n echo\n \n echo \"All spec changes propagated to existing ApplicationCredential CRs successfully\"]\n \ logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation\n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================\n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===\n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...\n logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met\n \ logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.expirationDays = 365\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.gracePeriodDays = 180\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying roles propagation on ac-glance ===\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-glance to be Ready...\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met\n \ logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-glance.roles = [service]\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | \n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | All spec changes propagated to existing ApplicationCredential CRs successfully\n \ logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | test step completed 3-update-appcred-config\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | starting test step 4-disable-appcred-config\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p '{\"spec\":{\"applicationCredential\":{\"enabled\":false}}}'\n ]\n \ logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c set -euo pipefail\n NS=\"${NAMESPACE}\"\n \n SERVICES=(barbican cinder glance swift neutron placement nova ceilometer)\n \n wait_deleted() {\n local kind=$1 name=$2 timeout=${3:-180}\n echo \"Waiting for $kind/$name to be deleted...\"\n local end=$((SECONDS + timeout))\n while [ $SECONDS -lt $end ]; do\n if ! oc get \"$kind\" \"$name\" -n \"$NS\" &>/dev/null; then\n echo \"✓ $kind/$name deleted\"\n return 0\n fi\n sleep 5\n done\n echo \"ERROR: $kind/$name still exists after ${timeout}s\"\n exit 1\n }\n \n \ echo \"=========================================\"\n echo \"Testing Application Credential Cleanup\"\n echo \"=========================================\"\n \ echo\n \n echo \"=== Verifying global ApplicationCredential is disabled ===\"\n global_enabled=$(oc get openstackcontrolplane openstack -n \"$NS\" -o jsonpath='{.spec.applicationCredential.enabled}')\n if [ \"$global_enabled\" != \"false\" ]; then\n echo \"ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected 'false', got '$global_enabled'\"\n exit 1\n fi\n echo \"✓ OpenStackControlPlane.spec.applicationCredential.enabled = false\"\n echo\n \ \n echo \"=== Verifying AC CRs are deleted ===\"\n for svc in \"${SERVICES[@]}\"; do\n wait_deleted appcred \"ac-$svc\" 180\n done\n \ echo\n \n echo \"=== Verifying AC Secrets are cleaned up ===\"\n \ for svc in \"${SERVICES[@]}\"; do\n wait_deleted secret \"ac-$svc-secret\" 120\n done\n echo\n \n echo \"All ApplicationCredential CRs and Secrets cleaned up successfully\"]\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Testing Application Credential Cleanup\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying global ApplicationCredential is disabled ===\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = false\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC CRs are deleted ===\n logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-barbican to be deleted...\n logger.go:42: 13:44:16 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-barbican deleted\n logger.go:42: 13:44:16 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-cinder to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-cinder deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-glance to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-glance deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-swift to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-swift deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-neutron to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-neutron deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-placement to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-placement deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-nova to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-nova deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-ceilometer to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-ceilometer deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC Secrets are cleaned up ===\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-barbican-secret to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-barbican-secret deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-cinder-secret to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-cinder-secret deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-glance-secret to be deleted...\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-glance-secret deleted\n logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-swift-secret to be deleted...\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-swift-secret deleted\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-neutron-secret to be deleted...\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-neutron-secret deleted\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-placement-secret to be deleted...\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-placement-secret deleted\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-nova-secret to be deleted...\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-nova-secret deleted\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-ceilometer-secret to be deleted...\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-ceilometer-secret deleted\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | \n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | All ApplicationCredential CRs and Secrets cleaned up successfully\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | test step completed 4-disable-appcred-config\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/5-cleanup | starting test step 5-cleanup\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/5-cleanup | running command: [sh -c oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE\n oc delete secret -l service-cert -n $NAMESPACE\n oc delete secret -l ca-cert -n $NAMESPACE\n ]\n logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"combined-ca-bundle\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-barbican-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-barbican-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-barbican-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ceilometer-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-cinder-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-cinder-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-cinder-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-galera-openstack-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-galera-openstack-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-glance-default-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-glance-default-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-glance-default-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-keystone-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-keystone-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-keystone-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-kube-state-metrics-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-memcached-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-neutron-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-novncproxy-cell1-vencrypt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-nova-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovn-metrics\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovndbcluster-nb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovndbcluster-sb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-ovnnorthd-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-placement-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-placement-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-placement-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-rabbitmq-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-rabbitmq-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-swift-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-swift-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"cert-swift-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-internal\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-libvirt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-ovn\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret \"rootca-public\" deleted from openstack-kuttl-tests namespace\nWarning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice\n logger.go:42: 13:44:51 | ctlplane-basic-deployment-with-appcred/5-cleanup | test step completed 5-cleanup\n logger.go:42: 13:44:51 | ctlplane-basic-deployment-with-appcred | skipping kubernetes event logging\n=== NAME kuttl\n harness.go:406: run tests finished\n harness.go:514: cleaning up\n harness.go:571: removing temp folder: \"\"\n--- PASS: kuttl (331.69s)\n --- PASS: kuttl/harness (0.00s)\n --- PASS: kuttl/harness/ctlplane-basic-deployment-with-appcred (330.33s)\nPASS\nNo resources found\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage_cleanup.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/cleanup-crc-pv.sh\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $6}'\n++ grep Bound\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n++ cut -d / -f 2\n+ NAME=ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n+ oc delete -n openstack-kuttl-tests pvc/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 --ignore-not-found\npersistentvolumeclaim \"ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n++ cut -d / -f 2\n+ NAME=ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n+ oc delete -n openstack-kuttl-tests pvc/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 --ignore-not-found\npersistentvolumeclaim \"ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/swift-swift-storage-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/swift-swift-storage-0\n++ cut -d / -f 2\n+ NAME=swift-swift-storage-0\n+ oc delete -n openstack-kuttl-tests pvc/swift-swift-storage-0 --ignore-not-found\npersistentvolumeclaim \"swift-swift-storage-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0\n++ cut -d / -f 2\n+ NAME=mysql-db-openstack-cell1-galera-0\n+ oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-cell1-galera-0 --ignore-not-found\npersistentvolumeclaim \"mysql-db-openstack-cell1-galera-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0\n++ cut -d / -f 2\n+ NAME=glance-glance-default-internal-api-0\n+ oc delete -n openstack-kuttl-tests pvc/glance-glance-default-internal-api-0 --ignore-not-found\npersistentvolumeclaim \"glance-glance-default-internal-api-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/glance-glance-default-external-api-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/glance-glance-default-external-api-0\n++ cut -d / -f 2\n+ NAME=glance-glance-default-external-api-0\n+ oc delete -n openstack-kuttl-tests pvc/glance-glance-default-external-api-0 --ignore-not-found\npersistentvolumeclaim \"glance-glance-default-external-api-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0\n++ cut -d / -f 2\n+ NAME=mysql-db-openstack-galera-0\n+ oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-galera-0 --ignore-not-found\npersistentvolumeclaim \"mysql-db-openstack-galera-0\" deleted from openstack-kuttl-tests namespace\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $1}'\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage01-crc\npersistentvolume \"local-storage01-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage02-crc\npersistentvolume \"local-storage02-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage03-crc\npersistentvolume \"local-storage03-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage04-crc\npersistentvolume \"local-storage04-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage05-crc\npersistentvolume \"local-storage05-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage06-crc\npersistentvolume \"local-storage06-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage07-crc\npersistentvolume \"local-storage07-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage08-crc\npersistentvolume \"local-storage08-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage09-crc\npersistentvolume \"local-storage09-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage10-crc\npersistentvolume \"local-storage10-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage11-crc\npersistentvolume \"local-storage11-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage12-crc\npersistentvolume \"local-storage12-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage13-crc\npersistentvolume \"local-storage13-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage14-crc\npersistentvolume \"local-storage14-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage15-crc\npersistentvolume \"local-storage15-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage16-crc\npersistentvolume \"local-storage16-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage17-crc\npersistentvolume \"local-storage17-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage18-crc\npersistentvolume \"local-storage18-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage19-crc\npersistentvolume \"local-storage19-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage20-crc\npersistentvolume \"local-storage20-crc\" deleted\nif oc get sc \"local-storage\"; then oc delete sc \"local-storage\"; fi\nNAME PROVISIONER RECLAIMPOLICY \ VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nlocal-storage kubernetes.io/no-provisioner \ Delete WaitForFirstConsumer true 5m39s\nstorageclass.storage.k8s.io \"local-storage\" deleted\nbash scripts/delete-pv.sh\n+++ dirname scripts/delete-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete\n++ set -ex\n++ NODE=crc\n++ OPERATION=delete\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/create-pv.sh\n+++ dirname scripts/create-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get pv -o json\n++ jq -r '.items[] | select(.status.phase | test(\"Released\")).metadata.name'\n+ released=\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create\n++ set -ex\n++ NODE=crc\n++ OPERATION=create\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nbash scripts/gen-crc-pv-kustomize.sh\n+ OUT=/home/zuul/ci-framework-data/artifacts/manifests\n+ '[' -z '\"local-storage\"' ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']'\n+ PV_NUM=20\n+ STORAGE_CAPACITY=10\n++ oc get node -o name -l node-role.kubernetes.io/worker\n++ head -c-1\n++ sed -e 's|node/||'\n++ tr '\\n' ' '\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ cat\n+ for node in $NODE_NAMES\n++ seq -w 20\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml\nstorageclass.storage.k8s.io/local-storage created\npersistentvolume/local-storage01-crc created\npersistentvolume/local-storage02-crc created\npersistentvolume/local-storage03-crc created\npersistentvolume/local-storage04-crc created\npersistentvolume/local-storage05-crc created\npersistentvolume/local-storage06-crc created\npersistentvolume/local-storage07-crc created\npersistentvolume/local-storage08-crc created\npersistentvolume/local-storage09-crc created\npersistentvolume/local-storage10-crc created\npersistentvolume/local-storage11-crc created\npersistentvolume/local-storage12-crc created\npersistentvolume/local-storage13-crc created\npersistentvolume/local-storage14-crc created\npersistentvolume/local-storage15-crc created\npersistentvolume/local-storage16-crc created\npersistentvolume/local-storage17-crc created\npersistentvolume/local-storage18-crc created\npersistentvolume/local-storage19-crc created\npersistentvolume/local-storage20-crc created\npersistentvolumeclaim/ansible-ee-logs unchanged\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\n2026/03/16 13:45:10 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]\n=== RUN kuttl\n harness.go:463: starting setup\n harness.go:255: running tests using configured kubeconfig.\n harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443\n logger.go:42: 13:45:10 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]\n \ logger.go:42: 13:45:11 | | netconfig.network.openstack.org/netconfig configured\n \ logger.go:42: 13:45:11 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]\n \ logger.go:42: 13:45:11 | | dnsmasq.network.openstack.org/dnsmasq configured\n \ logger.go:42: 13:45:11 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then\n ssh-keygen -f ansibleee-ssh-key-id_rsa -N \"\" -t rsa -b 4096\n \ fi\n oc create secret generic dataplane-ansible-ssh-private-key-secret \\\n --save-config \\\n --dry-run=client \\\n --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \\\n --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \\\n --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \\\n -n openstack-kuttl-tests \\\n -o yaml | \\\n oc apply -f -\n ]\n logger.go:42: 13:45:12 | | secret/dataplane-ansible-ssh-private-key-secret unchanged\n harness.go:363: running tests\n harness.go:75: going to run test suite with timeout of 1380 seconds for each step\n harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests\n=== RUN kuttl/harness\n=== RUN kuttl/harness/ctlplane-basic-deployment-with-nicMappings\n=== PAUSE kuttl/harness/ctlplane-basic-deployment-with-nicMappings\n=== CONT kuttl/harness/ctlplane-basic-deployment-with-nicMappings\n \ logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings | Skipping creation of user-supplied namespace: openstack-kuttl-tests\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | starting test step 1-create-nic-mappings\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | running command: [sh -c oc apply -n $NAMESPACE -f ../../../../config/samples/nad_datacentre.yaml\n \ ]\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | networkattachmentdefinition.k8s.cni.cncf.io/datacentre unchanged\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | test step completed 1-create-nic-mappings\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | starting test step 2-deploy-openstack\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -\n ]\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created\n logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | test step completed 2-deploy-openstack\n logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | starting test step 3-add-ovn-nic-mappings\n logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | running command: [sh -c oc patch openstackcontrolplane -n $NAMESPACE openstack --type='json' -p='[{\n \"op\": \"replace\",\n \"path\": \"/spec/ovn/template/ovnController/nicMappings\",\n \ \"value\":{\"datacentre\":\"ospbr\"}\n }]'\n ]\n logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | test step completed 3-add-ovn-nic-mappings\n logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | starting test step 4-remove-ovn-nic-mappings\n logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c oc patch OpenStackControlPlane -n $NAMESPACE openstack --type='json' -p='[{\n \"op\": \"remove\",\n \"path\": \"/spec/ovn/template/ovnController/nicMappings\",\n \ }]'\n ]\n logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched\n logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:49:56 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:49:58 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)\n \ ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)\n if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then\n exit 0\n fi\n \ exit 1\n ]\n logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | test step completed 4-remove-ovn-nic-mappings\n logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | starting test step 5-cleanup\n logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | running command: [sh -c oc delete --ignore-not-found=true -n $NAMESPACE pvc \\\n \ srv-swift-storage-0\n oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE\n oc delete secret -l service-cert -n $NAMESPACE\n oc delete secret -l ca-cert -n $NAMESPACE\n ]\n logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"combined-ca-bundle\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-barbican-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-barbican-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-barbican-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ceilometer-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-cinder-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-cinder-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-cinder-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-galera-openstack-cell1-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-galera-openstack-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-glance-default-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-glance-default-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-glance-default-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-keystone-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-keystone-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-keystone-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-kube-state-metrics-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-memcached-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-neutron-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-route\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-novncproxy-cell1-public-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-novncproxy-cell1-vencrypt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-nova-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovn-metrics\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovncontroller-ovndbs\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovndbcluster-nb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovndbcluster-sb-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-ovnnorthd-ovndbs\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-placement-internal-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-placement-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-placement-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-rabbitmq-cell1-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-rabbitmq-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-swift-internal-svc\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-swift-public-route\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"cert-swift-public-svc\" deleted from openstack-kuttl-tests namespace\n \ logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-internal\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-libvirt\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-ovn\" deleted from openstack-kuttl-tests namespace\n logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret \"rootca-public\" deleted from openstack-kuttl-tests namespace\nWarning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice\n logger.go:42: 13:50:32 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | test step completed 5-cleanup\n logger.go:42: 13:50:32 | ctlplane-basic-deployment-with-nicMappings | skipping kubernetes event logging\n=== NAME kuttl\n harness.go:406: run tests finished\n harness.go:514: cleaning up\n harness.go:571: removing temp folder: \"\"\n--- PASS: kuttl (322.27s)\n --- PASS: kuttl/harness (0.00s)\n --- PASS: kuttl/harness/ctlplane-basic-deployment-with-nicMappings (320.82s)\nPASS\nNo resources found\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage_cleanup.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/cleanup-crc-pv.sh\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $6}'\n++ grep Bound\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0\n++ cut -d / -f 2\n+ NAME=mysql-db-openstack-cell1-galera-0\n+ oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-cell1-galera-0 --ignore-not-found\npersistentvolumeclaim \"mysql-db-openstack-cell1-galera-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n++ cut -d / -f 2\n+ NAME=ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\n+ oc delete -n openstack-kuttl-tests pvc/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 --ignore-not-found\npersistentvolumeclaim \"ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/glance-glance-default-external-api-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/glance-glance-default-external-api-0\n++ cut -d / -f 2\n+ NAME=glance-glance-default-external-api-0\n+ oc delete -n openstack-kuttl-tests pvc/glance-glance-default-external-api-0 --ignore-not-found\npersistentvolumeclaim \"glance-glance-default-external-api-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n++ cut -d / -f 2\n+ NAME=ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\n+ oc delete -n openstack-kuttl-tests pvc/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 --ignore-not-found\npersistentvolumeclaim \"ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0\n++ cut -d / -f 2\n+ NAME=glance-glance-default-internal-api-0\n+ oc delete -n openstack-kuttl-tests pvc/glance-glance-default-internal-api-0 --ignore-not-found\npersistentvolumeclaim \"glance-glance-default-internal-api-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0\n++ cut -d / -f 2\n+ NAME=mysql-db-openstack-galera-0\n+ oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-galera-0 --ignore-not-found\npersistentvolumeclaim \"mysql-db-openstack-galera-0\" deleted from openstack-kuttl-tests namespace\n+ for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'`\n++ echo openstack-kuttl-tests/swift-swift-storage-0\n++ cut -d / -f 1\n+ NS=openstack-kuttl-tests\n++ echo openstack-kuttl-tests/swift-swift-storage-0\n++ cut -d / -f 2\n+ NAME=swift-swift-storage-0\n+ oc delete -n openstack-kuttl-tests pvc/swift-swift-storage-0 --ignore-not-found\npersistentvolumeclaim \"swift-swift-storage-0\" deleted from openstack-kuttl-tests namespace\n++ oc get pv --selector provisioned-by=crc-devsetup --no-headers\n++ awk '{print $1}'\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage01-crc\npersistentvolume \"local-storage01-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage02-crc\npersistentvolume \"local-storage02-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage03-crc\npersistentvolume \"local-storage03-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage04-crc\npersistentvolume \"local-storage04-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage05-crc\npersistentvolume \"local-storage05-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage06-crc\npersistentvolume \"local-storage06-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage07-crc\npersistentvolume \"local-storage07-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage08-crc\npersistentvolume \"local-storage08-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage09-crc\npersistentvolume \"local-storage09-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage10-crc\npersistentvolume \"local-storage10-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage11-crc\npersistentvolume \"local-storage11-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage12-crc\npersistentvolume \"local-storage12-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage13-crc\npersistentvolume \"local-storage13-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage14-crc\npersistentvolume \"local-storage14-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage15-crc\npersistentvolume \"local-storage15-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage16-crc\npersistentvolume \"local-storage16-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage17-crc\npersistentvolume \"local-storage17-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage18-crc\npersistentvolume \"local-storage18-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage19-crc\npersistentvolume \"local-storage19-crc\" deleted\n+ for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'`\n+ oc delete pv/local-storage20-crc\npersistentvolume \"local-storage20-crc\" deleted\nif oc get sc \"local-storage\"; then oc delete sc \"local-storage\"; fi\nNAME \ PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION \ AGE\nlocal-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer \ true 5m29s\nstorageclass.storage.k8s.io \"local-storage\" deleted\nbash scripts/delete-pv.sh\n+++ dirname scripts/delete-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ oc apply -f -\n++ cat\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete\n++ set -ex\n++ NODE=crc\n++ OPERATION=delete\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/retry_make_crc_storage.sh 3\nmake[3]: Entering directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nbash scripts/gen-namespace.sh\n+ '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']'\n+ '[' -z crc-storage ']'\n+ OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml\nnamespace/crc-storage unchanged\ntimeout 500s bash -c \"while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done\"\nNAME DISPLAY NAME STATUS\ncrc-storage \ Active\noc project crc-storage\nAlready on project \"crc-storage\" on server \"https://api.crc.testing:6443\".\nbash scripts/create-pv.sh\n+++ dirname scripts/create-pv.sh\n++ cd scripts\n++ pwd -P\n+ SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh\n++ set -ex\n++ OPERATION=create\n++ cat\n++ oc apply -f -\nconfigmap/crc-storage unchanged\n++ cat\n++ oc apply -f -\nserviceaccount/crc-storage unchanged\n++ cat\n++ oc apply -f -\nrole.rbac.authorization.k8s.io/crc-storage-role unchanged\n++ cat\n++ oc apply -f -\nrolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged\n+ PV_NUM=20\n+ TIMEOUT=500s\n++ oc get pv -o json\n++ jq -r '.items[] | select(.status.phase | test(\"Released\")).metadata.name'\n+ released=\n++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}' -l node-role.kubernetes.io/worker\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ for node in $NODE_NAMES\n+ . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create\n++ set -ex\n++ NODE=crc\n++ OPERATION=create\n++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found\njob.batch \"crc-storage-crc\" deleted from crc-storage namespace\n++ cat\n++ oc apply -f -\nWarning: would violate PodSecurity \"restricted:latest\": privileged (container \"storage\" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container \"storage\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"storage\" must set securityContext.capabilities.drop=[\"ALL\"]), restricted volume types (volume \"node-mnt\" uses restricted volume type \"hostPath\"), runAsNonRoot != true (pod or container \"storage\" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container \"storage\" must not set runAsUser=0)\njob.batch/crc-storage-crc created\n+ oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s\njob.batch/crc-storage-crc condition met\nbash scripts/gen-crc-pv-kustomize.sh\n+ OUT=/home/zuul/ci-framework-data/artifacts/manifests\n+ '[' -z '\"local-storage\"' ']'\n+ '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']'\n+ PV_NUM=20\n+ STORAGE_CAPACITY=10\n++ oc get node -o name -l node-role.kubernetes.io/worker\n++ head -c-1\n++ sed -e 's|node/||'\n++ tr '\\n' ' '\n+ NODE_NAMES=crc\n+ '[' -z crc ']'\n+ cat\n+ for node in $NODE_NAMES\n++ seq -w 20\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ for i in `seq -w $PV_NUM`\n+ cat\n++ sed -e 's/^\"//' -e 's/\"$//'\n+ cat\noc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml\nstorageclass.storage.k8s.io/local-storage created\npersistentvolume/local-storage01-crc created\npersistentvolume/local-storage02-crc created\npersistentvolume/local-storage03-crc created\npersistentvolume/local-storage04-crc created\npersistentvolume/local-storage05-crc created\npersistentvolume/local-storage06-crc created\npersistentvolume/local-storage07-crc created\npersistentvolume/local-storage08-crc created\npersistentvolume/local-storage09-crc created\npersistentvolume/local-storage10-crc created\npersistentvolume/local-storage11-crc created\npersistentvolume/local-storage12-crc created\npersistentvolume/local-storage13-crc created\npersistentvolume/local-storage14-crc created\npersistentvolume/local-storage15-crc created\npersistentvolume/local-storage16-crc created\npersistentvolume/local-storage17-crc created\npersistentvolume/local-storage18-crc created\npersistentvolume/local-storage19-crc created\npersistentvolume/local-storage20-crc created\npersistentvolumeclaim/ansible-ee-logs unchanged\nmake[3]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake[2]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\n2026/03/16 13:50:51 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]\n=== RUN kuttl\n harness.go:463: starting setup\n harness.go:255: running tests using configured kubeconfig.\n harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443\n logger.go:42: 13:50:51 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]\n \ logger.go:42: 13:50:51 | | netconfig.network.openstack.org/netconfig configured\n \ logger.go:42: 13:50:51 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]\n \ logger.go:42: 13:50:52 | | dnsmasq.network.openstack.org/dnsmasq configured\n \ logger.go:42: 13:50:52 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then\n ssh-keygen -f ansibleee-ssh-key-id_rsa -N \"\" -t rsa -b 4096\n \ fi\n oc create secret generic dataplane-ansible-ssh-private-key-secret \\\n --save-config \\\n --dry-run=client \\\n --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \\\n --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \\\n --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \\\n -n openstack-kuttl-tests \\\n -o yaml | \\\n oc apply -f -\n ]\n logger.go:42: 13:50:53 | | secret/dataplane-ansible-ssh-private-key-secret unchanged\n harness.go:363: running tests\n harness.go:75: going to run test suite with timeout of 1380 seconds for each step\n harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests\n=== RUN kuttl/harness\n=== RUN kuttl/harness/ctlplane-collapsed\n=== PAUSE kuttl/harness/ctlplane-collapsed\n=== CONT kuttl/harness/ctlplane-collapsed\n \ logger.go:42: 13:50:53 | ctlplane-collapsed | Skipping creation of user-supplied namespace: openstack-kuttl-tests\n logger.go:42: 13:50:53 | ctlplane-collapsed/0-deps | starting test step 0-deps\n logger.go:42: 13:50:53 | ctlplane-collapsed/0-deps | running command: [sh -c oc apply -f ../../common/rhobs.yaml\n until oc api-resources | grep -q rhobs; do sleep 1; done\n ]\n logger.go:42: 13:50:53 | ctlplane-collapsed/0-deps | subscription.operators.coreos.com/cluster-observability-operator created\n logger.go:42: 13:51:07 | ctlplane-collapsed/0-deps | test step completed 0-deps\n logger.go:42: 13:51:07 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | starting test step 1-deploy-openstack-collapsed-cell\n logger.go:42: 13:51:07 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | running command: [sh -c oc apply -n $NAMESPACE -f ../../../../config/samples/core_v1beta1_openstackcontrolplane_collapsed_cell.yaml\n \ ]\n logger.go:42: 13:51:08 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!\n logger.go:42: 13:51:08 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | The OpenStackControlPlane \"openstack-collapsed-cell\" is invalid: metadata.name: Invalid value: \"openstack-collapsed-cell\": OpenStackControlPlane 'openstack-collapsed-cell' must have same name as the existing 'openstack' OpenStackVersion\n case.go:396: failed in step 1-deploy-openstack-collapsed-cell\n case.go:398: command \"oc apply -n $NAMESPACE -f ../../../../config/samples/core_v1beta1_o...\" failed, exit status 1\n logger.go:42: 13:51:08 | ctlplane-collapsed | skipping kubernetes event logging\n=== NAME kuttl\n harness.go:406: run tests finished\n harness.go:514: cleaning up\n harness.go:571: removing temp folder: \"\"\n--- FAIL: kuttl (16.56s)\n \ --- FAIL: kuttl/harness (0.00s)\n --- FAIL: kuttl/harness/ctlplane-collapsed (14.96s)\nFAIL\nmake[1]: *** [Makefile:2100: openstack_kuttl_run] Error 1\nmake[1]: Leaving directory '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls'\nmake: *** [Makefile:2117: openstack_kuttl] Error 2\n" stdout_lines: - ~/src/github.com/openstack-k8s-operators/install_yamls ~/ci-framework-data/artifacts - 'error: the server doesn''t have a resource type "openstackversion"' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z openstack-kuttl-tests ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/namespace.yaml - namespace/openstack-kuttl-tests created - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io openstack-kuttl-tests); do sleep 1; done" - NAME DISPLAY NAME STATUS - openstack-kuttl-tests Active - oc project openstack-kuttl-tests - Now using project "openstack-kuttl-tests" on server "https://api.crc.testing:6443". - bash scripts/gen-input-kustomize.sh - + OUT=/home/zuul/ci-framework-data/artifacts/manifests - + '[' -z openstack-kuttl-tests ']' - + '[' -z osp-secret ']' - + '[' -z 12345678 ']' - + '[' -z 1234567842 ']' - + '[' -z 767c3ed056cbaa3b9dfedb8c6f825bf0 ']' - + '[' -z sEFmdFjDUqRM2VemYslV5yGNWjokioJXsg8Nrlc3drU= ']' - + '[' -z COX8bmlKAWn56XCGMrKQJj7dgHNAOl6f ']' - + '[' -z openstack ']' - + '[' -z libvirt-secret ']' - + DIR=/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input - + pushd /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input - ~/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input ~/src/github.com/openstack-k8s-operators/install_yamls - + cat - oc get secret/osp-secret || oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/input | oc apply -f - - 'Error from server (NotFound): secrets "osp-secret" not found' - secret/libvirt-secret created - secret/octavia-ca-passphrase created - secret/osp-secret created - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/manila-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/manila/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists manila;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/heat-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/heat/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/horizon-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/horizon/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/nova-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nova/cr - oc rsh openstack-galera-0 mysql -u root --password=12345678 -ss -e "show databases like 'nova_%';" | xargs -I '{}' oc rsh openstack-galera-0 mysql -u root --password=12345678 -ss -e "flush tables; drop database if exists {};" - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator-redis /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra-redis/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/octavia-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/octavia/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists octavia;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/designate-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/designate/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists designate;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/neutron-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/neutron/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists neutron;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/ovn-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ovn/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/ironic-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/ironic/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists ironic;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists ironic_inspector;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/cinder-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/cinder/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists cinder;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/glance-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/glance/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists glance;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/placement-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/placement/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists placement;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift: no such file or directory' - No resources found - rm -Rf -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/swift-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/swift/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/barbican-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/barbican/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists barbican;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/keystone-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/keystone/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists keystone;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/mariadb-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/mariadb/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/telemetry-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/ceilometer-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/telemetry/cr - oc rsh -t openstack-galera-0 mysql -u root --password=12345678 -e "flush tables; drop database if exists aodh;" || true - 'Error from server (NotFound): pods "openstack-galera-0" not found' - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr - if oc get RabbitmqCluster; then oc delete --ignore-not-found=true RabbitmqCluster --all; fi - 'error: the server doesn''t have a resource type "RabbitmqCluster"' - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/rabbitmq-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/rabbitmq/cr - bash scripts/validate-marketplace.sh - + '[' -z 500s ']' - + OPERATOR_NAMESPACE=openshift-marketplace - + oc get pods -n openshift-marketplace - + grep CrashLoopBackOff - + '[' 1 -eq 0 ']' - + OPERATORS='openshift-cert-manager-operator kubernetes-nmstate-operator metallb-operator' - + for operator in $OPERATORS - + n=0 - + retries=20 - + true - + oc get packagemanifests -n openshift-marketplace - + grep openshift-cert-manager-operator - openshift-cert-manager-operator Red Hat Operators 134d - + '[' 0 -eq 0 ']' - + break - + for operator in $OPERATORS - + n=0 - + retries=20 - + true - + oc get packagemanifests -n openshift-marketplace - + grep kubernetes-nmstate-operator - kubernetes-nmstate-operator Red Hat Operators 134d - + '[' 0 -eq 0 ']' - + break - + for operator in $OPERATORS - + n=0 - + retries=20 - + true - + oc get packagemanifests -n openshift-marketplace - + grep metallb-operator - metallb-operator Red Hat Operators 134d - + '[' 0 -eq 0 ']' - + break - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z openshift-nmstate ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/namespace.yaml - namespace/openshift-nmstate created - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io openshift-nmstate); do sleep 1; done" - NAME DISPLAY NAME STATUS - openshift-nmstate Active - bash scripts/gen-olm-nmstate.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr - + echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op - OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op - + echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr - DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr - + cat - + cat - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/nmstate/op - operatorgroup.operators.coreos.com/openshift-nmstate-tn6k8 created - subscription.operators.coreos.com/kubernetes-nmstate-operator created - timeout 500s bash -c "while ! (oc get deployments/nmstate-operator -n openshift-nmstate); do sleep 10; done" - 'Error from server (NotFound): deployments.apps "nmstate-operator" not found' - 'Error from server (NotFound): deployments.apps "nmstate-operator" not found' - NAME READY UP-TO-DATE AVAILABLE AGE - nmstate-operator 0/1 1 0 8s - oc wait deployments/nmstate-operator -n openshift-nmstate --for condition=Available --timeout=500s - deployment.apps/nmstate-operator condition met - timeout 500s bash -c "while ! (oc wait pod -n openshift-apiserver -l apiserver=true --for condition=Ready); do sleep 10; done" - pod/apiserver-9ddfb9f55-f7gz7 condition met - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openshift-nmstate/nmstate/cr - nmstate.nmstate.io/nmstate created - timeout 500s bash -c "while ! (oc get pod --no-headers=true -l component=kubernetes-nmstate-handler -n openshift-nmstate| grep nmstate-handler); do sleep 10; done" - No resources found in openshift-nmstate namespace. - nmstate-handler-6f7qf 0/1 Running 0 10s - oc wait pod -n openshift-nmstate -l component=kubernetes-nmstate-handler --for condition=Ready --timeout=500s - pod/nmstate-handler-6f7qf condition met - timeout 500s bash -c "while ! (oc get deployments/nmstate-webhook -n openshift-nmstate); do sleep 10; done" - NAME READY UP-TO-DATE AVAILABLE AGE - nmstate-webhook 0/1 1 0 11s - oc wait deployments/nmstate-webhook -n openshift-nmstate --for condition=Available --timeout=500s - deployment.apps/nmstate-webhook condition met - WORKERS='crc' \ - bash scripts/gen-nncp.sh - + check_var_set DEPLOY_DIR - + [[ ! -v DEPLOY_DIR ]] - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr - + check_var_set WORKERS - + [[ ! -v WORKERS ]] - + check_var_set INTERFACE - + [[ ! -v INTERFACE ]] - + check_var_set BRIDGE_NAME - + [[ ! -v BRIDGE_NAME ]] - + check_var_set INTERFACE_MTU - + [[ ! -v INTERFACE_MTU ]] - + check_var_set VLAN_START - + [[ ! -v VLAN_START ]] - + check_var_set VLAN_STEP - + [[ ! -v VLAN_STEP ]] - + check_var_set VLAN_STEP - + [[ ! -v VLAN_STEP ]] - + check_var_set INTERNALAPI_PREFIX - + [[ ! -v INTERNALAPI_PREFIX ]] - + check_var_set STORAGE_PREFIX - + [[ ! -v STORAGE_PREFIX ]] - + check_var_set STORAGEMGMT_PREFIX - + [[ ! -v STORAGEMGMT_PREFIX ]] - + check_var_set TENANT_PREFIX - + [[ ! -v TENANT_PREFIX ]] - + check_var_set DESIGNATE_PREFIX - + [[ ! -v DESIGNATE_PREFIX ]] - + check_var_set DESIGNATE_EXT_PREFIX - + [[ ! -v DESIGNATE_EXT_PREFIX ]] - + '[' -n '' ']' - + echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr - DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr - + echo WORKERS crc - WORKERS crc - + echo INTERFACE enp7s0 - INTERFACE enp7s0 - + echo BRIDGE_NAME ospbr - BRIDGE_NAME ospbr - + echo INTERFACE_BGP_1 - INTERFACE_BGP_1 - + echo INTERFACE_BGP_2 - INTERFACE_BGP_2 - + echo INTERFACE_MTU 1440 - INTERFACE_MTU 1440 - + echo VLAN_START 20 - VLAN_START 20 - + echo VLAN_STEP 1 - VLAN_STEP 1 - + echo STORAGE_MACVLAN - STORAGE_MACVLAN - + '[' -n true ']' - + echo CTLPLANE_IP_ADDRESS_PREFIX 192.168.122 - CTLPLANE_IP_ADDRESS_PREFIX 192.168.122 - + echo CTLPLANE_IP_ADDRESS_SUFFIX 10 - CTLPLANE_IP_ADDRESS_SUFFIX 10 - + '[' -n '' ']' - + '[' -n '' ']' - + IP_ADDRESS_SUFFIX=5 - + IPV6_ADDRESS_SUFFIX=5 - + rm --force '/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr/*_nncp.yaml' - + internalapi_vlan_id=20 - + storage_vlan_id=21 - + tenant_vlan_id=22 - + storagemgmt_vlan_id=23 - + octavia_vlan_id=24 - + designate_vlan_id=25 - + designate_ext_vlan_id=26 - + for WORKER in ${WORKERS} - + cat - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + '[' -n '' ']' - + cat - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + '[' -n '' ']' - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + '[' -n '' ']' - + cat - + IP_ADDRESS_SUFFIX=6 - + IPV6_ADDRESS_SUFFIX=6 - + CTLPLANE_IP_ADDRESS_SUFFIX=11 - + CTLPLANE_IPV6_ADDRESS_SUFFIX=1 - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/nncp/cr/ - nodenetworkconfigurationpolicy.nmstate.io/enp7s0-crc created - timeout 240s bash -c "while ! (oc wait nncp -l osp/interface=enp7s0 --for jsonpath='{.status.conditions[0].reason}'=SuccessfullyConfigured); do sleep 10; done" - nodenetworkconfigurationpolicy.nmstate.io/enp7s0-crc condition met - if test -n "192.168.122.10"; then oc patch dns.operator/default --type merge -p '{"spec":{"upstreamResolvers":{"policy":"Sequential","upstreams":[{"type":"Network","address":"'192.168.122.10'","port":53},{"type":"SystemResolvConf"}]}}}'; fi - dns.operator.openshift.io/default patched - timeout 240s bash -c "while ! (oc wait dns.operator/default --for condition=available); do sleep 10; done" - dns.operator.openshift.io/default condition met - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z metallb-system ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/metallb-system - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/metallb-system ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/metallb-system - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/namespace.yaml - namespace/metallb-system created - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io metallb-system); do sleep 1; done" - NAME DISPLAY NAME STATUS - metallb-system Active - bash scripts/gen-olm-metallb.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr - + echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op - OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op - + echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr - DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr - + echo INTERFACE - INTERFACE - + cat - + cat - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/metallb/op - operatorgroup.operators.coreos.com/metallb-operator created - subscription.operators.coreos.com/metallb-operator-sub created - timeout 500s bash -c "while ! (oc get pod --no-headers=true -l control-plane=controller-manager -n metallb-system| grep metallb-operator-controller); do sleep 10; done" - No resources found in metallb-system namespace. - No resources found in metallb-system namespace. - metallb-operator-controller-manager-6cdcb85899-x7t65 0/1 ContainerCreating 0 5s - oc wait pod -n metallb-system --for condition=Ready -l control-plane=controller-manager --timeout=500s - pod/metallb-operator-controller-manager-6cdcb85899-x7t65 condition met - timeout 500s bash -c "while ! (oc get pod --no-headers=true -l component=webhook-server -n metallb-system| grep metallb-operator-webhook); do sleep 10; done" - metallb-operator-webhook-server-754d499d9c-wvks6 1/1 Running 0 38s - oc wait pod -n metallb-system --for condition=Ready -l component=webhook-server --timeout=500s - pod/metallb-operator-webhook-server-754d499d9c-wvks6 condition met - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/deploy_operator.yaml - metallb.metallb.io/metallb created - timeout 500s bash -c "while ! (oc get pod --no-headers=true -l component=speaker -n metallb-system | grep speaker); do sleep 10; done" - No resources found in metallb-system namespace. - speaker-ccvkx 1/2 Running 0 10s - oc wait pod -n metallb-system -l component=speaker --for condition=Ready --timeout=500s - pod/speaker-ccvkx condition met - make operator_namespace - 'make[1]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'error: the server doesn''t have a resource type "openstackversion"' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z cert-manager-operator ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/namespace.yaml - namespace/cert-manager-operator created - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io cert-manager-operator); do sleep 1; done" - NAME DISPLAY NAME STATUS - cert-manager-operator Active - oc project cert-manager-operator - Now using project "cert-manager-operator" on server "https://api.crc.testing:6443". - 'make[1]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-olm-cert-manager.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op ']' - + '[' -z cert-manager-operator ']' - + '[' -z stable-v1 ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op - + echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op - OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op - + echo OPERATOR_NAMESPACE cert-manager-operator - OPERATOR_NAMESPACE cert-manager-operator - + echo CHANNEL stable-v1 - CHANNEL stable-v1 - + cat - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/cert-manager-operator/cert-manager/op - operatorgroup.operators.coreos.com/cert-manager-operator-bccwx created - subscription.operators.coreos.com/openshift-cert-manager-operator created - while ! (oc get pod --no-headers=true -l name=cert-manager-operator -n cert-manager-operator| grep "cert-manager-operator"); do sleep 10; done - No resources found in cert-manager-operator namespace. - No resources found in cert-manager-operator namespace. - cert-manager-operator-controller-manager-7f6f97fb86-nm6kj 1/1 Running 0 8s - oc wait pod -n cert-manager-operator --for condition=Ready -l name=cert-manager-operator --timeout=300s - pod/cert-manager-operator-controller-manager-7f6f97fb86-nm6kj condition met - while ! (oc get pod --no-headers=true -l app=cainjector -n cert-manager | grep "cert-manager-cainjector"); do sleep 10; done - No resources found in cert-manager namespace. - cert-manager-cainjector-8966b78d4-9lvw8 1/1 Running 0 9s - oc wait pod -n cert-manager -l app=cainjector --for condition=Ready --timeout=300s - pod/cert-manager-cainjector-8966b78d4-9lvw8 condition met - while ! (oc get pod --no-headers=true -l app=webhook -n cert-manager | grep "cert-manager-webhook"); do sleep 10; done - cert-manager-webhook-597b96b99b-5xkqn 0/1 Running 0 10s - oc wait pod -n cert-manager -l app=webhook --for condition=Ready --timeout=300s - pod/cert-manager-webhook-597b96b99b-5xkqn condition met - while ! (oc get pod --no-headers=true -l app=cert-manager -n cert-manager | grep "cert-manager"); do sleep 10; done - No resources found in cert-manager namespace. - cert-manager-759f64656b-g2hjp 1/1 Running 0 7s - oc wait pod -n cert-manager -l app=cert-manager --for condition=Ready --timeout=300s - pod/cert-manager-759f64656b-g2hjp condition met - bash scripts/gen-netatt.sh - + check_var_set DEPLOY_DIR - + [[ ! -v DEPLOY_DIR ]] - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr - + check_var_set INTERFACE - + [[ ! -v INTERFACE ]] - + check_var_set BRIDGE_NAME - + [[ ! -v BRIDGE_NAME ]] - + check_var_set VLAN_START - + [[ ! -v VLAN_START ]] - + check_var_set VLAN_STEP - + [[ ! -v VLAN_STEP ]] - + '[' -z true ']' - + '[' -n true ']' - + '[' -n '' ']' - + '[' -n true ']' - + check_var_set INTERNALAPI_PREFIX - + [[ ! -v INTERNALAPI_PREFIX ]] - + check_var_set STORAGE_PREFIX - + [[ ! -v STORAGE_PREFIX ]] - + check_var_set STORAGEMGMT_PREFIX - + [[ ! -v STORAGEMGMT_PREFIX ]] - + check_var_set TENANT_PREFIX - + [[ ! -v TENANT_PREFIX ]] - + check_var_set DESIGNATE_PREFIX - + [[ ! -v DESIGNATE_PREFIX ]] - + check_var_set DESIGNATE_EXT_PREFIX - + [[ ! -v DESIGNATE_EXT_PREFIX ]] - + echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr - DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr - + echo INTERFACE enp7s0 - INTERFACE enp7s0 - + echo VLAN_START 20 - VLAN_START 20 - + echo VLAN_STEP 1 - VLAN_STEP 1 - + '[' -n true ']' - + echo CTLPLANE_IP_ADDRESS_PREFIX 192.168.122 - CTLPLANE_IP_ADDRESS_PREFIX 192.168.122 - + echo CTLPLANE_IP_ADDRESS_SUFFIX 10 - CTLPLANE_IP_ADDRESS_SUFFIX 10 - + echo 'INTERNALAPI_PREFIX 172.17.0' - INTERNALAPI_PREFIX 172.17.0 - + echo 'STORAGE_PREFIX 172.18.0' - STORAGE_PREFIX 172.18.0 - + echo 'STORAGEMGMT_PREFIX 172.20.0' - STORAGEMGMT_PREFIX 172.20.0 - + echo 'TENANT_PREFIX 172.19.0' - TENANT_PREFIX 172.19.0 - + echo 'DESIGNATE_PREFIX 172.28.0' - DESIGNATE_PREFIX 172.28.0 - + echo 'DESIGNATE_PREFIX 172.50.0' - DESIGNATE_PREFIX 172.50.0 - + '[' -n '' ']' - + cat - + '[' -n true ']' - + cat - + cat - + cat - + '[' -n true ']' - + cat - + cat - + cat - + '[' -n true ']' - + cat - + cat - + cat - + '[' -n true ']' - + cat - + cat - + cat - + cat - + '[' -n true ']' - + cat - + cat - + cat - + '[' -n true ']' - + cat - + cat - + cat - + cat - + '[' -n '' ']' - + '[' -n '' ']' - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/netattach/cr/ - networkattachmentdefinition.k8s.cni.cncf.io/ctlplane created - networkattachmentdefinition.k8s.cni.cncf.io/datacentre created - networkattachmentdefinition.k8s.cni.cncf.io/designate created - networkattachmentdefinition.k8s.cni.cncf.io/designateext created - networkattachmentdefinition.k8s.cni.cncf.io/internalapi created - networkattachmentdefinition.k8s.cni.cncf.io/octavia created - networkattachmentdefinition.k8s.cni.cncf.io/storage created - networkattachmentdefinition.k8s.cni.cncf.io/storagemgmt created - networkattachmentdefinition.k8s.cni.cncf.io/tenant created - oc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml - 'error: the path "/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml" does not exist' - 'make: [Makefile:2542: metallb_config_cleanup] Error 1 (ignored)' - oc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml - 'error: the path "/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml" does not exist' - 'make: [Makefile:2543: metallb_config_cleanup] Error 1 (ignored)' - oc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgppeers.yaml - 'error: the path "/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgppeers.yaml" does not exist' - 'make: [Makefile:2544: metallb_config_cleanup] Error 1 (ignored)' - oc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpadvertisement.yaml - 'error: the path "/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpadvertisement.yaml" does not exist' - 'make: [Makefile:2545: metallb_config_cleanup] Error 1 (ignored)' - oc delete --ignore-not-found=true -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpextras.yaml - 'error: the path "/home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpextras.yaml" does not exist' - 'make: [Makefile:2546: metallb_config_cleanup] Error 1 (ignored)' - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgppeers.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpadvertisement.yaml /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/bgpextras.yaml - bash scripts/gen-metallb-config.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr ']' - + '[' -z enp7s0 ']' - + '[' -z ospbr ']' - + '[' -z 64999 ']' - + '[' -z 64999 ']' - + '[' -z 100.65.4.1 ']' - + '[' -z 100.64.4.1 ']' - + '[' -z 172.30.4.2 ']' - + '[' -z true ']' - + echo DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr - DEPLOY_DIR /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr - + echo INTERFACE enp7s0 - INTERFACE enp7s0 - + echo CTLPLANE_METALLB_POOL 192.168.122.80-192.168.122.90 - CTLPLANE_METALLB_POOL 192.168.122.80-192.168.122.90 - + echo CTLPLANE_METALLB_IPV6_POOL fd00:aaaa::80-fd00:aaaa::90 - CTLPLANE_METALLB_IPV6_POOL fd00:aaaa::80-fd00:aaaa::90 - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + '[' -n true ']' - + cat - + '[' -n '' ']' - + cat - + cat - + cat - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/ipaddresspools.yaml - ipaddresspool.metallb.io/ctlplane created - ipaddresspool.metallb.io/internalapi created - ipaddresspool.metallb.io/storage created - ipaddresspool.metallb.io/tenant created - ipaddresspool.metallb.io/designateext created - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/metallb-system/metallb/cr/l2advertisement.yaml - l2advertisement.metallb.io/ctlplane created - l2advertisement.metallb.io/internalapi created - l2advertisement.metallb.io/storage created - l2advertisement.metallb.io/tenant created - l2advertisement.metallb.io/designateext created - bash scripts/gen-olm.sh - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' -z quay.io/openstack-k8s-operators/openstack-operator-index:latest ']' - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op - + OPERATOR_CHANNEL=alpha - + OPERATOR_SOURCE=openstack-operator-index - + OPERATOR_SOURCE_NAMESPACE=openstack-operators - + echo OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op - OPERATOR_DIR /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op - + echo OPERATOR_CHANNEL alpha - OPERATOR_CHANNEL alpha - + echo OPERATOR_SOURCE openstack-operator-index - OPERATOR_SOURCE openstack-operator-index - + echo OPERATOR_SOURCE_NAMESPACE openstack-operators - OPERATOR_SOURCE_NAMESPACE openstack-operators - + cat - + cat - + cat - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z openstack-operators ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/openstack-operators - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/namespace.yaml - 'Warning: resource namespaces/openstack-operators is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - namespace/openstack-operators configured - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io openstack-operators); do sleep 1; done" - NAME DISPLAY NAME STATUS - openstack-operators Active - oc project openstack-operators - Now using project "openstack-operators" on server "https://api.crc.testing:6443". - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op - catalogsource.operators.coreos.com/openstack-operator-index created - operatorgroup.operators.coreos.com/openstack created - subscription.operators.coreos.com/openstack-operator created - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr | oc delete --ignore-not-found=true -f - - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/infra-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/infra/cr - oc kustomize /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr | oc delete --ignore-not-found=true -f - || true - 'error: must build at directory: not a valid directory: evalsymlink failure on ''/home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr'' : lstat /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack: no such file or directory' - No resources found - rm -Rf /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr - mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/operator /home/zuul/ci-framework-data/artifacts/manifests/openstack-operators/openstack/op /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr - bash -c "test -d /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator || CHECKOUT_FROM_OPENSTACK_REF=false scripts/clone-operator-repo.sh" - 'Cloning repo: git clone -b main https://github.com/openstack-k8s-operators/openstack-operator.git openstack-operator' - Cloning into 'openstack-operator'... - cp /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr - bash scripts/gen-service-kustomize.sh - +++ dirname scripts/gen-service-kustomize.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/common.sh --source-only - ++ set -e - + '[' -z openstack-kuttl-tests ']' - + '[' -z OpenStackControlPlane ']' - + '[' -z osp-secret ']' - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr ']' - + '[' -n '' ']' - + REPLACEMENTS= - + IMAGE=unused - + IMAGE_PATH=containerImage - + STORAGE_REQUEST=10G - + INTERFACE_MTU=1500 - + VLAN_START=20 - + VLAN_STEP=1 - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr ']' - + pushd /home/zuul/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr - ~/ci-framework-data/artifacts/manifests/openstack-kuttl-tests/openstack/cr ~/src/github.com/openstack-k8s-operators/install_yamls - + cat - + [[ OpenStackControlPlane == \O\p\e\n\S\t\a\c\k\C\o\n\t\r\o\l\P\l\a\n\e ]] - + [[ '' != '' ]] - + IFS=, - + read -ra IMAGES - + IFS=, - + read -ra IMAGE_PATHS - + '[' 1 '!=' 1 ']' - + (( i=0 )) - + (( i < 1 )) - + SPEC_PATH=containerImage - + SPEC_VALUE=unused - + '[' unused '!=' unused ']' - + (( i++ )) - + (( i < 1 )) - + '[' -n '' ']' - + '[' OpenStackControlPlane == OpenStackControlPlane ']' - + cat - + '[' OpenStackControlPlane == Galera ']' - + '[' OpenStackControlPlane == NetConfig ']' - + '[' -n '' ']' - + [[ OpenStackControlPlane == \O\p\e\n\S\t\a\c\k\C\o\n\t\r\o\l\P\l\a\n\e ]] - + [[ true == \t\r\u\e ]] - + cat - + [[ OpenStackControlPlane == \O\p\e\n\S\t\a\c\k\C\o\n\t\r\o\l\P\l\a\n\e ]] - + '[' -z true ']' - + cat - + '[' -n '' ']' - + '[' -z true ']' - + '[' -n true ']' - + '[' -n '' ']' - + '[' -n '' ']' - + kustomization_add_resources - + echo merge config dir - merge config dir - ++ find . -type f -name '*.yaml' - ++ grep -v kustomization - + yamls=./core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml - + for y in ${yamls[@]} - + kustomize edit add resource ./core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml - + popd - ~/src/github.com/openstack-k8s-operators/install_yamls - '# Wait until OLM installs openstack CRDs' - timeout 500s bash -c "while ! (oc get crd openstacks.operator.openstack.org); do sleep 1; done" - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - 'Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "openstacks.operator.openstack.org" not found' - NAME CREATED AT - openstacks.operator.openstack.org 2026-03-16T13:20:45Z - make openstack_init - 'make[1]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'error: the server doesn''t have a resource type "openstackversion"' - '# call make_openstack if it isn''t already' - bash -c '(oc get subscription -n openstack-operators openstack-operator || make openstack) || true' - NAME PACKAGE SOURCE CHANNEL - openstack-operator openstack-operator openstack-operator-index alpha - timeout 500s bash -c 'until $(oc get csv -l operators.coreos.com/openstack-operator.openstack-operators -n openstack-operators | grep -q Succeeded); do sleep 1; done' - No resources found in openstack-operators namespace. - bash -c 'test -f /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/operator_v1beta1_openstack.yaml || make openstack_repo' - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/config/samples/operator_v1beta1_openstack.yaml - openstack.operator.openstack.org/openstack created - '# FIXME: Ugly hack to prevent OpenStack Baremetal operator from crashing when BMO is not installed' - if ! echo "" | grep -q "baremetalhosts.metal3.io"; then \ - "\tcurl -o /tmp/bmh_crd.yaml --retry-all-errors --retry 5 --retry-delay 10 https://raw.githubusercontent.com/metal3-io/baremetal-operator/refs/heads/main/config/base/crds/bases/metal3.io_baremetalhosts.yaml; \\" - "\toc apply -f /tmp/bmh_crd.yaml; \\" - "\trm -f /tmp/bmh_crd.yaml; \\" - fi - ' % Total % Received % Xferd Average Speed Time Time Time Current' - ' Dload Upload Total Spent Left Speed' - '' - ' 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0' - 100 65898 100 65898 0 0 431k 0 --:--:-- --:--:-- --:--:-- 434k - customresourcedefinition.apiextensions.k8s.io/baremetalhosts.metal3.io created - oc wait openstack/openstack -n openstack-operators --for condition=Ready --timeout=500s - openstack.operator.openstack.org/openstack condition met - timeout 500s bash -c "while ! (oc get services -n openstack-operators | grep -E '^(openstack|openstack-baremetal|infra)-operator-webhook-service' | wc -l | grep -q -e 3); do sleep 5; done" - 'make[1]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - make wait - 'make[1]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/operator-wait.sh - + TIMEOUT=500s - +++ dirname scripts/operator-wait.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' openstack = rabbitmq ']' - + pushd /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - ~/src/github.com/openstack-k8s-operators/install_yamls/scripts ~/src/github.com/openstack-k8s-operators/install_yamls - + timeout 500s bash -c 'until [ "$(bash ./get-operator-status.sh)" == "Succeeded" ]; do sleep 5; done' - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' openstack = rabbitmq-cluster ']' - + DEPL_NAME=openstack-operator-controller-manager - ++ oc get -n openstack-operators deployment openstack-operator-controller-manager -o json - ++ jq -e .status.availableReplicas - + REPLICAS=1 - + '[' 1 '!=' 1 ']' - + echo Succeeded - + exit 0 - + rc=0 - + popd - ~/src/github.com/openstack-k8s-operators/install_yamls - + exit 0 - 'make[1]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - make wait - 'make[1]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/operator-wait.sh - + TIMEOUT=500s - +++ dirname scripts/operator-wait.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' openstack = rabbitmq ']' - + pushd /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - ~/src/github.com/openstack-k8s-operators/install_yamls/scripts ~/src/github.com/openstack-k8s-operators/install_yamls - + timeout 500s bash -c 'until [ "$(bash ./get-operator-status.sh)" == "Succeeded" ]; do sleep 5; done' - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' openstack = rabbitmq-cluster ']' - + DEPL_NAME=openstack-operator-controller-manager - ++ oc get -n openstack-operators deployment openstack-operator-controller-manager -o json - ++ jq -e .status.availableReplicas - + REPLICAS=1 - + '[' 1 '!=' 1 ']' - + echo Succeeded - + exit 0 - + rc=0 - + popd - ~/src/github.com/openstack-k8s-operators/install_yamls - + exit 0 - 'make[1]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - make wait - 'make[1]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/operator-wait.sh - + TIMEOUT=500s - +++ dirname scripts/operator-wait.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' openstack = rabbitmq ']' - + pushd /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - ~/src/github.com/openstack-k8s-operators/install_yamls/scripts ~/src/github.com/openstack-k8s-operators/install_yamls - + timeout 500s bash -c 'until [ "$(bash ./get-operator-status.sh)" == "Succeeded" ]; do sleep 5; done' - + '[' -z openstack-operators ']' - + '[' -z openstack ']' - + '[' openstack = rabbitmq-cluster ']' - + DEPL_NAME=openstack-operator-controller-manager - ++ oc get -n openstack-operators deployment openstack-operator-controller-manager -o json - ++ jq -e .status.availableReplicas - + REPLICAS=1 - + '[' 1 '!=' 1 ']' - + echo Succeeded - + exit 0 - + rc=0 - + popd - ~/src/github.com/openstack-k8s-operators/install_yamls - + exit 0 - 'make[1]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - make openstack_kuttl_run - 'make[1]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - set -e; \ - for test_dir in ctlplane-basic-deployment ctlplane-basic-deployment-with-appcred ctlplane-basic-deployment-with-nicMappings ctlplane-collapsed ctlplane-galera-3replicas ctlplane-nodeselectors ctlplane-staged-deployment ctlplane-tls-cert-rotation ctlplane-tls-custom-issuers ctlplane-tls-custom-route dataplane-create-test dataplane-deploy-global-service-test dataplane-deploy-multiple-secrets dataplane-deploy-no-nodes-test dataplane-deploy-tls-test dataplane-extramounts dataplane-multinode-nodeset-create-test dataplane-service-config dataplane-service-custom-image dataplane-service-failure; do \ - ' oc delete osctlplane --all --namespace openstack-kuttl-tests; \' - "\tmake crc_storage_cleanup_with_retries; \\" - "\tmake crc_storage_with_retries; \\" - "\tkubectl-kuttl test --config /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/kuttl-test.yaml /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests --test ${test_dir}; \\" - done - No resources found - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage_cleanup.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage created - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Now using project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/cleanup-crc-pv.sh - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $6}' - ++ grep Bound - No resources found - ++ awk '{print $1}' - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - No resources found - if oc get sc "local-storage"; then oc delete sc "local-storage"; fi - NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE - local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer true 5m4s - storageclass.storage.k8s.io "local-storage" deleted - bash scripts/delete-pv.sh - +++ dirname scripts/delete-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage created - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage created - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role created - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding created - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete - ++ set -ex - ++ NODE=crc - ++ OPERATION=delete - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/create-pv.sh - +++ dirname scripts/create-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get pv -o json - ++ jq -r '.items[] | select(.status.phase | test("Released")).metadata.name' - + released= - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create - ++ set -ex - ++ NODE=crc - ++ OPERATION=create - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - bash scripts/gen-crc-pv-kustomize.sh - + OUT=/home/zuul/ci-framework-data/artifacts/manifests - + '[' -z '"local-storage"' ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']' - + mkdir -p /home/zuul/ci-framework-data/artifacts/manifests/crc - + PV_NUM=20 - + STORAGE_CAPACITY=10 - ++ oc get node -o name -l node-role.kubernetes.io/worker - ++ head -c-1 - ++ sed -e 's|node/||' - ++ tr '\n' ' ' - + NODE_NAMES=crc - + '[' -z crc ']' - + cat - + for node in $NODE_NAMES - ++ seq -w 20 - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml - storageclass.storage.k8s.io/local-storage created - 'Warning: resource persistentvolumes/local-storage01-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage01-crc configured - 'Warning: resource persistentvolumes/local-storage02-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage02-crc configured - 'Warning: resource persistentvolumes/local-storage03-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage03-crc configured - 'Warning: resource persistentvolumes/local-storage04-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage04-crc configured - 'Warning: resource persistentvolumes/local-storage05-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage05-crc configured - 'Warning: resource persistentvolumes/local-storage06-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage06-crc configured - 'Warning: resource persistentvolumes/local-storage07-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage07-crc configured - 'Warning: resource persistentvolumes/local-storage08-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage08-crc configured - 'Warning: resource persistentvolumes/local-storage09-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage09-crc configured - 'Warning: resource persistentvolumes/local-storage10-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage10-crc configured - 'Warning: resource persistentvolumes/local-storage11-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage11-crc configured - 'Warning: resource persistentvolumes/local-storage12-crc is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by oc apply. oc apply should only be used on resources created declaratively by either oc create --save-config or oc apply. The missing annotation will be patched automatically.' - persistentvolume/local-storage12-crc configured - persistentvolume/local-storage13-crc created - persistentvolume/local-storage14-crc created - persistentvolume/local-storage15-crc created - persistentvolume/local-storage16-crc created - persistentvolume/local-storage17-crc created - persistentvolume/local-storage18-crc created - persistentvolume/local-storage19-crc created - persistentvolume/local-storage20-crc created - persistentvolumeclaim/ansible-ee-logs created - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - '2026/03/16 13:22:26 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]' - === RUN kuttl - ' harness.go:463: starting setup' - ' harness.go:255: running tests using configured kubeconfig.' - ' harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443' - ' logger.go:42: 13:22:26 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]' - ' logger.go:42: 13:22:26 | | netconfig.network.openstack.org/netconfig created' - ' logger.go:42: 13:22:26 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]' - ' logger.go:42: 13:22:27 | | dnsmasq.network.openstack.org/dnsmasq created' - ' logger.go:42: 13:22:27 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then' - ' ssh-keygen -f ansibleee-ssh-key-id_rsa -N "" -t rsa -b 4096' - ' fi' - ' oc create secret generic dataplane-ansible-ssh-private-key-secret \' - ' --save-config \' - ' --dry-run=client \' - ' --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \' - ' --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \' - ' --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \' - ' -n openstack-kuttl-tests \' - ' -o yaml | \' - ' oc apply -f -' - ' ]' - ' logger.go:42: 13:22:27 | | Generating public/private rsa key pair.' - ' logger.go:42: 13:22:27 | | Your identification has been saved in ansibleee-ssh-key-id_rsa' - ' logger.go:42: 13:22:27 | | Your public key has been saved in ansibleee-ssh-key-id_rsa.pub' - ' logger.go:42: 13:22:27 | | The key fingerprint is:' - ' logger.go:42: 13:22:27 | | SHA256:dOaS3eduFIwRmdQzdm5h3DAhZhErn8G9x/tRxOwh9/k zuul@controller' - ' logger.go:42: 13:22:27 | | The key''s randomart image is:' - ' logger.go:42: 13:22:27 | | +---[RSA 4096]----+' - ' logger.go:42: 13:22:27 | | | .OB=o.|' - ' logger.go:42: 13:22:27 | | | +++=Bo|' - ' logger.go:42: 13:22:27 | | | . + +*oB=|' - ' logger.go:42: 13:22:27 | | | . * +.o==*|' - ' logger.go:42: 13:22:27 | | | S o + o+*|' - ' logger.go:42: 13:22:27 | | | . o..+|' - ' logger.go:42: 13:22:27 | | | ..oE|' - ' logger.go:42: 13:22:27 | | | .. o|' - ' logger.go:42: 13:22:27 | | | .. .|' - ' logger.go:42: 13:22:27 | | +----[SHA256]-----+' - ' logger.go:42: 13:22:27 | | secret/dataplane-ansible-ssh-private-key-secret created' - ' harness.go:363: running tests' - ' harness.go:75: going to run test suite with timeout of 1380 seconds for each step' - ' harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests' - === RUN kuttl/harness - === RUN kuttl/harness/ctlplane-basic-deployment - === PAUSE kuttl/harness/ctlplane-basic-deployment - === RUN kuttl/harness/ctlplane-basic-deployment-with-appcred - === PAUSE kuttl/harness/ctlplane-basic-deployment-with-appcred - === RUN kuttl/harness/ctlplane-basic-deployment-with-nicMappings - === PAUSE kuttl/harness/ctlplane-basic-deployment-with-nicMappings - === CONT kuttl/harness/ctlplane-basic-deployment - ' logger.go:42: 13:22:27 | ctlplane-basic-deployment | Skipping creation of user-supplied namespace: openstack-kuttl-tests' - ' logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | starting test step 1-deploy-openstack' - ' logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:22:27 | ctlplane-basic-deployment/1-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/1-deploy-openstack | test step completed 1-deploy-openstack' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | starting test step 2-deploy-custom-cacert-secret' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | running command: [sh -c oc apply -n $NAMESPACE -f ../../common/custom-ca.yaml' - ' ]' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | secret/ca-custom-kuttl created' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/2-deploy-custom-cacert-secret | test step completed 2-deploy-custom-cacert-secret' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/3-deploy-custom-cacert | starting test step 3-deploy-custom-cacert' - ' logger.go:42: 13:27:17 | ctlplane-basic-deployment/3-deploy-custom-cacert | running command: [sh -c oc kustomize ../../../../config/samples/tls/custom_ca | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/3-deploy-custom-cacert | openstackcontrolplane.core.openstack.org/openstack configured' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/3-deploy-custom-cacert | test step completed 3-deploy-custom-cacert' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | starting test step 4-' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | running command: [sh -c echo "Checking ca-custom-kuttl.pem is present in combined-ca-bundle..."' - ' CUSTOM_CERT_CONTENT=$(oc get secret ca-custom-kuttl -n $NAMESPACE -o jsonpath="{.data[''ca-custom-kuttl\.pem'']}" | base64 --decode | tr -d ''\n'')' - ' TLS_BUNDLE_CONTENT=$(oc get secret combined-ca-bundle -n $NAMESPACE -o jsonpath="{.data[''tls-ca-bundle\.pem'']}" | base64 --decode | tr -d ''\n'')' - ' if [[ "$TLS_BUNDLE_CONTENT" == *"$CUSTOM_CERT_CONTENT"* ]]; then' - ' echo "OK"' - ' exit 0' - ' else' - ' echo "Not present"' - ' exit 1' - ' fi' - ' ]' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | Checking ca-custom-kuttl.pem is present in combined-ca-bundle...' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | OK' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/4- | test step completed 4-' - ' logger.go:42: 13:27:21 | ctlplane-basic-deployment/5-cleanup | starting test step 5-cleanup' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | running command: [sh -c oc delete --ignore-not-found=true -n $NAMESPACE pvc \' - ' srv-swift-storage-0' - ' oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE' - ' oc delete secret -l service-cert -n $NAMESPACE' - ' oc delete secret -l ca-cert -n $NAMESPACE' - ' ]' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "combined-ca-bundle" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-barbican-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-barbican-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-barbican-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-ceilometer-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-cinder-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-cinder-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-cinder-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-galera-openstack-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-galera-openstack-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-glance-default-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-glance-default-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-glance-default-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-keystone-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-keystone-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-keystone-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-kube-state-metrics-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-memcached-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-neutron-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-neutron-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-neutron-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-neutron-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:23 | ctlplane-basic-deployment/5-cleanup | secret "cert-nova-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-nova-novncproxy-cell1-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-nova-novncproxy-cell1-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-nova-novncproxy-cell1-vencrypt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-nova-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-nova-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-ovn-metrics" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-ovndbcluster-nb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-ovndbcluster-sb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-ovnnorthd-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-placement-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-placement-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-placement-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-rabbitmq-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-rabbitmq-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-swift-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-swift-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:24 | ctlplane-basic-deployment/5-cleanup | secret "cert-swift-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret "rootca-internal" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret "rootca-libvirt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret "rootca-ovn" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:27:30 | ctlplane-basic-deployment/5-cleanup | secret "rootca-public" deleted from openstack-kuttl-tests namespace' - 'Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice' - ' logger.go:42: 13:28:01 | ctlplane-basic-deployment/5-cleanup | test step completed 5-cleanup' - ' logger.go:42: 13:28:01 | ctlplane-basic-deployment | skipping kubernetes event logging' - === CONT kuttl/harness/ctlplane-basic-deployment-with-nicMappings - ' logger.go:42: 13:28:01 | ctlplane-basic-deployment-with-nicMappings | Skipping creation of user-supplied namespace: openstack-kuttl-tests' - ' logger.go:42: 13:28:01 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | starting test step 1-create-nic-mappings' - ' logger.go:42: 13:28:01 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | running command: [sh -c oc apply -n $NAMESPACE -f ../../../../config/samples/nad_datacentre.yaml' - ' ]' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | networkattachmentdefinition.k8s.cni.cncf.io/datacentre configured' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | test step completed 1-create-nic-mappings' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | starting test step 2-deploy-openstack' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:28:02 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created' - ' logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | test step completed 2-deploy-openstack' - ' logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | starting test step 3-add-ovn-nic-mappings' - ' logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | running command: [sh -c oc patch openstackcontrolplane -n $NAMESPACE openstack --type=''json'' -p=''[{' - ' "op": "replace",' - ' "path": "/spec/ovn/template/ovnController/nicMappings",' - ' "value":{"datacentre":"ospbr"}' - ' }]''' - ' ]' - ' logger.go:42: 13:32:17 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | test step completed 3-add-ovn-nic-mappings' - ' logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | starting test step 4-remove-ovn-nic-mappings' - ' logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c oc patch OpenStackControlPlane -n $NAMESPACE openstack --type=''json'' -p=''[{' - ' "op": "remove",' - ' "path": "/spec/ovn/template/ovnController/nicMappings",' - ' }]''' - ' ]' - ' logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:32:23 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:25 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:26 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:27 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:28 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:30 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:31 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:32 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:33 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:34 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:36 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:37 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:38 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:39 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:40 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:42 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:43 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:44 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:45 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:47 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:48 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:49 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:50 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:51 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:53 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:54 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:56 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | test step completed 4-remove-ovn-nic-mappings' - ' logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | starting test step 5-cleanup' - ' logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | running command: [sh -c oc delete --ignore-not-found=true -n $NAMESPACE pvc \' - ' srv-swift-storage-0' - ' oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE' - ' oc delete secret -l service-cert -n $NAMESPACE' - ' oc delete secret -l ca-cert -n $NAMESPACE' - ' ]' - ' logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "combined-ca-bundle" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:58 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-barbican-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-barbican-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-barbican-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ceilometer-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-cinder-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-cinder-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-cinder-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-galera-openstack-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-galera-openstack-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-glance-default-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-glance-default-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-glance-default-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-keystone-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-keystone-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-keystone-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-kube-state-metrics-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-memcached-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-novncproxy-cell1-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-novncproxy-cell1-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-novncproxy-cell1-vencrypt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovn-metrics" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovncontroller-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovndbcluster-nb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovndbcluster-sb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovnnorthd-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-placement-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-placement-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-placement-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-rabbitmq-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-rabbitmq-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-swift-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-swift-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:32:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-swift-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-internal" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-libvirt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-ovn" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:33:05 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-public" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | test step completed 5-cleanup' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-nicMappings | skipping kubernetes event logging' - === CONT kuttl/harness/ctlplane-basic-deployment-with-appcred - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred | Skipping creation of user-supplied namespace: openstack-kuttl-tests' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | starting test step 1-deploy-openstack' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:33:31 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created' - ' logger.go:42: 13:38:01 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | test step completed 1-deploy-openstack' - ' logger.go:42: 13:38:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | starting test step 2-deploy-appcred-config' - ' logger.go:42: 13:38:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c oc kustomize ../../../../config/samples/applicationcredentials | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | openstackcontrolplane.core.openstack.org/openstack configured' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:02 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:09 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:10 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met' - ' logger.go:42: 13:38:11 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.expirationDays = 730' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.gracePeriodDays = 364' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.roles = [admin service]' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.unrestricted = false' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-cinder (full custom overrides) ===' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-cinder to be Ready...' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-cinder condition met' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.expirationDays = 10' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.gracePeriodDays = 5' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.roles = [admin service]' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.unrestricted = true' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-glance (partial overrides) ===' - ' logger.go:42: 13:38:12 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-glance to be Ready...' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.expirationDays = 180' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.gracePeriodDays = 60' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.roles = [admin service]' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.unrestricted = false' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-swift (roles override) ===' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-swift to be Ready...' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-swift condition met' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.expirationDays = 730' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.gracePeriodDays = 364' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.roles = [service]' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.unrestricted = false' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-neutron (inherits defaults) ===' - ' logger.go:42: 13:38:13 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-neutron to be Ready...' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-neutron condition met' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.expirationDays = 730' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.gracePeriodDays = 364' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.roles = [admin service]' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.unrestricted = false' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-placement (expiration override) ===' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-placement to be Ready...' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-placement condition met' - ' logger.go:42: 13:38:14 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.expirationDays = 90' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.gracePeriodDays = 30' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.roles = [admin service]' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.unrestricted = false' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-nova (multiple roles) ===' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-nova to be Ready...' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-nova condition met' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.expirationDays = 730' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.gracePeriodDays = 364' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.roles = [admin service member]' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.unrestricted = false' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-ceilometer (telemetry/ceilometer) ===' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-ceilometer to be Ready...' - ' logger.go:42: 13:38:15 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-ceilometer condition met' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.expirationDays = 45' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.gracePeriodDays = 20' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.roles = [service]' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.unrestricted = false' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | All ApplicationCredential CRs validated successfully' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | test step completed 2-deploy-appcred-config' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | starting test step 3-update-appcred-config' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c # Change barbican''s expirationDays from the default (730) to 365' - ' oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \' - ' ''{"spec":{"barbican":{"applicationCredential":{"expirationDays":365,"gracePeriodDays":180}}}}''' - ' ' - ' # Change glance''s roles from [admin,service] to [service] only' - ' oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \' - ' ''{"spec":{"glance":{"applicationCredential":{"roles":["service"]}}}}''' - ' ]' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual' - ' actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles' - ' roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' local role_count' - ' role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing ApplicationCredential Spec Propagation"' - ' echo "========================================="' - ' echo' - ' ' - ' # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----' - ' echo "=== Verifying expirationDays propagation on ac-barbican ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 365' - ' check_field barbican gracePeriodDays 180' - ' echo' - ' ' - ' # ---- ac-glance: roles [admin,service] -> [service] ----' - ' echo "=== Verifying roles propagation on ac-glance ==="' - ' wait_ready glance' - ' check_roles glance "service"' - ' echo' - ' ' - ' echo "All spec changes propagated to existing ApplicationCredential CRs successfully"]' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:16 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met' - ' logger.go:42: 13:38:17 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ERROR: ac-barbican.expirationDays: expected ''365'', got ''730''' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual' - ' actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles' - ' roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' local role_count' - ' role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing ApplicationCredential Spec Propagation"' - ' echo "========================================="' - ' echo' - ' ' - ' # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----' - ' echo "=== Verifying expirationDays propagation on ac-barbican ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 365' - ' check_field barbican gracePeriodDays 180' - ' echo' - ' ' - ' # ---- ac-glance: roles [admin,service] -> [service] ----' - ' echo "=== Verifying roles propagation on ac-glance ==="' - ' wait_ready glance' - ' check_roles glance "service"' - ' echo' - ' ' - ' echo "All spec changes propagated to existing ApplicationCredential CRs successfully"]' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.expirationDays = 365' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.gracePeriodDays = 180' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying roles propagation on ac-glance ===' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-glance to be Ready...' - ' logger.go:42: 13:38:18 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-glance.roles = [service]' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | All spec changes propagated to existing ApplicationCredential CRs successfully' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | test step completed 3-update-appcred-config' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | starting test step 4-disable-appcred-config' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p ''{"spec":{"applicationCredential":{"enabled":false}}}''' - ' ]' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' SERVICES=(barbican cinder glance swift neutron placement nova ceilometer)' - ' ' - ' wait_deleted() {' - ' local kind=$1 name=$2 timeout=${3:-180}' - ' echo "Waiting for $kind/$name to be deleted..."' - ' local end=$((SECONDS + timeout))' - ' while [ $SECONDS -lt $end ]; do' - ' if ! oc get "$kind" "$name" -n "$NS" &>/dev/null; then' - ' echo "✓ $kind/$name deleted"' - ' return 0' - ' fi' - ' sleep 5' - ' done' - ' echo "ERROR: $kind/$name still exists after ${timeout}s"' - ' exit 1' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential Cleanup"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Verifying global ApplicationCredential is disabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "false" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''false'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = false"' - ' echo' - ' ' - ' echo "=== Verifying AC CRs are deleted ==="' - ' for svc in "${SERVICES[@]}"; do' - ' wait_deleted appcred "ac-$svc" 180' - ' done' - ' echo' - ' ' - ' echo "=== Verifying AC Secrets are cleaned up ==="' - ' for svc in "${SERVICES[@]}"; do' - ' wait_deleted secret "ac-$svc-secret" 120' - ' done' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs and Secrets cleaned up successfully"]' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Testing Application Credential Cleanup' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying global ApplicationCredential is disabled ===' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = false' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC CRs are deleted ===' - ' logger.go:42: 13:38:19 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-barbican to be deleted...' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-barbican deleted' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-cinder to be deleted...' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-cinder deleted' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-glance to be deleted...' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-glance deleted' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-swift to be deleted...' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-swift deleted' - ' logger.go:42: 13:38:24 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-neutron to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-neutron deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-placement to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-placement deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-nova to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-nova deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-ceilometer to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-ceilometer deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC Secrets are cleaned up ===' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-barbican-secret to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-barbican-secret deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-cinder-secret to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-cinder-secret deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-glance-secret to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-glance-secret deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-swift-secret to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-swift-secret deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-neutron-secret to be deleted...' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-neutron-secret deleted' - ' logger.go:42: 13:38:25 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-placement-secret to be deleted...' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-placement-secret deleted' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-nova-secret to be deleted...' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-nova-secret deleted' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-ceilometer-secret to be deleted...' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-ceilometer-secret deleted' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | All ApplicationCredential CRs and Secrets cleaned up successfully' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | test step completed 4-disable-appcred-config' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | starting test step 5-cleanup' - ' logger.go:42: 13:38:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | running command: [sh -c oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE' - ' oc delete secret -l service-cert -n $NAMESPACE' - ' oc delete secret -l ca-cert -n $NAMESPACE' - ' ]' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "combined-ca-bundle" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-barbican-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-barbican-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-barbican-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ceilometer-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-cinder-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-cinder-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-cinder-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-galera-openstack-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-galera-openstack-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-glance-default-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-glance-default-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-glance-default-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-keystone-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-keystone-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-keystone-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-kube-state-metrics-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-memcached-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-novncproxy-cell1-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-novncproxy-cell1-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-novncproxy-cell1-vencrypt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovn-metrics" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovndbcluster-nb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovndbcluster-sb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovnnorthd-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-placement-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-placement-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-placement-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-rabbitmq-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:27 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-rabbitmq-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:28 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-swift-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:28 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-swift-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:28 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-swift-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-internal" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-libvirt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-ovn" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:38:33 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-public" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:39:01 | ctlplane-basic-deployment-with-appcred/5-cleanup | test step completed 5-cleanup' - ' logger.go:42: 13:39:01 | ctlplane-basic-deployment-with-appcred | skipping kubernetes event logging' - === NAME kuttl - ' harness.go:406: run tests finished' - ' harness.go:514: cleaning up' - ' harness.go:571: removing temp folder: ""' - '--- PASS: kuttl (994.83s)' - ' --- PASS: kuttl/harness (0.00s)' - ' --- PASS: kuttl/harness/ctlplane-basic-deployment (334.64s)' - ' --- PASS: kuttl/harness/ctlplane-basic-deployment-with-nicMappings (329.77s)' - ' --- PASS: kuttl/harness/ctlplane-basic-deployment-with-appcred (329.38s)' - PASS - No resources found - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage_cleanup.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/cleanup-crc-pv.sh - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $6}' - ++ grep Bound - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0 - ++ cut -d / -f 2 - + NAME=mysql-db-openstack-galera-0 - + oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-galera-0 --ignore-not-found - persistentvolumeclaim "mysql-db-openstack-galera-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0 - ++ cut -d / -f 2 - + NAME=mysql-db-openstack-cell1-galera-0 - + oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-cell1-galera-0 --ignore-not-found - persistentvolumeclaim "mysql-db-openstack-cell1-galera-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/swift-swift-storage-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/swift-swift-storage-0 - ++ cut -d / -f 2 - + NAME=swift-swift-storage-0 - + oc delete -n openstack-kuttl-tests pvc/swift-swift-storage-0 --ignore-not-found - persistentvolumeclaim "swift-swift-storage-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - ++ cut -d / -f 2 - + NAME=ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - + oc delete -n openstack-kuttl-tests pvc/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 --ignore-not-found - persistentvolumeclaim "ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/glance-glance-default-external-api-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/glance-glance-default-external-api-0 - ++ cut -d / -f 2 - + NAME=glance-glance-default-external-api-0 - + oc delete -n openstack-kuttl-tests pvc/glance-glance-default-external-api-0 --ignore-not-found - persistentvolumeclaim "glance-glance-default-external-api-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - ++ cut -d / -f 2 - + NAME=ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - + oc delete -n openstack-kuttl-tests pvc/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 --ignore-not-found - persistentvolumeclaim "ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ cut -d / -f 2 - ++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0 - + NAME=glance-glance-default-internal-api-0 - + oc delete -n openstack-kuttl-tests pvc/glance-glance-default-internal-api-0 --ignore-not-found - persistentvolumeclaim "glance-glance-default-internal-api-0" deleted from openstack-kuttl-tests namespace - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $1}' - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage01-crc - persistentvolume "local-storage01-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage02-crc - persistentvolume "local-storage02-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage03-crc - persistentvolume "local-storage03-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage04-crc - persistentvolume "local-storage04-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage05-crc - persistentvolume "local-storage05-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage06-crc - persistentvolume "local-storage06-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage07-crc - persistentvolume "local-storage07-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage08-crc - persistentvolume "local-storage08-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage09-crc - persistentvolume "local-storage09-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage10-crc - persistentvolume "local-storage10-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage11-crc - persistentvolume "local-storage11-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage12-crc - persistentvolume "local-storage12-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage13-crc - persistentvolume "local-storage13-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage14-crc - persistentvolume "local-storage14-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage15-crc - persistentvolume "local-storage15-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage16-crc - persistentvolume "local-storage16-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage17-crc - persistentvolume "local-storage17-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage18-crc - persistentvolume "local-storage18-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage19-crc - persistentvolume "local-storage19-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage20-crc - persistentvolume "local-storage20-crc" deleted - if oc get sc "local-storage"; then oc delete sc "local-storage"; fi - NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE - local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer true 16m - storageclass.storage.k8s.io "local-storage" deleted - bash scripts/delete-pv.sh - +++ dirname scripts/delete-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete - ++ set -ex - ++ NODE=crc - ++ OPERATION=delete - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/create-pv.sh - +++ dirname scripts/create-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get pv -o json - ++ jq -r '.items[] | select(.status.phase | test("Released")).metadata.name' - + released= - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create - ++ set -ex - ++ NODE=crc - ++ OPERATION=create - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - bash scripts/gen-crc-pv-kustomize.sh - + OUT=/home/zuul/ci-framework-data/artifacts/manifests - + '[' -z '"local-storage"' ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']' - + PV_NUM=20 - + STORAGE_CAPACITY=10 - ++ oc get node -o name -l node-role.kubernetes.io/worker - ++ head -c-1 - ++ sed -e 's|node/||' - ++ tr '\n' ' ' - + NODE_NAMES=crc - + '[' -z crc ']' - + cat - + for node in $NODE_NAMES - ++ seq -w 20 - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml - storageclass.storage.k8s.io/local-storage created - persistentvolume/local-storage01-crc created - persistentvolume/local-storage02-crc created - persistentvolume/local-storage03-crc created - persistentvolume/local-storage04-crc created - persistentvolume/local-storage05-crc created - persistentvolume/local-storage06-crc created - persistentvolume/local-storage07-crc created - persistentvolume/local-storage08-crc created - persistentvolume/local-storage09-crc created - persistentvolume/local-storage10-crc created - persistentvolume/local-storage11-crc created - persistentvolume/local-storage12-crc created - persistentvolume/local-storage13-crc created - persistentvolume/local-storage14-crc created - persistentvolume/local-storage15-crc created - persistentvolume/local-storage16-crc created - persistentvolume/local-storage17-crc created - persistentvolume/local-storage18-crc created - persistentvolume/local-storage19-crc created - persistentvolume/local-storage20-crc created - persistentvolumeclaim/ansible-ee-logs unchanged - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - '2026/03/16 13:39:20 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]' - === RUN kuttl - ' harness.go:463: starting setup' - ' harness.go:255: running tests using configured kubeconfig.' - ' harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443' - ' logger.go:42: 13:39:20 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]' - ' logger.go:42: 13:39:20 | | netconfig.network.openstack.org/netconfig configured' - ' logger.go:42: 13:39:20 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]' - ' logger.go:42: 13:39:21 | | dnsmasq.network.openstack.org/dnsmasq configured' - ' logger.go:42: 13:39:21 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then' - ' ssh-keygen -f ansibleee-ssh-key-id_rsa -N "" -t rsa -b 4096' - ' fi' - ' oc create secret generic dataplane-ansible-ssh-private-key-secret \' - ' --save-config \' - ' --dry-run=client \' - ' --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \' - ' --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \' - ' --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \' - ' -n openstack-kuttl-tests \' - ' -o yaml | \' - ' oc apply -f -' - ' ]' - ' logger.go:42: 13:39:21 | | secret/dataplane-ansible-ssh-private-key-secret unchanged' - ' harness.go:363: running tests' - ' harness.go:75: going to run test suite with timeout of 1380 seconds for each step' - ' harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests' - === RUN kuttl/harness - === RUN kuttl/harness/ctlplane-basic-deployment-with-appcred - === PAUSE kuttl/harness/ctlplane-basic-deployment-with-appcred - === CONT kuttl/harness/ctlplane-basic-deployment-with-appcred - ' logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred | Skipping creation of user-supplied namespace: openstack-kuttl-tests' - ' logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | starting test step 1-deploy-openstack' - ' logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:39:21 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/1-deploy-openstack | test step completed 1-deploy-openstack' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | starting test step 2-deploy-appcred-config' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c oc kustomize ../../../../config/samples/applicationcredentials | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | openstackcontrolplane.core.openstack.org/openstack configured' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:43:52 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:43:53 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:43:54 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:43:55 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:43:56 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:43:57 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:43:58 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:43:59 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:44:00 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Error from server (NotFound): keystoneapplicationcredentials.keystone.openstack.org "ac-barbican" not found' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' # Check each expected role is present' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' # Check role count matches' - ' local role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential CRs"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Checking global ApplicationCredential is enabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "true" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''true'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = true"' - ' echo' - ' ' - ' # ---- ac-barbican ----' - ' # Pure defaults: expirationDays=730, gracePeriodDays=364, roles=[admin,service], unrestricted=false' - ' echo "=== Testing ac-barbican (pure defaults) ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 730' - ' check_field barbican gracePeriodDays 364' - ' check_roles barbican "admin" "service"' - ' check_field barbican unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-cinder ----' - ' # Full custom overrides' - ' echo "=== Testing ac-cinder (full custom overrides) ==="' - ' wait_ready cinder' - ' check_field cinder expirationDays 10' - ' check_field cinder gracePeriodDays 5' - ' check_roles cinder "admin" "service"' - ' check_field cinder unrestricted "true"' - ' echo' - ' ' - ' # ---- ac-glance ----' - ' # Partial overrides (expiration values only)' - ' echo "=== Testing ac-glance (partial overrides) ==="' - ' wait_ready glance' - ' check_field glance expirationDays 180' - ' check_field glance gracePeriodDays 60' - ' check_roles glance "admin" "service"' - ' check_field glance unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-swift ----' - ' # Role override only' - ' echo "=== Testing ac-swift (roles override) ==="' - ' wait_ready swift' - ' check_field swift expirationDays 730' - ' check_field swift gracePeriodDays 364' - ' check_roles swift "service"' - ' check_field swift unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-neutron ----' - ' # Inherits all defaults' - ' echo "=== Testing ac-neutron (inherits defaults) ==="' - ' wait_ready neutron' - ' check_field neutron expirationDays 730' - ' check_field neutron gracePeriodDays 364' - ' check_roles neutron "admin" "service"' - ' check_field neutron unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-placement ----' - ' # Custom expiration only' - ' echo "=== Testing ac-placement (expiration override) ==="' - ' wait_ready placement' - ' check_field placement expirationDays 90' - ' check_field placement gracePeriodDays 30' - ' check_roles placement "admin" "service"' - ' check_field placement unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-nova ----' - ' # Multiple roles' - ' echo "=== Testing ac-nova (multiple roles) ==="' - ' wait_ready nova' - ' check_field nova expirationDays 730' - ' check_field nova gracePeriodDays 364' - ' check_roles nova "admin" "service" "member"' - ' check_field nova unrestricted "false"' - ' echo' - ' ' - ' # ---- ac-ceilometer ----' - ' # Telemetry/Ceilometer component (enabled by default in base sample)' - ' echo "=== Testing ac-ceilometer (telemetry/ceilometer) ==="' - ' wait_ready ceilometer' - ' check_field ceilometer expirationDays 45' - ' check_field ceilometer gracePeriodDays 20' - ' check_roles ceilometer "service"' - ' check_field ceilometer unrestricted "false"' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs validated successfully"]' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Testing Application Credential CRs' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | =========================================' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Checking global ApplicationCredential is enabled ===' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = true' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-barbican (pure defaults) ===' - ' logger.go:42: 13:44:01 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:44:03 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.expirationDays = 730' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.gracePeriodDays = 364' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.roles = [admin service]' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-barbican.unrestricted = false' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-cinder (full custom overrides) ===' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-cinder to be Ready...' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-cinder condition met' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.expirationDays = 10' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.gracePeriodDays = 5' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.roles = [admin service]' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-cinder.unrestricted = true' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-glance (partial overrides) ===' - ' logger.go:42: 13:44:04 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-glance to be Ready...' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.expirationDays = 180' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.gracePeriodDays = 60' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.roles = [admin service]' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-glance.unrestricted = false' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-swift (roles override) ===' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-swift to be Ready...' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-swift condition met' - ' logger.go:42: 13:44:05 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.expirationDays = 730' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.gracePeriodDays = 364' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.roles = [service]' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-swift.unrestricted = false' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-neutron (inherits defaults) ===' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-neutron to be Ready...' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-neutron condition met' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.expirationDays = 730' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.gracePeriodDays = 364' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.roles = [admin service]' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-neutron.unrestricted = false' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-placement (expiration override) ===' - ' logger.go:42: 13:44:06 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-placement to be Ready...' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-placement condition met' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.expirationDays = 90' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.gracePeriodDays = 30' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.roles = [admin service]' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-placement.unrestricted = false' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-nova (multiple roles) ===' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-nova to be Ready...' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-nova condition met' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.expirationDays = 730' - ' logger.go:42: 13:44:07 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.gracePeriodDays = 364' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.roles = [admin service member]' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-nova.unrestricted = false' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | === Testing ac-ceilometer (telemetry/ceilometer) ===' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | Waiting for appcred/ac-ceilometer to be Ready...' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-ceilometer condition met' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.expirationDays = 45' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.gracePeriodDays = 20' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.roles = [service]' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ✓ ac-ceilometer.unrestricted = false' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | ' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | All ApplicationCredential CRs validated successfully' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/2-deploy-appcred-config | test step completed 2-deploy-appcred-config' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | starting test step 3-update-appcred-config' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c # Change barbican''s expirationDays from the default (730) to 365' - ' oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \' - ' ''{"spec":{"barbican":{"applicationCredential":{"expirationDays":365,"gracePeriodDays":180}}}}''' - ' ' - ' # Change glance''s roles from [admin,service] to [service] only' - ' oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p \' - ' ''{"spec":{"glance":{"applicationCredential":{"roles":["service"]}}}}''' - ' ]' - ' logger.go:42: 13:44:08 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual' - ' actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles' - ' roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' local role_count' - ' role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing ApplicationCredential Spec Propagation"' - ' echo "========================================="' - ' echo' - ' ' - ' # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----' - ' echo "=== Verifying expirationDays propagation on ac-barbican ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 365' - ' check_field barbican gracePeriodDays 180' - ' echo' - ' ' - ' # ---- ac-glance: roles [admin,service] -> [service] ----' - ' echo "=== Verifying roles propagation on ac-glance ==="' - ' wait_ready glance' - ' check_roles glance "service"' - ' echo' - ' ' - ' echo "All spec changes propagated to existing ApplicationCredential CRs successfully"]' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met' - ' logger.go:42: 13:44:09 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ERROR: ac-barbican.expirationDays: expected ''365'', got ''730''' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' wait_ready() {' - ' echo "Waiting for appcred/ac-$1 to be Ready..."' - ' oc wait appcred/ac-$1 -n "$NS" --for=condition=Ready --timeout=180s' - ' }' - ' ' - ' check_field() {' - ' local name=$1 field=$2 expected=$3' - ' local actual' - ' actual=$(oc get appcred ac-$name -n "$NS" -o jsonpath="{.spec.$field}" 2>/dev/null || echo "")' - ' if [ "$actual" != "$expected" ]; then' - ' echo "ERROR: ac-$name.$field: expected ''$expected'', got ''$actual''"' - ' exit 1' - ' fi' - ' echo "✓ ac-$name.$field = $expected"' - ' }' - ' ' - ' check_roles() {' - ' local name=$1' - ' shift' - ' local expected_roles=("$@")' - ' local roles' - ' roles=$(oc get appcred ac-$name -n "$NS" -o jsonpath=''{.spec.roles[*]}'')' - ' ' - ' for role in "${expected_roles[@]}"; do' - ' if [[ ! " $roles " =~ " $role " ]]; then' - ' echo "ERROR: ac-$name: Role ''$role'' not found. Got: $roles"' - ' exit 1' - ' fi' - ' done' - ' ' - ' local role_count' - ' role_count=$(echo "$roles" | wc -w)' - ' if [ "$role_count" -ne "${#expected_roles[@]}" ]; then' - ' echo "ERROR: ac-$name: Expected ${#expected_roles[@]} roles, got $role_count: $roles"' - ' exit 1' - ' fi' - ' ' - ' echo "✓ ac-$name.roles = [${expected_roles[*]}]"' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing ApplicationCredential Spec Propagation"' - ' echo "========================================="' - ' echo' - ' ' - ' # ---- ac-barbican: expirationDays 730 -> 365, gracePeriodDays 364 -> 180 ----' - ' echo "=== Verifying expirationDays propagation on ac-barbican ==="' - ' wait_ready barbican' - ' check_field barbican expirationDays 365' - ' check_field barbican gracePeriodDays 180' - ' echo' - ' ' - ' # ---- ac-glance: roles [admin,service] -> [service] ----' - ' echo "=== Verifying roles propagation on ac-glance ==="' - ' wait_ready glance' - ' check_roles glance "service"' - ' echo' - ' ' - ' echo "All spec changes propagated to existing ApplicationCredential CRs successfully"]' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Testing ApplicationCredential Spec Propagation' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | =========================================' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying expirationDays propagation on ac-barbican ===' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-barbican to be Ready...' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-barbican condition met' - ' logger.go:42: 13:44:10 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.expirationDays = 365' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-barbican.gracePeriodDays = 180' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | === Verifying roles propagation on ac-glance ===' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | Waiting for appcred/ac-glance to be Ready...' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | keystoneapplicationcredential.keystone.openstack.org/ac-glance condition met' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ✓ ac-glance.roles = [service]' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | ' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | All spec changes propagated to existing ApplicationCredential CRs successfully' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/3-update-appcred-config | test step completed 3-update-appcred-config' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | starting test step 4-disable-appcred-config' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c oc patch openstackcontrolplane openstack -n $NAMESPACE --type merge -p ''{"spec":{"applicationCredential":{"enabled":false}}}''' - ' ]' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | running command: [sh -c set -euo pipefail' - ' NS="${NAMESPACE}"' - ' ' - ' SERVICES=(barbican cinder glance swift neutron placement nova ceilometer)' - ' ' - ' wait_deleted() {' - ' local kind=$1 name=$2 timeout=${3:-180}' - ' echo "Waiting for $kind/$name to be deleted..."' - ' local end=$((SECONDS + timeout))' - ' while [ $SECONDS -lt $end ]; do' - ' if ! oc get "$kind" "$name" -n "$NS" &>/dev/null; then' - ' echo "✓ $kind/$name deleted"' - ' return 0' - ' fi' - ' sleep 5' - ' done' - ' echo "ERROR: $kind/$name still exists after ${timeout}s"' - ' exit 1' - ' }' - ' ' - ' echo "========================================="' - ' echo "Testing Application Credential Cleanup"' - ' echo "========================================="' - ' echo' - ' ' - ' echo "=== Verifying global ApplicationCredential is disabled ==="' - ' global_enabled=$(oc get openstackcontrolplane openstack -n "$NS" -o jsonpath=''{.spec.applicationCredential.enabled}'')' - ' if [ "$global_enabled" != "false" ]; then' - ' echo "ERROR: OpenStackControlPlane.spec.applicationCredential.enabled expected ''false'', got ''$global_enabled''"' - ' exit 1' - ' fi' - ' echo "✓ OpenStackControlPlane.spec.applicationCredential.enabled = false"' - ' echo' - ' ' - ' echo "=== Verifying AC CRs are deleted ==="' - ' for svc in "${SERVICES[@]}"; do' - ' wait_deleted appcred "ac-$svc" 180' - ' done' - ' echo' - ' ' - ' echo "=== Verifying AC Secrets are cleaned up ==="' - ' for svc in "${SERVICES[@]}"; do' - ' wait_deleted secret "ac-$svc-secret" 120' - ' done' - ' echo' - ' ' - ' echo "All ApplicationCredential CRs and Secrets cleaned up successfully"]' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Testing Application Credential Cleanup' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | =========================================' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying global ApplicationCredential is disabled ===' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ OpenStackControlPlane.spec.applicationCredential.enabled = false' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC CRs are deleted ===' - ' logger.go:42: 13:44:11 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-barbican to be deleted...' - ' logger.go:42: 13:44:16 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-barbican deleted' - ' logger.go:42: 13:44:16 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-cinder to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-cinder deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-glance to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-glance deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-swift to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-swift deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-neutron to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-neutron deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-placement to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-placement deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-nova to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-nova deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for appcred/ac-ceilometer to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ appcred/ac-ceilometer deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | === Verifying AC Secrets are cleaned up ===' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-barbican-secret to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-barbican-secret deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-cinder-secret to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-cinder-secret deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-glance-secret to be deleted...' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-glance-secret deleted' - ' logger.go:42: 13:44:17 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-swift-secret to be deleted...' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-swift-secret deleted' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-neutron-secret to be deleted...' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-neutron-secret deleted' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-placement-secret to be deleted...' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-placement-secret deleted' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-nova-secret to be deleted...' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-nova-secret deleted' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | Waiting for secret/ac-ceilometer-secret to be deleted...' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ✓ secret/ac-ceilometer-secret deleted' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | ' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | All ApplicationCredential CRs and Secrets cleaned up successfully' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/4-disable-appcred-config | test step completed 4-disable-appcred-config' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/5-cleanup | starting test step 5-cleanup' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/5-cleanup | running command: [sh -c oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE' - ' oc delete secret -l service-cert -n $NAMESPACE' - ' oc delete secret -l ca-cert -n $NAMESPACE' - ' ]' - ' logger.go:42: 13:44:18 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "combined-ca-bundle" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-barbican-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-barbican-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-barbican-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ceilometer-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-cinder-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-cinder-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-cinder-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-galera-openstack-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-galera-openstack-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-glance-default-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-glance-default-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-glance-default-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-keystone-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-keystone-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-keystone-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-kube-state-metrics-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-memcached-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-neutron-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-novncproxy-cell1-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-novncproxy-cell1-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-novncproxy-cell1-vencrypt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-nova-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovn-metrics" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovndbcluster-nb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:19 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovndbcluster-sb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-ovnnorthd-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-placement-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-placement-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-placement-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-rabbitmq-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-rabbitmq-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-swift-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-swift-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:20 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "cert-swift-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-internal" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-libvirt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-ovn" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:44:26 | ctlplane-basic-deployment-with-appcred/5-cleanup | secret "rootca-public" deleted from openstack-kuttl-tests namespace' - 'Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice' - ' logger.go:42: 13:44:51 | ctlplane-basic-deployment-with-appcred/5-cleanup | test step completed 5-cleanup' - ' logger.go:42: 13:44:51 | ctlplane-basic-deployment-with-appcred | skipping kubernetes event logging' - === NAME kuttl - ' harness.go:406: run tests finished' - ' harness.go:514: cleaning up' - ' harness.go:571: removing temp folder: ""' - '--- PASS: kuttl (331.69s)' - ' --- PASS: kuttl/harness (0.00s)' - ' --- PASS: kuttl/harness/ctlplane-basic-deployment-with-appcred (330.33s)' - PASS - No resources found - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage_cleanup.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/cleanup-crc-pv.sh - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $6}' - ++ grep Bound - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - ++ cut -d / -f 2 - + NAME=ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - + oc delete -n openstack-kuttl-tests pvc/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 --ignore-not-found - persistentvolumeclaim "ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - ++ cut -d / -f 2 - + NAME=ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - + oc delete -n openstack-kuttl-tests pvc/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 --ignore-not-found - persistentvolumeclaim "ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/swift-swift-storage-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/swift-swift-storage-0 - ++ cut -d / -f 2 - + NAME=swift-swift-storage-0 - + oc delete -n openstack-kuttl-tests pvc/swift-swift-storage-0 --ignore-not-found - persistentvolumeclaim "swift-swift-storage-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0 - ++ cut -d / -f 2 - + NAME=mysql-db-openstack-cell1-galera-0 - + oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-cell1-galera-0 --ignore-not-found - persistentvolumeclaim "mysql-db-openstack-cell1-galera-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0 - ++ cut -d / -f 2 - + NAME=glance-glance-default-internal-api-0 - + oc delete -n openstack-kuttl-tests pvc/glance-glance-default-internal-api-0 --ignore-not-found - persistentvolumeclaim "glance-glance-default-internal-api-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/glance-glance-default-external-api-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/glance-glance-default-external-api-0 - ++ cut -d / -f 2 - + NAME=glance-glance-default-external-api-0 - + oc delete -n openstack-kuttl-tests pvc/glance-glance-default-external-api-0 --ignore-not-found - persistentvolumeclaim "glance-glance-default-external-api-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0 - ++ cut -d / -f 2 - + NAME=mysql-db-openstack-galera-0 - + oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-galera-0 --ignore-not-found - persistentvolumeclaim "mysql-db-openstack-galera-0" deleted from openstack-kuttl-tests namespace - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $1}' - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage01-crc - persistentvolume "local-storage01-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage02-crc - persistentvolume "local-storage02-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage03-crc - persistentvolume "local-storage03-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage04-crc - persistentvolume "local-storage04-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage05-crc - persistentvolume "local-storage05-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage06-crc - persistentvolume "local-storage06-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage07-crc - persistentvolume "local-storage07-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage08-crc - persistentvolume "local-storage08-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage09-crc - persistentvolume "local-storage09-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage10-crc - persistentvolume "local-storage10-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage11-crc - persistentvolume "local-storage11-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage12-crc - persistentvolume "local-storage12-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage13-crc - persistentvolume "local-storage13-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage14-crc - persistentvolume "local-storage14-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage15-crc - persistentvolume "local-storage15-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage16-crc - persistentvolume "local-storage16-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage17-crc - persistentvolume "local-storage17-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage18-crc - persistentvolume "local-storage18-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage19-crc - persistentvolume "local-storage19-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage20-crc - persistentvolume "local-storage20-crc" deleted - if oc get sc "local-storage"; then oc delete sc "local-storage"; fi - NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE - local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer true 5m39s - storageclass.storage.k8s.io "local-storage" deleted - bash scripts/delete-pv.sh - +++ dirname scripts/delete-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete - ++ set -ex - ++ NODE=crc - ++ OPERATION=delete - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/create-pv.sh - +++ dirname scripts/create-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get pv -o json - ++ jq -r '.items[] | select(.status.phase | test("Released")).metadata.name' - + released= - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create - ++ set -ex - ++ NODE=crc - ++ OPERATION=create - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - bash scripts/gen-crc-pv-kustomize.sh - + OUT=/home/zuul/ci-framework-data/artifacts/manifests - + '[' -z '"local-storage"' ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']' - + PV_NUM=20 - + STORAGE_CAPACITY=10 - ++ oc get node -o name -l node-role.kubernetes.io/worker - ++ head -c-1 - ++ sed -e 's|node/||' - ++ tr '\n' ' ' - + NODE_NAMES=crc - + '[' -z crc ']' - + cat - + for node in $NODE_NAMES - ++ seq -w 20 - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml - storageclass.storage.k8s.io/local-storage created - persistentvolume/local-storage01-crc created - persistentvolume/local-storage02-crc created - persistentvolume/local-storage03-crc created - persistentvolume/local-storage04-crc created - persistentvolume/local-storage05-crc created - persistentvolume/local-storage06-crc created - persistentvolume/local-storage07-crc created - persistentvolume/local-storage08-crc created - persistentvolume/local-storage09-crc created - persistentvolume/local-storage10-crc created - persistentvolume/local-storage11-crc created - persistentvolume/local-storage12-crc created - persistentvolume/local-storage13-crc created - persistentvolume/local-storage14-crc created - persistentvolume/local-storage15-crc created - persistentvolume/local-storage16-crc created - persistentvolume/local-storage17-crc created - persistentvolume/local-storage18-crc created - persistentvolume/local-storage19-crc created - persistentvolume/local-storage20-crc created - persistentvolumeclaim/ansible-ee-logs unchanged - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - '2026/03/16 13:45:10 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]' - === RUN kuttl - ' harness.go:463: starting setup' - ' harness.go:255: running tests using configured kubeconfig.' - ' harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443' - ' logger.go:42: 13:45:10 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]' - ' logger.go:42: 13:45:11 | | netconfig.network.openstack.org/netconfig configured' - ' logger.go:42: 13:45:11 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]' - ' logger.go:42: 13:45:11 | | dnsmasq.network.openstack.org/dnsmasq configured' - ' logger.go:42: 13:45:11 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then' - ' ssh-keygen -f ansibleee-ssh-key-id_rsa -N "" -t rsa -b 4096' - ' fi' - ' oc create secret generic dataplane-ansible-ssh-private-key-secret \' - ' --save-config \' - ' --dry-run=client \' - ' --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \' - ' --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \' - ' --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \' - ' -n openstack-kuttl-tests \' - ' -o yaml | \' - ' oc apply -f -' - ' ]' - ' logger.go:42: 13:45:12 | | secret/dataplane-ansible-ssh-private-key-secret unchanged' - ' harness.go:363: running tests' - ' harness.go:75: going to run test suite with timeout of 1380 seconds for each step' - ' harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests' - === RUN kuttl/harness - === RUN kuttl/harness/ctlplane-basic-deployment-with-nicMappings - === PAUSE kuttl/harness/ctlplane-basic-deployment-with-nicMappings - === CONT kuttl/harness/ctlplane-basic-deployment-with-nicMappings - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings | Skipping creation of user-supplied namespace: openstack-kuttl-tests' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | starting test step 1-create-nic-mappings' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | running command: [sh -c oc apply -n $NAMESPACE -f ../../../../config/samples/nad_datacentre.yaml' - ' ]' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | networkattachmentdefinition.k8s.cni.cncf.io/datacentre unchanged' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/1-create-nic-mappings | test step completed 1-create-nic-mappings' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | starting test step 2-deploy-openstack' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | running command: [sh -c oc kustomize ../../../../config/samples/base/openstackcontrolplane | oc apply -n $NAMESPACE -f -' - ' ]' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | Warning: spec.galera.template[openstack-cell1].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:45:12 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | openstackcontrolplane.core.openstack.org/openstack created' - ' logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/2-deploy-openstack | test step completed 2-deploy-openstack' - ' logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | starting test step 3-add-ovn-nic-mappings' - ' logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | running command: [sh -c oc patch openstackcontrolplane -n $NAMESPACE openstack --type=''json'' -p=''[{' - ' "op": "replace",' - ' "path": "/spec/ovn/template/ovnController/nicMappings",' - ' "value":{"datacentre":"ospbr"}' - ' }]''' - ' ]' - ' logger.go:42: 13:49:50 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/3-add-ovn-nic-mappings | test step completed 3-add-ovn-nic-mappings' - ' logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | starting test step 4-remove-ovn-nic-mappings' - ' logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c oc patch OpenStackControlPlane -n $NAMESPACE openstack --type=''json'' -p=''[{' - ' "op": "remove",' - ' "path": "/spec/ovn/template/ovnController/nicMappings",' - ' }]''' - ' ]' - ' logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | openstackcontrolplane.core.openstack.org/openstack patched' - ' logger.go:42: 13:49:55 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:49:56 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:49:58 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | running command: [sh -c ovs_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller-ovs --no-headers=true --ignore-not-found=true | wc -l)' - ' ovn_controller_pod_count=$(oc get pod -n $NAMESPACE -l service=ovn-controller --no-headers=true --ignore-not-found=true | wc -l)' - ' if [ $ovs_controller_pod_count -eq 0 ] && [ $ovn_controller_pod_count -eq 0 ]; then' - ' exit 0' - ' fi' - ' exit 1' - ' ]' - ' logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/4-remove-ovn-nic-mappings | test step completed 4-remove-ovn-nic-mappings' - ' logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | starting test step 5-cleanup' - ' logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | running command: [sh -c oc delete --ignore-not-found=true -n $NAMESPACE pvc \' - ' srv-swift-storage-0' - ' oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE' - ' oc delete secret -l service-cert -n $NAMESPACE' - ' oc delete secret -l ca-cert -n $NAMESPACE' - ' ]' - ' logger.go:42: 13:49:59 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "combined-ca-bundle" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-barbican-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-barbican-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-barbican-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ceilometer-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-cinder-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-cinder-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-cinder-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-galera-openstack-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-galera-openstack-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-glance-default-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-glance-default-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-glance-default-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-keystone-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-keystone-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-keystone-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-kube-state-metrics-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-memcached-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-neutron-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-novncproxy-cell1-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-novncproxy-cell1-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-novncproxy-cell1-vencrypt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-nova-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovn-metrics" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovncontroller-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovndbcluster-nb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovndbcluster-sb-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-ovnnorthd-ovndbs" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-placement-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-placement-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-placement-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-rabbitmq-cell1-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-rabbitmq-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-swift-internal-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-swift-public-route" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:00 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "cert-swift-public-svc" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-internal" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-libvirt" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-ovn" deleted from openstack-kuttl-tests namespace' - ' logger.go:42: 13:50:06 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | secret "rootca-public" deleted from openstack-kuttl-tests namespace' - 'Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice' - ' logger.go:42: 13:50:32 | ctlplane-basic-deployment-with-nicMappings/5-cleanup | test step completed 5-cleanup' - ' logger.go:42: 13:50:32 | ctlplane-basic-deployment-with-nicMappings | skipping kubernetes event logging' - === NAME kuttl - ' harness.go:406: run tests finished' - ' harness.go:514: cleaning up' - ' harness.go:571: removing temp folder: ""' - '--- PASS: kuttl (322.27s)' - ' --- PASS: kuttl/harness (0.00s)' - ' --- PASS: kuttl/harness/ctlplane-basic-deployment-with-nicMappings (320.82s)' - PASS - No resources found - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage_cleanup.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/cleanup-crc-pv.sh - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $6}' - ++ grep Bound - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/mysql-db-openstack-cell1-galera-0 - ++ cut -d / -f 2 - + NAME=mysql-db-openstack-cell1-galera-0 - + oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-cell1-galera-0 --ignore-not-found - persistentvolumeclaim "mysql-db-openstack-cell1-galera-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - ++ cut -d / -f 2 - + NAME=ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 - + oc delete -n openstack-kuttl-tests pvc/ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0 --ignore-not-found - persistentvolumeclaim "ovndbcluster-sb-etc-ovn-ovsdbserver-sb-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/glance-glance-default-external-api-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/glance-glance-default-external-api-0 - ++ cut -d / -f 2 - + NAME=glance-glance-default-external-api-0 - + oc delete -n openstack-kuttl-tests pvc/glance-glance-default-external-api-0 --ignore-not-found - persistentvolumeclaim "glance-glance-default-external-api-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - ++ cut -d / -f 2 - + NAME=ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 - + oc delete -n openstack-kuttl-tests pvc/ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0 --ignore-not-found - persistentvolumeclaim "ovndbcluster-nb-etc-ovn-ovsdbserver-nb-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/glance-glance-default-internal-api-0 - ++ cut -d / -f 2 - + NAME=glance-glance-default-internal-api-0 - + oc delete -n openstack-kuttl-tests pvc/glance-glance-default-internal-api-0 --ignore-not-found - persistentvolumeclaim "glance-glance-default-internal-api-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/mysql-db-openstack-galera-0 - ++ cut -d / -f 2 - + NAME=mysql-db-openstack-galera-0 - + oc delete -n openstack-kuttl-tests pvc/mysql-db-openstack-galera-0 --ignore-not-found - persistentvolumeclaim "mysql-db-openstack-galera-0" deleted from openstack-kuttl-tests namespace - + for pvc in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | grep Bound | awk '{print $6}'` - ++ echo openstack-kuttl-tests/swift-swift-storage-0 - ++ cut -d / -f 1 - + NS=openstack-kuttl-tests - ++ echo openstack-kuttl-tests/swift-swift-storage-0 - ++ cut -d / -f 2 - + NAME=swift-swift-storage-0 - + oc delete -n openstack-kuttl-tests pvc/swift-swift-storage-0 --ignore-not-found - persistentvolumeclaim "swift-swift-storage-0" deleted from openstack-kuttl-tests namespace - ++ oc get pv --selector provisioned-by=crc-devsetup --no-headers - ++ awk '{print $1}' - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage01-crc - persistentvolume "local-storage01-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage02-crc - persistentvolume "local-storage02-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage03-crc - persistentvolume "local-storage03-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage04-crc - persistentvolume "local-storage04-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage05-crc - persistentvolume "local-storage05-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage06-crc - persistentvolume "local-storage06-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage07-crc - persistentvolume "local-storage07-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage08-crc - persistentvolume "local-storage08-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage09-crc - persistentvolume "local-storage09-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage10-crc - persistentvolume "local-storage10-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage11-crc - persistentvolume "local-storage11-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage12-crc - persistentvolume "local-storage12-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage13-crc - persistentvolume "local-storage13-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage14-crc - persistentvolume "local-storage14-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage15-crc - persistentvolume "local-storage15-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage16-crc - persistentvolume "local-storage16-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage17-crc - persistentvolume "local-storage17-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage18-crc - persistentvolume "local-storage18-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage19-crc - persistentvolume "local-storage19-crc" deleted - + for pv in `oc get pv --selector provisioned-by=crc-devsetup --no-headers | awk '{print $1}'` - + oc delete pv/local-storage20-crc - persistentvolume "local-storage20-crc" deleted - if oc get sc "local-storage"; then oc delete sc "local-storage"; fi - NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE - local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer true 5m29s - storageclass.storage.k8s.io "local-storage" deleted - bash scripts/delete-pv.sh - +++ dirname scripts/delete-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ oc apply -f - - ++ cat - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc delete - ++ set -ex - ++ NODE=crc - ++ OPERATION=delete - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/retry_make_crc_storage.sh 3 - 'make[3]: Entering directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - bash scripts/gen-namespace.sh - + '[' -z /home/zuul/ci-framework-data/artifacts/manifests ']' - + '[' -z crc-storage ']' - + OUT_DIR=/home/zuul/ci-framework-data/artifacts/manifests/crc-storage - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc-storage ']' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc-storage/namespace.yaml - namespace/crc-storage unchanged - timeout 500s bash -c "while ! (oc get project.v1.project.openshift.io crc-storage); do sleep 1; done" - NAME DISPLAY NAME STATUS - crc-storage Active - oc project crc-storage - Already on project "crc-storage" on server "https://api.crc.testing:6443". - bash scripts/create-pv.sh - +++ dirname scripts/create-pv.sh - ++ cd scripts - ++ pwd -P - + SCRIPTPATH=/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_common.sh - ++ set -ex - ++ OPERATION=create - ++ cat - ++ oc apply -f - - configmap/crc-storage unchanged - ++ cat - ++ oc apply -f - - serviceaccount/crc-storage unchanged - ++ cat - ++ oc apply -f - - role.rbac.authorization.k8s.io/crc-storage-role unchanged - ++ cat - ++ oc apply -f - - rolebinding.rbac.authorization.k8s.io/crc-storage-rolebinding unchanged - + PV_NUM=20 - + TIMEOUT=500s - ++ oc get pv -o json - ++ jq -r '.items[] | select(.status.phase | test("Released")).metadata.name' - + released= - ++ oc get node -o template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' -l node-role.kubernetes.io/worker - + NODE_NAMES=crc - + '[' -z crc ']' - + for node in $NODE_NAMES - + . /home/zuul/src/github.com/openstack-k8s-operators/install_yamls/scripts/storage_apply.sh crc create - ++ set -ex - ++ NODE=crc - ++ OPERATION=create - ++ oc delete -n crc-storage job crc-storage-crc --ignore-not-found - job.batch "crc-storage-crc" deleted from crc-storage namespace - ++ cat - ++ oc apply -f - - 'Warning: would violate PodSecurity "restricted:latest": privileged (container "storage" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "storage" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "storage" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "node-mnt" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "storage" must set securityContext.runAsNonRoot=true), runAsUser=0 (pod and container "storage" must not set runAsUser=0)' - job.batch/crc-storage-crc created - + oc wait job -n crc-storage -l install-yamls.crc.storage --for condition=Complete --timeout 500s - job.batch/crc-storage-crc condition met - bash scripts/gen-crc-pv-kustomize.sh - + OUT=/home/zuul/ci-framework-data/artifacts/manifests - + '[' -z '"local-storage"' ']' - + '[' '!' -d /home/zuul/ci-framework-data/artifacts/manifests/crc ']' - + PV_NUM=20 - + STORAGE_CAPACITY=10 - ++ oc get node -o name -l node-role.kubernetes.io/worker - ++ head -c-1 - ++ sed -e 's|node/||' - ++ tr '\n' ' ' - + NODE_NAMES=crc - + '[' -z crc ']' - + cat - + for node in $NODE_NAMES - ++ seq -w 20 - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + for i in `seq -w $PV_NUM` - + cat - ++ sed -e 's/^"//' -e 's/"$//' - + cat - oc apply -f /home/zuul/ci-framework-data/artifacts/manifests/crc/storage.yaml - storageclass.storage.k8s.io/local-storage created - persistentvolume/local-storage01-crc created - persistentvolume/local-storage02-crc created - persistentvolume/local-storage03-crc created - persistentvolume/local-storage04-crc created - persistentvolume/local-storage05-crc created - persistentvolume/local-storage06-crc created - persistentvolume/local-storage07-crc created - persistentvolume/local-storage08-crc created - persistentvolume/local-storage09-crc created - persistentvolume/local-storage10-crc created - persistentvolume/local-storage11-crc created - persistentvolume/local-storage12-crc created - persistentvolume/local-storage13-crc created - persistentvolume/local-storage14-crc created - persistentvolume/local-storage15-crc created - persistentvolume/local-storage16-crc created - persistentvolume/local-storage17-crc created - persistentvolume/local-storage18-crc created - persistentvolume/local-storage19-crc created - persistentvolume/local-storage20-crc created - persistentvolumeclaim/ansible-ee-logs unchanged - 'make[3]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make[2]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - '2026/03/16 13:50:51 kutt-test config testdirs is overridden with args: [ /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests ]' - === RUN kuttl - ' harness.go:463: starting setup' - ' harness.go:255: running tests using configured kubeconfig.' - ' harness.go:278: Successful connection to cluster at: https://api.crc.testing:6443' - ' logger.go:42: 13:50:51 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_netconfig.yaml]' - ' logger.go:42: 13:50:51 | | netconfig.network.openstack.org/netconfig configured' - ' logger.go:42: 13:50:51 | | running command: [oc apply -n openstack-kuttl-tests -f https://raw.githubusercontent.com/openstack-k8s-operators/infra-operator/main/config/samples/network_v1beta1_dnsmasq.yaml]' - ' logger.go:42: 13:50:52 | | dnsmasq.network.openstack.org/dnsmasq configured' - ' logger.go:42: 13:50:52 | | running command: [sh -c if [ ! -f ansibleee-ssh-key-id_rsa ]; then' - ' ssh-keygen -f ansibleee-ssh-key-id_rsa -N "" -t rsa -b 4096' - ' fi' - ' oc create secret generic dataplane-ansible-ssh-private-key-secret \' - ' --save-config \' - ' --dry-run=client \' - ' --from-file=authorized_keys=ansibleee-ssh-key-id_rsa.pub \' - ' --from-file=ssh-privatekey=ansibleee-ssh-key-id_rsa \' - ' --from-file=ssh-publickey=ansibleee-ssh-key-id_rsa.pub \' - ' -n openstack-kuttl-tests \' - ' -o yaml | \' - ' oc apply -f -' - ' ]' - ' logger.go:42: 13:50:53 | | secret/dataplane-ansible-ssh-private-key-secret unchanged' - ' harness.go:363: running tests' - ' harness.go:75: going to run test suite with timeout of 1380 seconds for each step' - ' harness.go:375: testsuite: /home/zuul/ci-framework-data/artifacts/manifests/operator/openstack-operator/test/kuttl/tests has 20 tests' - === RUN kuttl/harness - === RUN kuttl/harness/ctlplane-collapsed - === PAUSE kuttl/harness/ctlplane-collapsed - === CONT kuttl/harness/ctlplane-collapsed - ' logger.go:42: 13:50:53 | ctlplane-collapsed | Skipping creation of user-supplied namespace: openstack-kuttl-tests' - ' logger.go:42: 13:50:53 | ctlplane-collapsed/0-deps | starting test step 0-deps' - ' logger.go:42: 13:50:53 | ctlplane-collapsed/0-deps | running command: [sh -c oc apply -f ../../common/rhobs.yaml' - ' until oc api-resources | grep -q rhobs; do sleep 1; done' - ' ]' - ' logger.go:42: 13:50:53 | ctlplane-collapsed/0-deps | subscription.operators.coreos.com/cluster-observability-operator created' - ' logger.go:42: 13:51:07 | ctlplane-collapsed/0-deps | test step completed 0-deps' - ' logger.go:42: 13:51:07 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | starting test step 1-deploy-openstack-collapsed-cell' - ' logger.go:42: 13:51:07 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | running command: [sh -c oc apply -n $NAMESPACE -f ../../../../config/samples/core_v1beta1_openstackcontrolplane_collapsed_cell.yaml' - ' ]' - ' logger.go:42: 13:51:08 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | Warning: spec.galera.template[openstack].storageRequest: 500M is not appropriate for production! For production use at least 5G!' - ' logger.go:42: 13:51:08 | ctlplane-collapsed/1-deploy-openstack-collapsed-cell | The OpenStackControlPlane "openstack-collapsed-cell" is invalid: metadata.name: Invalid value: "openstack-collapsed-cell": OpenStackControlPlane ''openstack-collapsed-cell'' must have same name as the existing ''openstack'' OpenStackVersion' - ' case.go:396: failed in step 1-deploy-openstack-collapsed-cell' - ' case.go:398: command "oc apply -n $NAMESPACE -f ../../../../config/samples/core_v1beta1_o..." failed, exit status 1' - ' logger.go:42: 13:51:08 | ctlplane-collapsed | skipping kubernetes event logging' - === NAME kuttl - ' harness.go:406: run tests finished' - ' harness.go:514: cleaning up' - ' harness.go:571: removing temp folder: ""' - '--- FAIL: kuttl (16.56s)' - ' --- FAIL: kuttl/harness (0.00s)' - ' --- FAIL: kuttl/harness/ctlplane-collapsed (14.96s)' - FAIL - 'make[1]: *** [Makefile:2100: openstack_kuttl_run] Error 1' - 'make[1]: Leaving directory ''/home/zuul/src/github.com/openstack-k8s-operators/install_yamls''' - 'make: *** [Makefile:2117: openstack_kuttl] Error 2' 2026-03-16 13:51:08,200 p=32486 u=zuul n=ansible | ...ignoring 2026-03-16 13:51:08,219 p=32486 u=zuul n=ansible | TASK [Get resource status after openstack_kuttl run _raw_params={{ item }} >> {{ cifmw_artifacts_basedir }}/logs/cmd_after_{{ operator }}_kuttl.log ] *** 2026-03-16 13:51:08,219 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:08 +0000 (0:33:52.695) 0:36:14.292 ********** 2026-03-16 13:51:08,219 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:08 +0000 (0:33:52.695) 0:36:14.291 ********** 2026-03-16 13:51:08,484 p=32486 u=zuul n=ansible | changed: [localhost] => (item=oc get pv) 2026-03-16 13:51:09,008 p=32486 u=zuul n=ansible | changed: [localhost] => (item=oc get all) 2026-03-16 13:51:09,015 p=32486 u=zuul n=ansible | TASK [Find the generated JUnitXML files paths={{ cifmw_installyamls_repos }}, file_type=file, patterns=*.xml] *** 2026-03-16 13:51:09,015 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.796) 0:36:15.088 ********** 2026-03-16 13:51:09,015 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.796) 0:36:15.087 ********** 2026-03-16 13:51:09,159 p=32486 u=zuul n=ansible | ok: [localhost] 2026-03-16 13:51:09,166 p=32486 u=zuul n=ansible | TASK [Create the test results directory path={{ _kuttl_test_result_dir }}, state=directory, mode=0755] *** 2026-03-16 13:51:09,166 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.151) 0:36:15.239 ********** 2026-03-16 13:51:09,166 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.151) 0:36:15.238 ********** 2026-03-16 13:51:09,318 p=32486 u=zuul n=ansible | changed: [localhost] 2026-03-16 13:51:09,324 p=32486 u=zuul n=ansible | TASK [Copy the generated test results to the test results directory src={{ item.path }}, dest={{ _kuttl_test_result_dir }}, mode=0644] *** 2026-03-16 13:51:09,324 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.158) 0:36:15.397 ********** 2026-03-16 13:51:09,324 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.158) 0:36:15.396 ********** 2026-03-16 13:51:09,759 p=32486 u=zuul n=ansible | changed: [localhost] => (item={'path': '/home/zuul/src/github.com/openstack-k8s-operators/install_yamls/kuttl-report-openstack.xml', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 1000, 'gid': 1000, 'size': 638, 'inode': 67198569, 'dev': 64513, 'nlink': 1, 'atime': 1773668341.0744946, 'mtime': 1773669068.0541847, 'ctime': 1773669068.0541847, 'gr_name': 'zuul', 'pw_name': 'zuul', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) 2026-03-16 13:51:09,767 p=32486 u=zuul n=ansible | TASK [Fail when any tests failed that=['_kuttl_curr_operator_result.rc == 0'], success_msg=KUTTL tests for {{ operator }} passed, fail_msg=KUTTL tests for {{ operator }} failed] *** 2026-03-16 13:51:09,767 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.442) 0:36:15.840 ********** 2026-03-16 13:51:09,767 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.442) 0:36:15.839 ********** 2026-03-16 13:51:09,795 p=32486 u=zuul n=ansible | fatal: [localhost]: FAILED! => assertion: _kuttl_curr_operator_result.rc == 0 changed: false evaluated_to: false msg: KUTTL tests for openstack failed 2026-03-16 13:51:09,796 p=32486 u=zuul n=ansible | NO MORE HOSTS LEFT ************************************************************* 2026-03-16 13:51:09,797 p=32486 u=zuul n=ansible | PLAY RECAP ********************************************************************* 2026-03-16 13:51:09,797 p=32486 u=zuul n=ansible | localhost : ok=129 changed=53 unreachable=0 failed=1 skipped=70 rescued=0 ignored=2 2026-03-16 13:51:09,797 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.030) 0:36:15.871 ********** 2026-03-16 13:51:09,797 p=32486 u=zuul n=ansible | =============================================================================== 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | install_yamls_makes : Run openstack_kuttl ---------------------------- 2032.70s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | install_yamls_makes : Run download_tools ------------------------------- 40.49s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_setup : Install needed packages ------------------------------------- 26.01s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_local_storage : Remove the cifmw_cls_namespace namespace ------------ 10.61s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | repo_setup : Initialize python venv and install requirements ------------ 7.79s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_setup : Install openshift client ------------------------------------- 6.09s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_local_storage : Perform action in the PV directory ------------------- 5.29s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | install_yamls_makes : Run crc_attach_default_interface ------------------ 5.16s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_local_storage : Perform action in the PV directory ------------------- 5.01s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | openshift_setup : Create required namespaces ---------------------------- 2.06s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | discover_latest_image : Get latest image for the current entry ---------- 1.89s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | run_hook : Run hook without retry - Fetch crc facts and save them as parameters for kuttl jobs --- 1.33s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | run_hook : Run hook without retry - Fetch crc facts and save them as parameters for kuttl jobs --- 1.32s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_local_storage : Fetch hostnames for all hosts ------------------------ 1.24s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | repo_setup : Get repo-setup repository ---------------------------------- 1.02s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_setup : Manage directories ------------------------------------------- 0.82s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | Gathering Facts --------------------------------------------------------- 0.82s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | ci_local_storage : Fetch hostnames for all hosts ------------------------ 0.82s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | Get resource status after openstack_kuttl run --------------------------- 0.80s 2026-03-16 13:51:09,798 p=32486 u=zuul n=ansible | repo_setup : Run repo-setup --------------------------------------------- 0.79s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | Monday 16 March 2026 13:51:09 +0000 (0:00:00.031) 0:36:15.870 ********** 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | =============================================================================== 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | install_yamls_makes -------------------------------------------------- 2078.48s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ci_setup --------------------------------------------------------------- 33.92s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ci_local_storage ------------------------------------------------------- 27.51s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | repo_setup ------------------------------------------------------------- 14.73s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | run_hook ---------------------------------------------------------------- 4.71s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | openshift_setup --------------------------------------------------------- 4.52s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | openshift_login --------------------------------------------------------- 3.07s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | install_yamls ----------------------------------------------------------- 2.48s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | discover_latest_image --------------------------------------------------- 2.02s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.shell --------------------------------------------------- 1.45s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | gather_facts ------------------------------------------------------------ 0.82s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | cifmw_setup ------------------------------------------------------------- 0.55s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.copy ---------------------------------------------------- 0.44s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | install_ca -------------------------------------------------------------- 0.36s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.include_role -------------------------------------------- 0.26s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.file ---------------------------------------------------- 0.16s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.find ---------------------------------------------------- 0.15s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.set_fact ------------------------------------------------ 0.07s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.include_tasks ------------------------------------------- 0.07s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.include_vars -------------------------------------------- 0.04s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ansible.builtin.assert -------------------------------------------------- 0.03s 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2026-03-16 13:51:09,799 p=32486 u=zuul n=ansible | total ---------------------------------------------------------------- 2175.84s