Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Cluster update stucks because hook "BeforeClusterUpgrade" is blocking

Open
#272 32 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
go, kubernetes

Research direction

Reproduce the ClusterStack update with the provided kubectl commands and inspect extension/hooks.go around the repeated DoBeforeClusterUpgrade calls, along with the blocking status reported on the Cluster object. Trace why the BeforeClusterUpgrade hook remains blocking after the v2 release becomes ready; done means the upgrade proceeds without the LifecycleHookBlocking status.

Written by the indexing model from the issue text.

Description

/kind bug

What steps did you take and what happened:

  1. Create Cluster testcluster-01 with ClusterStack openstack-scs-1-30-v1 (openstack/scs) / .spec.topology.version: v1.30.2
  2. Update testcluster-01 to a new ClusterStack openstack-scs-1-30-v2 / .spec.topology.version: v1.30.6.

The cluster object reports:

kubectl get cluster -n testcluster testcluster-01 -o yaml | grep -i blocking
    message: 'hook "BeforeClusterUpgrade" is blocking: '
    reason: LifecycleHookBlocking

Logs of cso:

kubectl logs -n cso-system cso-controller-manager-57d8cc48df-dnzgf | tail
{"level":"INFO","time":"2025-01-16T17:18:19.390Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:18:29.421Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:18:39.448Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:18:49.480Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:18:59.509Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:19:05.689Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:19:09.545Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:19:19.575Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:19:29.616Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
{"level":"INFO","time":"2025-01-16T17:19:39.647Z","file":"extension/hooks.go:56","message":"DoBeforeClusterUpgrade is called"}
kubectl logs -n cso-system cso-controller-manager-57d8cc48df-6htsv | grep -i testcluster
{"level":"INFO","time":"2025-01-16T17:23:51.998Z","file":"external/tracker.go:56","message":"Adding watch on external object \"infrastructure.clusterstack.x-k8s.io/v1alpha1, Kind=OpenStackClusterStackRelease\"","controller":"clusterstackrelease","controllerGroup":"clusterstack.x-k8s.io","controllerKind":"ClusterStackRelease","ClusterStackRelease":{"name":"openstack-scs-1-30-v1","namespace":"testcluster"},"namespace":"testcluster","name":"openstack-scs-1-30-v1","reconcileID":"02d985b6-fc66-4767-b484-01c0a1abb1e7"}

Logs of cspo:

kubectl logs -n cspo-system cspo-controller-manager-7c6cdfcf59-dzs42 | tail
2025-01-16T17:24:12Z    INFO    OpenStackNodeImageRelease **ready** - image is **ACTIVE**.      {"controller": "openstacknodeimagerelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackNodeImageRelease", "OpenStackNodeImageRelease": {"name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1", "reconcileID": "cfef15e2-4cc1-46d0-975b-425775998acf", "name": "ubuntu-capi-image-v1.30.6", "ID": "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"}
2025-01-16T17:24:12Z    DEBUG   events  image status is ACTIVE "ubuntu-capi-image-v1.30.6", ID "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"   {"type": "Normal", "object": {"kind":"OpenStackNodeImageRelease","namespace":"testcluster","name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","uid":"5c8571af-fd8e-40ca-bb96-9461f1fb637c","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428969"}, "reason": "OpenStackImageActive"}
2025-01-16T17:24:13Z    INFO    OpenStackNodeImageRelease **ready** - image is **ACTIVE**.      {"controller": "openstacknodeimagerelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackNodeImageRelease", "OpenStackNodeImageRelease": {"name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1", "reconcileID": "1f4aa932-bb0c-4ddb-a24e-5bc68b2fb6a3", "name": "ubuntu-capi-image-v1.30.6", "ID": "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"}
2025-01-16T17:24:13Z    DEBUG   events  image status is ACTIVE "ubuntu-capi-image-v1.30.6", ID "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"   {"type": "Normal", "object": {"kind":"OpenStackNodeImageRelease","namespace":"testcluster","name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","uid":"5c8571af-fd8e-40ca-bb96-9461f1fb637c","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428993"}, "reason": "OpenStackImageActive"}
2025-01-16T17:24:40Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "d79f391e-5124-4b6b-913d-f51d369ce77a"}
2025-01-16T17:24:40Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428973"}, "reason": "OpenStackNodeImageReleasesReady"}
2025-01-16T17:24:40Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "30bcada7-3286-4873-97f5-4a8ffa3c1a49"}
2025-01-16T17:24:40Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69429112"}, "reason": "OpenStackNodeImageReleasesReady"}
2025-01-16T17:24:40Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "170a100e-b3bd-4c08-a443-d377ed7246de"}
2025-01-16T17:24:40Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69429114"}, "reason": "OpenStackNodeImageReleasesReady"}
 kubectl logs -n cspo-system cspo-controller-manager-7c6cdfcf59-dzs42 | grep testcluster
