Skip to content

Commit a6120b9

Browse files
committed
Add generic container-image-content-provider job
Add an abstract Zuul job and playbook that builds a container image from the current change and serves it from a local registry. This provides a reusable content-provider pattern for repos like sg-core, prometheus-podman-exporter, and mysqld_exporter that need container image builds as part of the telemetry verification pipeline. Generated-By: Claude-Code claude-opus-4-6
1 parent 97b8da4 commit a6120b9

3 files changed

Lines changed: 106 additions & 2 deletions

File tree

.zuul.yaml

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,40 @@
11
---
2+
- job:
3+
name: telemetry-container-image-content-provider
4+
parent: cifmw-base-minimal
5+
description: |
6+
Build sg-core, prometheus-podman-exporter and mysqld-exporter
7+
container images from the current change and serve them from
8+
a local registry for dependent jobs.
9+
required-projects:
10+
- name: github.com/openstack-k8s-operators/ci-framework
11+
override-checkout: main
12+
- name: github.com/openstack-k8s-operators/sg-core
13+
override-checkout: main
14+
- name: github.com/openstack-k8s-operators/prometheus-podman-exporter
15+
override-checkout: main
16+
- name: github.com/openstack-k8s-operators/mysqld_exporter
17+
override-checkout: main
18+
run:
19+
- ci/playbooks/container-image-content-provider.yml
20+
vars:
21+
container_images:
22+
- src: "{{ ansible_user_dir }}/src/github.com/openstack-k8s-operators/sg-core"
23+
name: sg-core
24+
update_var: cifmw_update_containers_ceilometersgcoreImage
25+
- src: "{{ ansible_user_dir }}/src/github.com/openstack-k8s-operators/prometheus-podman-exporter"
26+
name: prometheus-podman-exporter
27+
update_var: cifmw_update_containers_edpmpodmanexporterImage
28+
- src: "{{ ansible_user_dir }}/src/github.com/openstack-k8s-operators/mysqld_exporter"
29+
name: mysqld-exporter
30+
update_var: cifmw_update_containers_ceilometermysqldexporterImage
31+
232
- job:
333
name: functional-tests-osp18
4-
dependencies: ["telemetry-openstack-meta-content-provider-master"]
34+
dependencies:
35+
- name: telemetry-openstack-meta-content-provider-master
36+
- name: telemetry-container-image-content-provider
37+
soft: true
538
parent: telemetry-operator-multinode-autoscaling
639
description: |
740
Run autoscaling functional tests, tempest tests, metrics
@@ -14,7 +47,7 @@
1447
content_provider_dlrn_md5_hash: ''
1548
vars:
1649
patch_observabilityclient: true
17-
cifmw_update_containers: false
50+
cifmw_update_containers: true
1851
crc_enable_monitoring: true
1952
cifmw_extras:
2053
- "@{{ ansible_user_dir }}/{{ zuul.projects['github.com/openstack-k8s-operators/ci-framework'].src_dir }}/scenarios/centos-9/multinode-ci.yml"
@@ -43,6 +76,12 @@
4376
override-checkout: main
4477
- name: github.com/openstack-k8s-operators/telemetry-operator
4578
override-checkout: main
79+
- name: github.com/openstack-k8s-operators/sg-core
80+
override-checkout: main
81+
- name: github.com/openstack-k8s-operators/prometheus-podman-exporter
82+
override-checkout: main
83+
- name: github.com/openstack-k8s-operators/mysqld_exporter
84+
override-checkout: main
4685
irrelevant-files: &irrelevant_files
4786
- .github/.*
4887
- ci/github/.*
@@ -169,6 +208,12 @@
169208
- name: github.com/openstack-k8s-operators/telemetry-operator
170209
override-checkout: main
171210
- name: github.com/infrawatch/feature-verification-tests
211+
- name: github.com/openstack-k8s-operators/sg-core
212+
override-checkout: main
213+
- name: github.com/openstack-k8s-operators/prometheus-podman-exporter
214+
override-checkout: main
215+
- name: github.com/openstack-k8s-operators/mysqld_exporter
216+
override-checkout: main
172217
vars:
173218
cifmw_extras:
174219
- "@{{ ansible_user_dir }}/{{ zuul.projects['github.com/openstack-k8s-operators/ci-framework'].src_dir }}/scenarios/centos-9/multinode-ci.yml"
@@ -188,6 +233,11 @@
188233
jobs:
189234
- telemetry-openstack-meta-content-provider-master:
190235
override-checkout: main
236+
- telemetry-container-image-content-provider:
237+
files:
238+
- ^ci/playbooks/container-image-build.yml$
239+
- ^ci/playbooks/container-image-content-provider.yml$
240+
- ^.zuul.yaml$
191241
- functional-chargeback-tests-osp18:
192242
files:
193243
- ^roles/telemetry_chargeback/.*$
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
- name: "Get commit SHA for {{ container_image.name }}"
3+
ansible.builtin.command:
4+
cmd: git show-ref --head --hash head
5+
chdir: "{{ container_image.src }}"
6+
register: _container_sha
7+
8+
- name: "Set image reference for {{ container_image.name }}"
9+
ansible.builtin.set_fact:
10+
_container_image_url: "{{ cifmw_rp_registry_ip }}:5001/{{ container_image.name }}:{{ _container_sha.stdout | trim }}"
11+
12+
- name: "Build {{ container_image.name }}"
13+
ansible.builtin.command:
14+
cmd: >-
15+
make docker-build
16+
IMG={{ _container_image_url }}
17+
chdir: "{{ container_image.src }}"
18+
19+
- name: "Push {{ container_image.name }}"
20+
ansible.builtin.command:
21+
cmd: >-
22+
make docker-push
23+
IMG={{ _container_image_url }}
24+
chdir: "{{ container_image.src }}"
25+
26+
- name: "Record built image {{ container_image.name }}"
27+
ansible.builtin.set_fact:
28+
_built_images: "{{ _built_images | default([]) + [{'name': container_image.name, 'update_var': container_image.update_var, 'url': _container_image_url}] }}"
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
- name: Build and serve container images from review
3+
hosts: "{{ cifmw_target_host | default('controller') }}"
4+
gather_facts: true
5+
tasks:
6+
- name: Discover registry IP
7+
ansible.builtin.set_fact:
8+
cifmw_rp_registry_ip: "{{ ansible_host }}"
9+
10+
- name: Deploy local registry
11+
ansible.builtin.include_role:
12+
name: registry_deploy
13+
14+
- name: Build and push container images
15+
ansible.builtin.include_tasks: container-image-build.yml
16+
loop: "{{ container_images }}"
17+
loop_control:
18+
loop_var: container_image
19+
20+
- name: Return image URLs and pause for dependent jobs
21+
zuul_return:
22+
data: "{{ _return_data }}"
23+
vars:
24+
_image_overrides: "{{ dict(_built_images | default([]) | map(attribute='update_var') | zip(_built_images | default([]) | map(attribute='url'))) }}"
25+
_registry: "{{ cifmw_rp_registry_ip }}:5001"
26+
_return_data: "{{ {'zuul': {'pause': true}, 'cifmw_crc_additional_insecure_registries': [_registry], 'cifmw_crc_additional_allowed_registries': [_registry]} | combine(_image_overrides) }}"

0 commit comments

Comments
 (0)