Skip to content

Commit c42a465

Browse files
Merge pull request #305 from shiftstack/rebase-capo-v0.10
OSASINFRA-3437: Rebase on CAPO v0.10
2 parents bbf8955 + 0a9e144 commit c42a465

File tree

1,910 files changed

+141461
-67472
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,910 files changed

+141461
-67472
lines changed

.gitattributes

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Tell GitHub about generated files
2+
3+
# deepcopy and conversion-gen
4+
zz_generated.* linguist-generated=true
5+
6+
# Generated parts of manifests
7+
/config/crd/bases/infrastructure.cluster.x-k8s.io_*.yaml linguist-generated=true
8+
/config/webhook/manifests.yaml linguist-generated=true
9+
/config/rbac/role.yaml linguist-generated=true
10+
11+
# Generated API docs
12+
/docs/book/src/api/*/** linguist-generated=true

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ sshuttle.pid
173173

174174
# Book
175175
docs/book/book/
176+
!docs/book/gen-crd-api-reference-docs/config.json
176177

177178
# venv
178179
.venv

.golangci.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ linters-settings:
101101
- pkg: sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha6
102102
alias: infrav1alpha6
103103
- pkg: sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha7
104+
alias: infrav1alpha7
105+
- pkg: sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1
104106
alias: infrav1
105107
- pkg: sigs.k8s.io/cluster-api-provider-openstack/pkg/utils/errors
106108
alias: capoerrors
@@ -166,11 +168,14 @@ issues:
166168
- linters:
167169
- revive
168170
text: "var-naming: don't use underscores in Go names;"
169-
path: .*(api|types)\/.*\/.*conversion.*\.go$
170171
- linters:
171172
- stylecheck
172173
text: "ST1003: should not use underscores in Go names;"
173-
path: .*(api|types)\/.*\/.*conversion.*\.go$
174+
path: (api\/.*|pkg/utils/optional)\/.*conversion.*\.go$
175+
- linters:
176+
- stylecheck
177+
text: "ST1003: should not use underscores in Go names;"
178+
path: pkg/utils/conversioncommon/.*.go
174179

175180
run:
176181
timeout: 10m

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
# Build the manager binary
16-
FROM golang:1.20.10 as builder
16+
FROM golang:1.22.0 as builder
1717
WORKDIR /workspace
1818

1919
# Run this with docker build --build_arg goproxy=$(go env GOPROXY) to override the goproxy

Makefile

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ KUSTOMIZE := $(TOOLS_BIN_DIR)/kustomize
5252
MOCKGEN := $(TOOLS_BIN_DIR)/mockgen
5353
RELEASE_NOTES := $(TOOLS_BIN_DIR)/release-notes
5454
SETUP_ENVTEST := $(TOOLS_BIN_DIR)/setup-envtest
55+
GEN_CRD_API_REFERENCE_DOCS := $(TOOLS_BIN_DIR)/gen-crd-api-reference-docs
5556

5657
# Kubebuilder
5758
export KUBEBUILDER_ENVTEST_KUBERNETES_VERSION ?= 1.28.0
@@ -132,13 +133,15 @@ ifdef KUBEBUILDER_ASSETS_DIR
132133
setup_envtest_extra_args += --bin-dir $(KUBEBUILDER_ASSETS_DIR)
133134
endif
134135

136+
.PHONY: kubebuilder_assets
137+
kubebuilder_assets: $(SETUP_ENVTEST)
138+
@echo Fetching assets for $(KUBEBUILDER_ENVTEST_KUBERNETES_VERSION)
139+
$(eval KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST) use --use-env -p path $(setup_envtest_extra_args) $(KUBEBUILDER_ENVTEST_KUBERNETES_VERSION)))
140+
135141
.PHONY: test
136-
test: $(SETUP_ENVTEST) ## Run tests
137-
set -xeuf -o pipefail; \
138-
if [ -z "$(KUBEBUILDER_ASSETS)" ]; then \
139-
KUBEBUILDER_ASSETS=`$(SETUP_ENVTEST) use --use-env -p path $(setup_envtest_extra_args) $(KUBEBUILDER_ENVTEST_KUBERNETES_VERSION)`; \
140-
fi; \
141-
KUBEBUILDER_ASSETS="$$KUBEBUILDER_ASSETS" go test -v ./... $(TEST_ARGS)
142+
TEST_PATHS ?= ./...
143+
test: kubebuilder_assets
144+
KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -v $(TEST_PATHS) $(TEST_ARGS)
142145

143146
E2E_TEMPLATES_DIR=test/e2e/data/infrastructure-openstack
144147
E2E_KUSTOMIZE_DIR=test/e2e/data/kustomize
@@ -148,16 +151,18 @@ E2E_NO_ARTIFACT_TEMPLATES_DIR=test/e2e/data/infrastructure-openstack-no-artifact
148151
.PHONY: e2e-templates
149152
e2e-templates: ## Generate cluster templates for e2e tests
150153
e2e-templates: $(addprefix $(E2E_NO_ARTIFACT_TEMPLATES_DIR)/, \
151-
cluster-template-v1alpha5.yaml \
152154
cluster-template-v1alpha6.yaml \
155+
cluster-template-v1alpha7.yaml \
153156
cluster-template-md-remediation.yaml \
154157
cluster-template-kcp-remediation.yaml \
155158
cluster-template-multi-az.yaml \
156159
cluster-template-multi-network.yaml \
157160
cluster-template-without-lb.yaml \
158161
cluster-template.yaml \
159162
cluster-template-flatcar.yaml \
160-
cluster-template-k8s-upgrade.yaml)
163+
cluster-template-k8s-upgrade.yaml \
164+
cluster-template-flatcar-sysext.yaml \
165+
cluster-template-no-bastion.yaml)
161166
# Currently no templates that require CI artifacts
162167
# $(addprefix $(E2E_TEMPLATES_DIR)/, add-templates-here.yaml) \
163168
@@ -167,15 +172,16 @@ $(E2E_NO_ARTIFACT_TEMPLATES_DIR)/cluster-template.yaml: $(E2E_KUSTOMIZE_DIR)/wit
167172
$(E2E_NO_ARTIFACT_TEMPLATES_DIR)/cluster-template-%.yaml: $(E2E_KUSTOMIZE_DIR)/% $(KUSTOMIZE) FORCE
168173
$(KUSTOMIZE) build "$<" > "$@"
169174

170-
e2e-prerequisites: $(GINKGO) e2e-templates e2e-image test-e2e-image-prerequisites ## Build all artifacts required by e2e tests
175+
e2e-prerequisites: e2e-templates e2e-image test-e2e-image-prerequisites ## Build all artifacts required by e2e tests
171176

172177
# Can be run manually, e.g. via:
173178
# export OPENSTACK_CLOUD_YAML_FILE="$(pwd)/clouds.yaml"
174179
# E2E_GINKGO_ARGS="-stream -focus='default'" E2E_ARGS="-use-existing-cluster='true'" make test-e2e
175180
E2E_GINKGO_ARGS ?=
176181
.PHONY: test-e2e ## Run e2e tests using clusterctl
177-
test-e2e: e2e-prerequisites ## Run e2e tests
182+
test-e2e: $(GINKGO) e2e-prerequisites ## Run e2e tests
178183
time $(GINKGO) -fail-fast -trace -timeout=3h -show-node-events -v -tags=e2e -nodes=$(E2E_GINKGO_PARALLEL) \
184+
--output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" \
179185
-focus="$(E2E_GINKGO_FOCUS)" $(_SKIP_ARGS) $(E2E_GINKGO_ARGS) ./test/e2e/suites/e2e/... -- \
180186
-config-path="$(E2E_CONF_PATH)" -artifacts-folder="$(ARTIFACTS)" \
181187
-data-folder="$(E2E_DATA_DIR)" $(E2E_ARGS)
@@ -197,7 +203,7 @@ CONFORMANCE_E2E_ARGS ?= -kubetest.config-file=$(KUBETEST_CONF_PATH)
197203
CONFORMANCE_E2E_ARGS += $(E2E_ARGS)
198204
CONFORMANCE_GINKGO_ARGS ?= -stream
199205
.PHONY: test-conformance
200-
test-conformance: e2e-prerequisites ## Run clusterctl based conformance test on workload cluster (requires Docker).
206+
test-conformance: $(GINKGO) e2e-prerequisites ## Run clusterctl based conformance test on workload cluster (requires Docker).
201207
time $(GINKGO) -trace -show-node-events -v -tags=e2e -focus="conformance" $(CONFORMANCE_GINKGO_ARGS) ./test/e2e/suites/conformance/... -- -config-path="$(E2E_CONF_PATH)" -artifacts-folder="$(ARTIFACTS)" --data-folder="$(E2E_DATA_DIR)" $(CONFORMANCE_E2E_ARGS)
202208

203209
test-conformance-fast: ## Run clusterctl based conformance test on workload cluster (requires Docker) using a subset of the conformance suite in parallel.
@@ -244,30 +250,39 @@ modules: ## Runs go mod to ensure proper vendoring.
244250
cd $(TOOLS_DIR); go mod tidy
245251

246252
.PHONY: generate
247-
generate: ## Generate code
248-
$(MAKE) generate-go
249-
$(MAKE) generate-manifests
253+
generate: templates generate-controller-gen generate-conversion-gen generate-go generate-manifests generate-api-docs ## Generate all generated code
250254

251255
.PHONY: generate-go
252256
generate-go: $(MOCKGEN)
253-
$(MAKE) -B $(CONTROLLER_GEN) $(CONVERSION_GEN)
257+
go generate ./...
258+
259+
.PHONY: generate-controller-gen
260+
generate-controller-gen: $(CONTROLLER_GEN)
254261
$(CONTROLLER_GEN) \
255262
paths=./api/... \
256263
object:headerFile=./hack/boilerplate/boilerplate.generatego.txt
264+
265+
.PHONY: generate-conversion-gen
266+
capo_module := sigs.k8s.io/cluster-api-provider-openstack
267+
generate-conversion-gen: $(CONVERSION_GEN)
257268
$(CONVERSION_GEN) \
258-
--input-dirs=./api/v1alpha5 \
259-
--input-dirs=./api/v1alpha6 \
260-
--input-dirs=./api/v1alpha7 \
269+
--input-dirs=$(capo_module)/api/v1alpha5 \
270+
--input-dirs=$(capo_module)/api/v1alpha6 \
271+
--input-dirs=$(capo_module)/api/v1alpha7 \
272+
--extra-dirs=$(capo_module)/pkg/utils/optional \
273+
--extra-dirs=$(capo_module)/pkg/utils/conversioncommon \
261274
--output-file-base=zz_generated.conversion \
275+
--trim-path-prefix=$(capo_module)/ \
262276
--go-header-file=./hack/boilerplate/boilerplate.generatego.txt
263-
go generate ./...
264277

265278
.PHONY: generate-manifests
266279
generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
267280
$(CONTROLLER_GEN) \
268281
paths=./api/... \
269282
crd:crdVersions=v1 \
270-
output:crd:dir=$(CRD_ROOT) \
283+
output:crd:dir=$(CRD_ROOT)
284+
$(CONTROLLER_GEN) \
285+
paths=./pkg/webhooks/... \
271286
output:webhook:dir=$(WEBHOOK_ROOT) \
272287
webhook
273288
$(CONTROLLER_GEN) \
@@ -276,6 +291,15 @@ generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
276291
output:rbac:dir=$(RBAC_ROOT) \
277292
rbac:roleName=manager-role
278293

294+
.PHONY: generate-api-docs
295+
generate-api-docs: generate-api-docs-v1beta1 generate-api-docs-v1alpha7 generate-api-docs-v1alpha6 generate-api-docs-v1alpha1
296+
generate-api-docs-%: $(GEN_CRD_API_REFERENCE_DOCS) FORCE
297+
$(GEN_CRD_API_REFERENCE_DOCS) \
298+
-api-dir=./api/$* \
299+
-config=./docs/book/gen-crd-api-reference-docs/config.json \
300+
-template-dir=./docs/book/gen-crd-api-reference-docs/template \
301+
-out-file=./docs/book/src/api/$*/api.md
302+
279303
## --------------------------------------
280304
##@ Docker
281305
## --------------------------------------
@@ -404,12 +428,13 @@ release-notes: $(RELEASE_NOTES) ## Generate release notes
404428
templates: ## Generate cluster templates
405429
templates: templates/cluster-template.yaml \
406430
templates/cluster-template-without-lb.yaml \
407-
templates/cluster-template-flatcar.yaml
431+
templates/cluster-template-flatcar.yaml \
432+
templates/cluster-template-flatcar-sysext.yaml
408433