2025-01-16T17:24:10Z    DEBUG   events  successfully downloaded ClusterStackReleaseAssets "openstack-scs-1-30-v1"       {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v1","uid":"8df2a92f-6a2d-4907-a6d9-405fe17e2145","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69404207"}, "reason": "ClusterStackReleaseAssetsReady"}
2025-01-16T17:24:10Z    DEBUG   events  successfully downloaded ClusterStackReleaseAssets "openstack-scs-1-30-v2"       {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69425897"}, "reason": "ClusterStackReleaseAssetsReady"}
2025-01-16T17:24:10Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v1", "reconcileID": "dda4b578-30ad-4023-82c0-03b032decfe6"}
2025-01-16T17:24:10Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v1","uid":"8df2a92f-6a2d-4907-a6d9-405fe17e2145","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428961"}, "reason": "OpenStackNodeImageReleasesReady"}
2025-01-16T17:24:10Z    INFO    OpenStackClusterStackRelease **not ready** yet - waiting for OpenStackNodeImageRelease to be ready      {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "fd1f13eb-95d9-4a0b-be0e-50d190e84d8f", "name:": "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1", "ready:": false}
2025-01-16T17:24:10Z    DEBUG   events  successfully created OpenStackNodeImageRelease object "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1" {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428963"}, "reason": "OpenStackNodeImageReleaseCreated"}
2025-01-16T17:24:10Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v1", "reconcileID": "32de89a1-bb55-4c24-9c13-976a0ca787b4"}
2025-01-16T17:24:10Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v1","uid":"8df2a92f-6a2d-4907-a6d9-405fe17e2145","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428968"}, "reason": "OpenStackNodeImageReleasesReady"}
2025-01-16T17:24:10Z    INFO    OpenStackClusterStackRelease **not ready** yet - waiting for OpenStackNodeImageRelease to be ready      {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "f68ed6a5-90bb-4511-ad49-2a14464d3599", "name:": "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1", "ready:": false}
2025-01-16T17:24:12Z    INFO    OpenStackNodeImageRelease **ready** - image is **ACTIVE**.      {"controller": "openstacknodeimagerelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackNodeImageRelease", "OpenStackNodeImageRelease": {"name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.2-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-ubuntu-capi-image-v1.30.2-v1", "reconcileID": "f5083258-3ab2-46af-a78e-c5393f49a704", "name": "ubuntu-capi-image-v1.30.2", "ID": "c40e3a9e-7be2-4959-b190-ace16bbef0bc"}
2025-01-16T17:24:12Z    DEBUG   events  image status is ACTIVE "ubuntu-capi-image-v1.30.2", ID "c40e3a9e-7be2-4959-b190-ace16bbef0bc"   {"type": "Normal", "object": {"kind":"OpenStackNodeImageRelease","namespace":"testcluster","name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.2-v1","uid":"058bea72-2621-411a-b072-be7748f4dfa3","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69404081"}, "reason": "OpenStackImageActive"}
2025-01-16T17:24:12Z    INFO    OpenStackNodeImageRelease **ready** - image is **ACTIVE**.      {"controller": "openstacknodeimagerelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackNodeImageRelease", "OpenStackNodeImageRelease": {"name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1", "reconcileID": "cfef15e2-4cc1-46d0-975b-425775998acf", "name": "ubuntu-capi-image-v1.30.6", "ID": "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"}
2025-01-16T17:24:12Z    DEBUG   events  image status is ACTIVE "ubuntu-capi-image-v1.30.6", ID "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"   {"type": "Normal", "object": {"kind":"OpenStackNodeImageRelease","namespace":"testcluster","name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","uid":"5c8571af-fd8e-40ca-bb96-9461f1fb637c","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428969"}, "reason": "OpenStackImageActive"}
2025-01-16T17:24:13Z    INFO    OpenStackNodeImageRelease **ready** - image is **ACTIVE**.      {"controller": "openstacknodeimagerelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackNodeImageRelease", "OpenStackNodeImageRelease": {"name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1", "reconcileID": "1f4aa932-bb0c-4ddb-a24e-5bc68b2fb6a3", "name": "ubuntu-capi-image-v1.30.6", "ID": "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"}
2025-01-16T17:24:13Z    DEBUG   events  image status is ACTIVE "ubuntu-capi-image-v1.30.6", ID "c0b835fb-d152-48a7-98a0-b85b6c9f46b1"   {"type": "Normal", "object": {"kind":"OpenStackNodeImageRelease","namespace":"testcluster","name":"openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1","uid":"5c8571af-fd8e-40ca-bb96-9461f1fb637c","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428993"}, "reason": "OpenStackImageActive"}
2025-01-16T17:24:40Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "d79f391e-5124-4b6b-913d-f51d369ce77a"}
2025-01-16T17:24:40Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69428973"}, "reason": "OpenStackNodeImageReleasesReady"}
2025-01-16T17:24:40Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "30bcada7-3286-4873-97f5-4a8ffa3c1a49"}
2025-01-16T17:24:40Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69429112"}, "reason": "OpenStackNodeImageReleasesReady"}
2025-01-16T17:24:40Z    INFO    OpenStackClusterStackRelease **ready**  {"controller": "openstackclusterstackrelease", "controllerGroup": "infrastructure.clusterstack.x-k8s.io", "controllerKind": "OpenStackClusterStackRelease", "OpenStackClusterStackRelease": {"name":"openstack-scs-1-30-v2","namespace":"testcluster"}, "namespace": "testcluster", "name": "openstack-scs-1-30-v2", "reconcileID": "170a100e-b3bd-4c08-a443-d377ed7246de"}
2025-01-16T17:24:40Z    DEBUG   events  OpenStackNodeImageRelease objects are ready     {"type": "Normal", "object": {"kind":"OpenStackClusterStackRelease","namespace":"testcluster","name":"openstack-scs-1-30-v2","uid":"e11d5b19-e2a5-4db4-a773-bf6800de5433","apiVersion":"infrastructure.clusterstack.x-k8s.io/v1alpha1","resourceVersion":"69429114"}, "reason": "OpenStackNodeImageReleasesReady"}

Cluster Stacks related ressources:

kubectl get clusterstack -n testcluster
NAME                 PROVIDER    CLUSTERSTACK   K8S    CHANNEL   AUTOSUBSCRIBE   USABLE   LATEST                            AGE   REASON   MESSAGE
openstack-scs-1-30   openstack   scs            1.30   stable    false           v1, v2   openstack-scs-1-30-v2 | v1.30.6   92m
kubectl get clusterstackreleases.clusterstack.x-k8s.io -n testcluster
NAME                    K8S VERSION   READY   AGE   REASON   MESSAGE
openstack-scs-1-30-v1   v1.30.2       true    94m
openstack-scs-1-30-v2   v1.30.6       true    51m
kubectl get openstacknodeimagereleases.infrastructure.clusterstack.x-k8s.io -n testcluster
NAME                                              READY   AGE   REASON   MESSAGE
openstack-scs-1-30-ubuntu-capi-image-v1.30.2-v1   true    96m
openstack-scs-1-30-ubuntu-capi-image-v1.30.6-v1   true    6s
kubectl get clusterclasses.cluster.x-k8s.io -n testcluster
NAME                    AGE
openstack-scs-1-30-v1   96m
openstack-scs-1-30-v2   53m
kubectl get cluster -n testcluster
NAME             CLUSTERCLASS            PHASE         AGE   VERSION
testcluster-01   openstack-scs-1-30-v2   Provisioned   88m   v1.30.6
kubectl get clusteraddons.clusterstack.x-k8s.io -n testcluster
NAME                           CLUSTER          HOOK   READY   AGE   REASON   MESSAGE
cluster-addon-testcluster-01   testcluster-01          true    89m

kubectl get openstackclusterstackreleases -n testcluster
NAME                    READY   AGE   REASON   MESSAGE
openstack-scs-1-30-v1   true    99m
openstack-scs-1-30-v2   true    55m

What did you expect to happen:

CAPI starts updating.

Anything else you would like to add:

The Cluster Stacks are released to a private OCI registry based on https://github.com/SovereignCloudStack/cluster-stacks/tree/main/providers/openstack/scs.

Environment:

  • cluster-stack-operator version: v0.1.0-alpha.8
  • cluster-stack-provider-openstack version: cspo:v0.1.0-alpha.5
  • Kubernetes version: v1.29.2
  • OS (e.g. from /etc/os-release): Debian GNU/Linux 12
Dominant language
Go
Stars
18
Forks
5
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from SovereignCloudStack/cluster-stack-operator

All issues in SovereignCloudStack/cluster-stack-operator

Similar issues

More Go issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.