Skip to content

Commit

Permalink
Add labels to Cluster when deploying clusterTemplate
Browse files Browse the repository at this point in the history
  • Loading branch information
wahabmk committed Dec 18, 2024
1 parent 60a6edc commit 44b336c
Show file tree
Hide file tree
Showing 16 changed files with 90 additions and 25 deletions.
37 changes: 34 additions & 3 deletions api/v1alpha1/managedcluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
package v1alpha1

import (
"encoding/json"
"fmt"

apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apimeta "k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -120,11 +123,39 @@ type ManagedCluster struct {
Status ManagedClusterStatus `json:"status,omitempty"`
}

func (in *ManagedCluster) HelmValues() (values map[string]any, err error) {
func (in *ManagedCluster) HelmValues() (map[string]any, error) {
var values map[string]any

if in.Spec.Config != nil {
err = yaml.Unmarshal(in.Spec.Config.Raw, &values)
if err := yaml.Unmarshal(in.Spec.Config.Raw, &values); err != nil {
return nil, fmt.Errorf("error unmarshalling helm values for clusterTemplate %s: %w", in.Spec.Template, err)
}
}
return values, err

return values, nil
}

func (in *ManagedCluster) SetHelmValues(values map[string]any) error {
b, err := json.Marshal(values)
if err != nil {
return fmt.Errorf("error marshalling helm values for clusterTemplate %s: %w", in.Spec.Template, err)
}

in.Spec.Config = &apiextensionsv1.JSON{Raw: b}
return nil
}

func (in *ManagedCluster) AddHelmValues(fn func(map[string]any) error) error {
values, err := in.HelmValues()
if err != nil {
return err
}

if err := fn(values); err != nil {
return err
}

return in.SetHelmValues(values)
}

func (in *ManagedCluster) GetConditions() *[]metav1.Condition {
Expand Down
34 changes: 12 additions & 22 deletions internal/controller/managedcluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ package controller

import (
"context"
"encoding/json"
"errors"
"fmt"
"slices"
Expand All @@ -31,7 +30,6 @@ import (
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/chart"
corev1 "k8s.io/api/core/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
apimeta "k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -297,13 +295,21 @@ func (r *ManagedClusterReconciler) updateCluster(ctx context.Context, mc *hmc.Ma
return ctrl.Result{}, nil
}

helmValues, err := setIdentityHelmValues(mc.Spec.Config, cred.Spec.IdentityRef)
if err != nil {
return ctrl.Result{}, fmt.Errorf("error setting identity values: %w", err)
if err := mc.AddHelmValues(func(values map[string]any) error {
values["clusterIdentity"] = cred.Spec.IdentityRef

if _, ok := values["clusterLabels"]; !ok {
// Use the ManagedCluster's own labels if not defined.
values["clusterLabels"] = mc.GetObjectMeta().GetLabels()
}

return nil
}); err != nil {
return ctrl.Result{}, err
}

hrReconcileOpts := helm.ReconcileHelmReleaseOpts{
Values: helmValues,
Values: mc.Spec.Config,
OwnerReference: &metav1.OwnerReference{
APIVersion: hmc.GroupVersion.String(),
Kind: hmc.ManagedClusterKind,
Expand Down Expand Up @@ -779,22 +785,6 @@ func (r *ManagedClusterReconciler) reconcileCredentialPropagation(ctx context.Co
return nil
}

func setIdentityHelmValues(values *apiextensionsv1.JSON, idRef *corev1.ObjectReference) (*apiextensionsv1.JSON, error) {
var valuesJSON map[string]any
err := json.Unmarshal(values.Raw, &valuesJSON)
if err != nil {
return nil, fmt.Errorf("error unmarshalling values: %w", err)
}

valuesJSON["clusterIdentity"] = idRef
valuesRaw, err := json.Marshal(valuesJSON)
if err != nil {
return nil, fmt.Errorf("error marshalling values: %w", err)
}

return &apiextensionsv1.JSON{Raw: valuesRaw}, nil
}

func (r *ManagedClusterReconciler) setAvailableUpgrades(ctx context.Context, managedCluster *hmc.ManagedCluster, template *hmc.ClusterTemplate) error {
if template == nil {
return nil
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/aws-eks/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
2 changes: 2 additions & 0 deletions templates/cluster/aws-eks/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:

# EKS cluster parameters
region: ""
sshKeyName: ""
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/aws-hosted-cp/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
2 changes: 2 additions & 0 deletions templates/cluster/aws-hosted-cp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:

# AWS cluster parameters
vpcID: ""
region: ""
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/aws-standalone-cp/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/aws-standalone-cp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:
# env: dev3
# region: region1

# AWS cluster parameters
region: ""
sshKeyName: ""
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/azure-hosted-cp/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
2 changes: 2 additions & 0 deletions templates/cluster/azure-hosted-cp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:

# Azure cluster parameters
location: ""
subscriptionID: ""
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/azure-standalone-cp/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
2 changes: 2 additions & 0 deletions templates/cluster/azure-standalone-cp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:

# Azure cluster parameters
location: ""
subscriptionID: ""
Expand Down
4 changes: 4 additions & 0 deletions templates/cluster/vsphere-hosted-cp/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
2 changes: 2 additions & 0 deletions templates/cluster/vsphere-hosted-cp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:

# vSphere cluster parameters
clusterIdentity:
name: ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ include "cluster.name" . }}
labels:
{{- with .Values.clusterLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.clusterNetwork }}
clusterNetwork:
Expand Down
2 changes: 2 additions & 0 deletions templates/cluster/vsphere-standalone-cp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ clusterNetwork:
cidrBlocks:
- "10.96.0.0/12"

clusterLabels:

# vSphere cluster parameters
clusterIdentity:
name: ""
Expand Down

0 comments on commit 44b336c

Please sign in to comment.