409-
templates/cluster-template.yaml: kustomize/v1alpha7/default $(KUSTOMIZE) FORCE
434+
templates/cluster-template.yaml: kustomize/v1beta1/default $(KUSTOMIZE) FORCE
410435
$(KUSTOMIZE) build "$<" > "$@"
411436

412-
templates/cluster-template-%.yaml: kustomize/v1alpha7/% $(KUSTOMIZE) FORCE
437+
templates/cluster-template-%.yaml: kustomize/v1beta1/% $(KUSTOMIZE) FORCE
413438
$(KUSTOMIZE) build "$<" > "$@"
414439

415440
.PHONY: release-templates

OWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ emeritus_approvers:
1919
- sbueringer
2020
- hidekazuna
2121
- chrischdi
22+
- tobiasgiese
23+
- seanschneeweiss

OWNERS_ALIASES

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ aliases:
2222
- jichenjc
2323
- lentzi90
2424
- mdbooth
25-
- seanschneeweiss
26-
- tobiasgiese
2725
cluster-api-openstack-reviewers:
26+
- emilienm
2827
- dulek

PROJECT

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,59 @@
1-
version: "2"
1+
# Code generated by tool. DO NOT EDIT.
2+
# This file is used to track the info used to scaffold your project
3+
# and allow the plugins properly work.
4+
# More info: https://book.kubebuilder.io/reference/project-config.html
25
domain: cluster.x-k8s.io
36
repo: sigs.k8s.io/cluster-api-provider-openstack
47
resources:
58
- group: infrastructure
6-
version: v1alpha5
79
kind: OpenStackCluster
8-
- group: infrastructure
910
version: v1alpha5
10-
kind: OpenStackMachine
1111
- group: infrastructure
12+
kind: OpenStackMachine
1213
version: v1alpha5
14+
- group: infrastructure
1315
kind: OpenStackMachineTemplate
16+
version: v1alpha5
1417
- group: infrastructure
1518
kind: OpenStackClusterTemplate
1619
version: v1alpha5
1720
- group: infrastructure
18-
version: v1alpha6
1921
kind: OpenStackCluster
20-
- group: infrastructure
2122
version: v1alpha6
22-
kind: OpenStackMachine
2323
- group: infrastructure
24+
kind: OpenStackMachine
2425
version: v1alpha6
26+
- group: infrastructure
2527
kind: OpenStackMachineTemplate
28+
version: v1alpha6
2629
- group: infrastructure
2730
kind: OpenStackClusterTemplate
2831
version: v1alpha6
2932
- group: infrastructure
30-
version: v1alpha7
3133
kind: OpenStackCluster
32-
- group: infrastructure
3334
version: v1alpha7
34-
kind: OpenStackMachine
3535
- group: infrastructure
36+
kind: OpenStackMachine
3637
version: v1alpha7
38+
- group: infrastructure
3739
kind: OpenStackMachineTemplate
40+
version: v1alpha7
3841
- group: infrastructure
3942
kind: OpenStackClusterTemplate
4043
version: v1alpha7
44+
- group: infrastructure
45+
version: v1beta1
46+
kind: OpenStackCluster
47+
- group: infrastructure
48+
version: v1beta1
49+
kind: OpenStackMachine
50+
- group: infrastructure
51+
version: v1beta1
52+
kind: OpenStackMachineTemplate
53+
- group: infrastructure
54+
kind: OpenStackClusterTemplate
55+
version: v1beta1
56+
- group: infrastructure
57+
kind: OpenStackFloatingIPPool
58+
version: v1alpha1
59+
version: "2"

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ This provider's versions are compatible with the following versions of Cluster A
4343
|------------------------------------| -------------- |
4444
| OpenStack Provider v1alpha5 (v0.6) ||
4545
| OpenStack Provider v1alpha6 (v0.7) ||
46-
| OpenStack Provider v1alpha7 ||
46+
| OpenStack Provider v1alpha7 (v0.9) ||
47+
| OpenStack Provider v1beta1 ||
4748

