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/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{ { diff --git a/controllers/pattern_controller.go b/controllers/pattern_controller.go index ec06d6222..e625d0d6d 100644 --- a/controllers/pattern_controller.go +++ b/controllers/pattern_controller.go @@ -318,6 +318,7 @@ func (r *PatternReconciler) applyDefaults(input *api.Pattern) (*api.Pattern, err // type: AWS output.Status.ClusterPlatform = string(clusterInfra.Spec.PlatformSpec.Type) + 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 +}