From 241c6463db3515d2be595467594b0d24a380c997 Mon Sep 17 00:00:00 2001 From: Michele Baldessari Date: Wed, 29 Nov 2023 19:49:03 +0100 Subject: [PATCH 1/5] Try and extract some more info from the underlying cluster --- api/v1alpha1/pattern_types.go | 2 ++ api/v1alpha1/zz_generated.deepcopy.go | 7 +++++++ ...tops.hybrid-cloud-patterns.io_patterns.yaml | 4 ++++ ...atterns-operator.clusterserviceversion.yaml | 2 ++ ...tops.hybrid-cloud-patterns.io_patterns.yaml | 4 ++++ ...atterns-operator.clusterserviceversion.yaml | 2 ++ controllers/pattern_controller.go | 18 ++++++++++++++++++ 7 files changed, 39 insertions(+) diff --git a/api/v1alpha1/pattern_types.go b/api/v1alpha1/pattern_types.go index b19c8eed4..bac23d6b7 100644 --- a/api/v1alpha1/pattern_types.go +++ b/api/v1alpha1/pattern_types.go @@ -198,6 +198,8 @@ type PatternStatus struct { AnalyticsSent int `json:"analyticsSent,omitempty"` // +operator-sdk:csv:customresourcedefinitions:type=status AnalyticsUUID string `json:"analyticsUUID,omitempty"` + // +operator-sdk:csv:customresourcedefinitions:type=status + ExtraClusterInfo map[string]string `json:"extraClusterInfo,omitempty"` } // See: https://book.kubebuilder.io/reference/markers/crd.html diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 6dac8fc05..8bfce9c1d 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -223,6 +223,13 @@ func (in *PatternStatus) DeepCopyInto(out *PatternStatus) { *out = make([]PatternApplicationInfo, len(*in)) copy(*out, *in) } + if in.ExtraClusterInfo != nil { + in, out := &in.ExtraClusterInfo, &out.ExtraClusterInfo + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PatternStatus. diff --git a/bundle/manifests/gitops.hybrid-cloud-patterns.io_patterns.yaml b/bundle/manifests/gitops.hybrid-cloud-patterns.io_patterns.yaml index 596212a40..ad8d498ad 100644 --- a/bundle/manifests/gitops.hybrid-cloud-patterns.io_patterns.yaml +++ b/bundle/manifests/gitops.hybrid-cloud-patterns.io_patterns.yaml @@ -207,6 +207,10 @@ spec: - type type: object type: array + extraClusterInfo: + additionalProperties: + type: string + type: object lastError: description: Last error encountered by the pattern type: string diff --git a/bundle/manifests/patterns-operator.clusterserviceversion.yaml b/bundle/manifests/patterns-operator.clusterserviceversion.yaml index 5fc0c4419..fe1d1802d 100644 --- a/bundle/manifests/patterns-operator.clusterserviceversion.yaml +++ b/bundle/manifests/patterns-operator.clusterserviceversion.yaml @@ -143,6 +143,8 @@ spec: path: clusterPlatform - displayName: Cluster Version path: clusterVersion + - displayName: Extra Cluster Info + path: extraClusterInfo - description: Last error encountered by the pattern displayName: Last Error path: lastError diff --git a/config/crd/bases/gitops.hybrid-cloud-patterns.io_patterns.yaml b/config/crd/bases/gitops.hybrid-cloud-patterns.io_patterns.yaml index 37626bdd6..af948e1cc 100644 --- a/config/crd/bases/gitops.hybrid-cloud-patterns.io_patterns.yaml +++ b/config/crd/bases/gitops.hybrid-cloud-patterns.io_patterns.yaml @@ -207,6 +207,10 @@ spec: - type type: object type: array + extraClusterInfo: + additionalProperties: + type: string + type: object lastError: description: Last error encountered by the pattern type: string diff --git a/config/manifests/bases/patterns-operator.clusterserviceversion.yaml b/config/manifests/bases/patterns-operator.clusterserviceversion.yaml index 544219a7d..66b61f614 100644 --- a/config/manifests/bases/patterns-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/patterns-operator.clusterserviceversion.yaml @@ -123,6 +123,8 @@ spec: path: clusterPlatform - displayName: Cluster Version path: clusterVersion + - displayName: Extra Cluster Info + path: extraClusterInfo - description: Last error encountered by the pattern displayName: Last Error path: lastError diff --git a/controllers/pattern_controller.go b/controllers/pattern_controller.go index ec06d6222..af7d75077 100644 --- a/controllers/pattern_controller.go +++ b/controllers/pattern_controller.go @@ -318,6 +318,24 @@ func (r *PatternReconciler) applyDefaults(input *api.Pattern) (*api.Pattern, err // type: AWS output.Status.ClusterPlatform = string(clusterInfra.Spec.PlatformSpec.Type) + clusterPlatformStatusType := strings.ToLower(string(clusterInfra.Status.PlatformStatus.Type)) + var extraClusterInfo map[string]string + switch clusterPlatformStatusType { + case "aws": + for _, v := range clusterInfra.Status.PlatformStatus.AWS.ResourceTags { + extraClusterInfo[v.Key] = v.Value + } + case "azure": + extraClusterInfo["ResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.ResourceGroupName + extraClusterInfo["NetworkResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.NetworkResourceGroupName + case "ibmcloud": + // no particular useful info? + case "baremetal": + extraClusterInfo["APIServerInternalIP"] = clusterInfra.Status.PlatformStatus.BareMetal.APIServerInternalIP + extraClusterInfo["IngressIP"] = clusterInfra.Status.PlatformStatus.BareMetal.IngressIP + extraClusterInfo["NodeDNSIP"] = clusterInfra.Status.PlatformStatus.BareMetal.NodeDNSIP + } + output.Status.ExtraClusterInfo = extraClusterInfo } // Cluster Version From 41315f04e0603998acd1767950089e71df34cd2a Mon Sep 17 00:00:00 2001 From: Michele Baldessari Date: Wed, 29 Nov 2023 19:52:23 +0100 Subject: [PATCH 2/5] Expose extra cluster info via helm variables --- controllers/argo.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/controllers/argo.go b/controllers/argo.go index 5ade08829..18b2798c1 100644 --- a/controllers/argo.go +++ b/controllers/argo.go @@ -80,6 +80,16 @@ func newApplicationParameters(p *api.Pattern) []argoapi.HelmParameter { }, } + if len(p.Status.ExtraClusterInfo) > 0 { + for k, v := range p.Status.ExtraClusterInfo { + h := argoapi.HelmParameter{ + Name: fmt.Sprintf("global.extraClusterInfo.%s", k), + Value: v, + } + parameters = append(parameters, h) + } + } + if p.Spec.MultiSourceConfig.Enabled { multiSourceParameters := []argoapi.HelmParameter{ { From 4f5251c79b908ccda45129ae799cdb580659bdef Mon Sep 17 00:00:00 2001 From: Lester Claudio Date: Wed, 29 Nov 2023 17:49:23 -0700 Subject: [PATCH 3/5] Added map initialization --- controllers/pattern_controller.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/pattern_controller.go b/controllers/pattern_controller.go index af7d75077..218a0521d 100644 --- a/controllers/pattern_controller.go +++ b/controllers/pattern_controller.go @@ -319,7 +319,7 @@ func (r *PatternReconciler) applyDefaults(input *api.Pattern) (*api.Pattern, err output.Status.ClusterPlatform = string(clusterInfra.Spec.PlatformSpec.Type) clusterPlatformStatusType := strings.ToLower(string(clusterInfra.Status.PlatformStatus.Type)) - var extraClusterInfo map[string]string + var extraClusterInfo = make(map[string]string) switch clusterPlatformStatusType { case "aws": for _, v := range clusterInfra.Status.PlatformStatus.AWS.ResourceTags { From 3352021c18c0bb257db0a6d2037b9434994fd233 Mon Sep 17 00:00:00 2001 From: Michele Baldessari Date: Thu, 30 Nov 2023 15:56:56 +0100 Subject: [PATCH 4/5] Make sure we run this only when PlatformStatus is not nil --- controllers/pattern_controller.go | 35 +++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/controllers/pattern_controller.go b/controllers/pattern_controller.go index 218a0521d..b4b792cdd 100644 --- a/controllers/pattern_controller.go +++ b/controllers/pattern_controller.go @@ -318,24 +318,27 @@ func (r *PatternReconciler) applyDefaults(input *api.Pattern) (*api.Pattern, err // type: AWS output.Status.ClusterPlatform = string(clusterInfra.Spec.PlatformSpec.Type) - clusterPlatformStatusType := strings.ToLower(string(clusterInfra.Status.PlatformStatus.Type)) - var extraClusterInfo = make(map[string]string) - switch clusterPlatformStatusType { - case "aws": - for _, v := range clusterInfra.Status.PlatformStatus.AWS.ResourceTags { - extraClusterInfo[v.Key] = v.Value + + if clusterInfra.Status.PlatformStatus != nil { + clusterPlatformStatusType := strings.ToLower(string(clusterInfra.Status.PlatformStatus.Type)) + var extraClusterInfo = make(map[string]string) + switch clusterPlatformStatusType { + case "aws": + for _, v := range clusterInfra.Status.PlatformStatus.AWS.ResourceTags { + extraClusterInfo[v.Key] = v.Value + } + case "azure": + extraClusterInfo["ResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.ResourceGroupName + extraClusterInfo["NetworkResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.NetworkResourceGroupName + case "ibmcloud": + // no particular useful info? + case "baremetal": + extraClusterInfo["APIServerInternalIP"] = clusterInfra.Status.PlatformStatus.BareMetal.APIServerInternalIP + extraClusterInfo["IngressIP"] = clusterInfra.Status.PlatformStatus.BareMetal.IngressIP + extraClusterInfo["NodeDNSIP"] = clusterInfra.Status.PlatformStatus.BareMetal.NodeDNSIP } - case "azure": - extraClusterInfo["ResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.ResourceGroupName - extraClusterInfo["NetworkResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.NetworkResourceGroupName - case "ibmcloud": - // no particular useful info? - case "baremetal": - extraClusterInfo["APIServerInternalIP"] = clusterInfra.Status.PlatformStatus.BareMetal.APIServerInternalIP - extraClusterInfo["IngressIP"] = clusterInfra.Status.PlatformStatus.BareMetal.IngressIP - extraClusterInfo["NodeDNSIP"] = clusterInfra.Status.PlatformStatus.BareMetal.NodeDNSIP + output.Status.ExtraClusterInfo = extraClusterInfo } - output.Status.ExtraClusterInfo = extraClusterInfo } // Cluster Version From e1b1fa9a9d0e18a2766d5123a0906ea7788354ea Mon Sep 17 00:00:00 2001 From: Michele Baldessari Date: Fri, 1 Dec 2023 13:35:24 +0100 Subject: [PATCH 5/5] Split off extraClusterInfo collection in a separate function --- controllers/pattern_controller.go | 22 +------------------- controllers/utils.go | 34 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/controllers/pattern_controller.go b/controllers/pattern_controller.go index b4b792cdd..e625d0d6d 100644 --- a/controllers/pattern_controller.go +++ b/controllers/pattern_controller.go @@ -318,27 +318,7 @@ func (r *PatternReconciler) applyDefaults(input *api.Pattern) (*api.Pattern, err // type: AWS output.Status.ClusterPlatform = string(clusterInfra.Spec.PlatformSpec.Type) - - if clusterInfra.Status.PlatformStatus != nil { - clusterPlatformStatusType := strings.ToLower(string(clusterInfra.Status.PlatformStatus.Type)) - var extraClusterInfo = make(map[string]string) - switch clusterPlatformStatusType { - case "aws": - for _, v := range clusterInfra.Status.PlatformStatus.AWS.ResourceTags { - extraClusterInfo[v.Key] = v.Value - } - case "azure": - extraClusterInfo["ResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.ResourceGroupName - extraClusterInfo["NetworkResourceGroupName"] = clusterInfra.Status.PlatformStatus.Azure.NetworkResourceGroupName - case "ibmcloud": - // no particular useful info? - case "baremetal": - extraClusterInfo["APIServerInternalIP"] = clusterInfra.Status.PlatformStatus.BareMetal.APIServerInternalIP - extraClusterInfo["IngressIP"] = clusterInfra.Status.PlatformStatus.BareMetal.IngressIP - extraClusterInfo["NodeDNSIP"] = clusterInfra.Status.PlatformStatus.BareMetal.NodeDNSIP - } - output.Status.ExtraClusterInfo = extraClusterInfo - } + output.Status.ExtraClusterInfo = getExtraClusterInfo(clusterInfra.Status.PlatformStatus) } // Cluster Version diff --git a/controllers/utils.go b/controllers/utils.go index b37fb07fd..cd74c231c 100644 --- a/controllers/utils.go +++ b/controllers/utils.go @@ -190,3 +190,37 @@ func validGitRepoURL(repoURL string) error { return errors.New(fmt.Errorf("repository URL must be either http/https: %s", repoURL)) } } + +func getExtraClusterInfo(platformStatus *configv1.PlatformStatus) map[string]string { + if platformStatus == nil { + return nil + } + clusterPlatformStatusType := strings.ToLower(string(platformStatus.Type)) + var extraClusterInfo = make(map[string]string) + switch clusterPlatformStatusType { + case "aws": + extraClusterInfo["Region"] = platformStatus.AWS.Region + for _, v := range platformStatus.AWS.ResourceTags { + extraClusterInfo[v.Key] = v.Value + } + case "azure": + extraClusterInfo["CloudName"] = string(platformStatus.Azure.CloudName) + extraClusterInfo["ResourceGroupName"] = platformStatus.Azure.ResourceGroupName + extraClusterInfo["NetworkResourceGroupName"] = platformStatus.Azure.NetworkResourceGroupName + for _, v := range platformStatus.AWS.ResourceTags { + extraClusterInfo[v.Key] = v.Value + } + case "gcp": + extraClusterInfo["Region"] = platformStatus.GCP.Region + for _, v := range platformStatus.GCP.ResourceTags { + extraClusterInfo[v.Key] = v.Value + } + case "ibmcloud": + extraClusterInfo["Location"] = platformStatus.IBMCloud.Location + case "baremetal": + extraClusterInfo["NodeDNSIP"] = platformStatus.BareMetal.NodeDNSIP + default: + return nil + } + return extraClusterInfo +}