4849

4950
This provider's versions are able to install and manage the following versions of Kubernetes:
@@ -52,15 +53,17 @@ This provider's versions are able to install and manage the following versions o
5253
|------------------------------------| ----- | ----- | ----- | ----- |
5354
| OpenStack Provider v1alpha5 (v0.6) || + | + | + |
5455
| OpenStack Provider v1alpha6 (v0.7) |||| + |
55-
| OpenStack Provider v1alpha7 | + ||||
56+
| OpenStack Provider v1alpha7 (v0.9) | + ||||
57+
| OpenStack Provider v1beta1 | + ||||
5658

5759
This provider's versions are able to install Kubernetes to the following versions of OpenStack:
5860

59-
| | Queens | Rocky | Stein | Train | Ussuri | Victoria | Wallaby | Xena | Yoga |
60-
|------------------------------------| ------ | ----- | ----- | ----- | ------ | -------- | ------- | ---- | ---- |
61-
| OpenStack Provider v1alpha5 (v0.6) | + | + | + | + | + |||||
62-
| OpenStack Provider v1alpha6 (v0.7) | + | + | + | + | + |||||
63-
| OpenStack Provider v1alpha7 | | + | + | + | + |||||
61+
| | Queens | Rocky | Stein | Train | Ussuri | Victoria | Wallaby | Xena | Yoga | Bobcat |
62+
|------------------------------------| ------ | ----- | ----- | ----- | ------ | -------- | ------- | ---- | ---- | ------ |
63+
| OpenStack Provider v1alpha5 (v0.6) | + | + | + | + | + ||||||
64+
| OpenStack Provider v1alpha6 (v0.7) | + | + | + | + | + ||||||
65+
| OpenStack Provider v1alpha7 (v0.9) | | + | + | + | + ||||||
66+
| OpenStack Provider v1beta1 | | + | + | + | + ||||||
6467

