From c38a517b097477c8519c61962de310e11fe0939d Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Wed, 15 Apr 2026 21:51:26 +0000 Subject: [PATCH 1/2] Add Zuul CI for container builds and functional tests Replace the stale stf-crc-jobs template with the telemetry container image content-provider pipeline. Add a Makefile with docker-build and docker-push targets matching the operator convention. Generated-By: Claude-Code claude-opus-4-6 --- .zuul.yaml | 12 ++++++++++-- Makefile | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 Makefile diff --git a/.zuul.yaml b/.zuul.yaml index 8b31cb5c..0a8abc0b 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -1,5 +1,13 @@ --- - project: name: openstack-k8s-operators/sg-core - templates: - - stf-crc-jobs + github-check: + jobs: + - telemetry-container-image-content-provider + - telemetry-openstack-meta-content-provider-master: + override-checkout: main + - functional-tests-osp18: + override-checkout: master + dependencies: + - telemetry-openstack-meta-content-provider-master + - telemetry-container-image-content-provider diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..cc045dc6 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +IMG ?= quay.io/openstack-k8s-operators/sg-core:latest + +.PHONY: docker-build +docker-build: ## Build container image + podman build -t ${IMG} -f build/Dockerfile . + +.PHONY: docker-push +docker-push: ## Push container image + podman push ${IMG} From f9ef36921b0ffad53cf97b9e63e50e0a3e969bca Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Wed, 15 Apr 2026 21:51:53 +0000 Subject: [PATCH 2/2] Temporarily inline telemetry-container-image-content-provider job Copy the job definition and playbooks from feature-verification-tests into sg-core so that Zuul can resolve the job before the fvt PR merges. Remove this once infrawatch/feature-verification-tests#345 lands. Generated-By: Claude-Code claude-opus-4-6 --- .zuul.yaml | 29 +++++++++++++++++-- ci/playbooks/container-image-build.yml | 28 ++++++++++++++++++ .../container-image-content-provider.yml | 26 +++++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 ci/playbooks/container-image-build.yml create mode 100644 ci/playbooks/container-image-content-provider.yml diff --git a/.zuul.yaml b/.zuul.yaml index 0a8abc0b..ebdf1683 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -1,13 +1,38 @@ --- +# TODO: Remove the inlined job definition once +- job: + name: telemetry-container-image-content-provider-test + parent: cifmw-base-minimal + nodeset: centos-stream-9-vexxhost + description: | + Build sg-core and mysqld-exporter container images from the + current change and serve them from a local registry for + dependent jobs. + required-projects: + - name: openstack-k8s-operators/ci-framework + override-checkout: main + - name: openstack-k8s-operators/sg-core + - name: openstack-k8s-operators/mysqld_exporter + run: + - ci/playbooks/container-image-content-provider.yml + vars: + container_images: + - src: "{{ ansible_user_dir }}/src/github.com/openstack-k8s-operators/sg-core" + name: sg-core + update_var: cifmw_update_containers_ceilometersgcoreImage + - src: "{{ ansible_user_dir }}/src/github.com/openstack-k8s-operators/mysqld_exporter" + name: mysqld-exporter + update_var: cifmw_update_containers_ceilometermysqldexporterImage + - project: name: openstack-k8s-operators/sg-core github-check: jobs: - - telemetry-container-image-content-provider + - telemetry-container-image-content-provider-test - telemetry-openstack-meta-content-provider-master: override-checkout: main - functional-tests-osp18: override-checkout: master dependencies: - telemetry-openstack-meta-content-provider-master - - telemetry-container-image-content-provider + - telemetry-container-image-content-provider-test diff --git a/ci/playbooks/container-image-build.yml b/ci/playbooks/container-image-build.yml new file mode 100644 index 00000000..f9085729 --- /dev/null +++ b/ci/playbooks/container-image-build.yml @@ -0,0 +1,28 @@ +--- +- name: "Get commit SHA for {{ container_image.name }}" + ansible.builtin.command: + cmd: git show-ref --head --hash head + chdir: "{{ container_image.src }}" + register: _container_sha + +- name: "Set image reference for {{ container_image.name }}" + ansible.builtin.set_fact: + _container_image_url: "{{ cifmw_rp_registry_ip }}:5001/{{ container_image.name }}:{{ _container_sha.stdout | trim }}" + +- name: "Build {{ container_image.name }}" + ansible.builtin.command: + cmd: >- + make docker-build + IMG={{ _container_image_url }} + chdir: "{{ container_image.src }}" + +- name: "Push {{ container_image.name }}" + ansible.builtin.command: + cmd: >- + make docker-push + IMG={{ _container_image_url }} + chdir: "{{ container_image.src }}" + +- name: "Record built image {{ container_image.name }}" + ansible.builtin.set_fact: + _built_images: "{{ _built_images | default([]) + [{'name': container_image.name, 'update_var': container_image.update_var, 'url': _container_image_url}] }}" diff --git a/ci/playbooks/container-image-content-provider.yml b/ci/playbooks/container-image-content-provider.yml new file mode 100644 index 00000000..4e0f4691 --- /dev/null +++ b/ci/playbooks/container-image-content-provider.yml @@ -0,0 +1,26 @@ +--- +- name: Build and serve container images from review + hosts: "{{ cifmw_target_host | default('controller') }}" + gather_facts: true + tasks: + - name: Discover registry IP + ansible.builtin.set_fact: + cifmw_rp_registry_ip: "{{ ansible_host }}" + + - name: Deploy local registry + ansible.builtin.include_role: + name: registry_deploy + + - name: Build and push container images + ansible.builtin.include_tasks: container-image-build.yml + loop: "{{ container_images }}" + loop_control: + loop_var: container_image + + - name: Return image URLs and pause for dependent jobs + zuul_return: + data: "{{ _return_data }}" + vars: + _image_overrides: "{{ dict(_built_images | default([]) | map(attribute='update_var') | zip(_built_images | default([]) | map(attribute='url'))) }}" + _registry: "{{ cifmw_rp_registry_ip }}:5001" + _return_data: "{{ {'zuul': {'pause': true}, 'cifmw_crc_additional_insecure_registries': [_registry], 'cifmw_crc_additional_allowed_registries': [_registry]} | combine(_image_overrides) }}"