Cluster update stucks because hook "BeforeClusterUpgrade" is blocking

Aperta
#272 32 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
go, kubernetes

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

/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
Lingua principale
Go
Stelle
18
Fork
5
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di SovereignCloudStack/cluster-stack-operator

Tutte le issue di SovereignCloudStack/cluster-stack-operator

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.