6568
Test status:
6669

RELEASE.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ The content of the release notes differs depending on the type of release, speci
6060

6161
This will cause the image to be automatically built by CI and pushed to the staging repository. As this only builds
6262
the image, it only takes a few minutes.
63-
1. Follow the [image promotion process](https://github.com/kubernetes/k8s.io/tree/main/k8s.gcr.io#image-promoter) to promote the image from the staging repo to `registry.k8s.io/capi-openstack`.
63+
1. Follow the [image promotion process](https://github.com/kubernetes/k8s.io/blob/main/registry.k8s.io/README.md#image-promoter) to promote the image from the staging repo to `registry.k8s.io/capi-openstack`.
6464
The staging repository can be inspected at https://console.cloud.google.com/gcr/images/k8s-staging-capi-openstack/GLOBAL. Be
6565
sure to choose the top level `capi-openstack-controller`, which will provide the multi-arch manifest, rather than one for a specific architecture.
6666
The image build logs are available at [Cloud Build](https://console.cloud.google.com/cloud-build/builds?project=k8s-staging-capi-openstack).
67-
Add the new sha=>tag mapping to the [images.yaml](https://github.com/kubernetes/k8s.io/edit/main/k8s.gcr.io/images/k8s-staging-capi-openstack/images.yaml) (use the sha of the image with the corresponding tag). The PR to update the [images.yaml](https://github.com/kubernetes/k8s.io/edit/main/k8s.gcr.io/images/k8s-staging-capi-openstack/images.yaml) must be approved in the [OWNERS](https://github.com/kubernetes/k8s.io/blob/main/k8s.gcr.io/images/k8s-staging-capi-openstack/OWNERS) file and merged.
67+
Add the new sha=>tag mapping to the [images.yaml](https://github.com/kubernetes/k8s.io/blob/main/registry.k8s.io/images/k8s-staging-capi-openstack/images.yaml) (use the sha of the image with the corresponding tag). The PR to update the [images.yaml](https://github.com/kubernetes/k8s.io/blob/main/registry.k8s.io/images/k8s-staging-capi-openstack/images.yaml) must be approved in the [OWNERS](https://github.com/kubernetes/k8s.io/blob/main/registry.k8s.io/images/k8s-staging-capi-openstack/OWNERS) file and merged.
6868

6969
It is good practise to get somebody else to review this PR. It is safe to perform the following steps while waiting
7070
for review and the promotion of the image.
@@ -92,12 +92,12 @@ The content of the release notes differs depending on the type of release, speci
9292

9393
Releasing requires a particular set of permissions.
9494

95-
* Approver role for the image promoter process ([kubernetes/k8s.io/blob/main/k8s.gcr.io/images/k8s-staging-capi-openstack/OWNERS](https://github.com/kubernetes/k8s.io/blob/main/k8s.gcr.io/images/k8s-staging-capi-openstack/OWNERS))
95+
* Approver role for the image promoter process ([kubernetes/k8s.io/blob/main/registry.k8s.io/images/k8s-staging-capi-openstack/OWNERS](https://github.com/kubernetes/k8s.io/blob/main/registry.k8s.io/images/k8s-staging-capi-openstack/OWNERS))
9696
* Tag push and release creation rights to the GitHub repository (team `cluster-api-provider-openstack-maintainers` in [kubernetes/org/config/kubernetes-sigs/sig-cluster-lifecycle/teams.yaml](https://github.com/kubernetes/org/blob/main/config/kubernetes-sigs/sig-cluster-lifecycle/teams.yaml))
9797

9898
## Staging
9999

100100
There is a post-submit Prow job running after each commit on `main` which pushes a new image to the staging repo (`gcr.io/k8s-staging-capi-openstack/capi-openstack-controller:latest`). Following configuration is involved:
101-
* staging gcr bucket: [kubernetes/k8s.io/blob/main/k8s.gcr.io/manifests/k8s-staging-capi-openstack/promoter-manifest.yaml](https://github.com/kubernetes/k8s.io/blob/main/k8s.gcr.io/manifests/k8s-staging-capi-openstack/promoter-manifest.yaml)
101+
* staging gcr bucket: [kubernetes/k8s.io/blob/main/registry.k8s.io/manifests/k8s-staging-capi-openstack/promoter-manifest.yaml](https://github.com/kubernetes/k8s.io/blob/main/registry.k8s.io/manifests/k8s-staging-capi-openstack/promoter-manifest.yaml)
102102
* post-submit `post-capi-openstack-push-images` Prow job: [kubernetes/test-infra/blob/master/config/jobs/image-pushing/k8s-staging-cluster-api.yaml](https://github.com/kubernetes/test-infra/blob/master/config/jobs/image-pushing/k8s-staging-cluster-api.yaml)) (corresponding dashboard is located at [https://testgrid.k8s.io/sig-cluster-lifecycle-image-pushes#post-capi-openstack-push-images](https://testgrid.k8s.io/sig-cluster-lifecycle-image-pushes#post-capi-openstack-push-images))
103103
* Google Cloud Build configuration which is used by the Prow job: [kubernetes-sigs/cluster-api-provider-openstack/cloudbuild.yaml](https://github.com/kubernetes-sigs/cluster-api-provider-openstack/blob/main/cloudbuild.yaml)

0 commit comments

Comments
 (0)