From a2299c225057dac8720b4661a18baed6ac8843d4 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Thu, 17 Sep 2020 15:48:05 +0300 Subject: [PATCH 01/13] Define labels for route/ingress Signed-off-by: Anatolii Bazko --- deploy/crds/org_v1_che_crd.yaml | 76 ++++++++++++- pkg/apis/org/v1/che_types.go | 51 ++++++++- pkg/apis/org/v1/zz_generated.deepcopy.go | 58 ++++++++++ pkg/apis/org/v1/zz_generated.openapi.go | 135 +++++++++++++++++++++-- pkg/controller/che/che_controller.go | 9 +- pkg/deploy/devfile_registry.go | 6 +- pkg/deploy/identity_provider.go | 6 +- pkg/deploy/ingress.go | 15 ++- pkg/deploy/labels.go | 11 ++ pkg/deploy/plugin_registry.go | 6 +- pkg/deploy/route.go | 18 ++- pkg/deploy/tls.go | 3 +- 12 files changed, 362 insertions(+), 32 deletions(-) diff --git a/deploy/crds/org_v1_che_crd.yaml b/deploy/crds/org_v1_che_crd.yaml index 428af85e3f..54618b3b7c 100644 --- a/deploy/crds/org_v1_che_crd.yaml +++ b/deploy/crds/org_v1_che_crd.yaml @@ -129,6 +129,14 @@ spec: By default this will be automatically calculated and set by the operator. type: string + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object oAuthClientName: description: Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated @@ -148,6 +156,14 @@ spec: user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.' type: boolean + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object updateAdminPassword: description: Forces the default `admin` Che user to update password on first login. Defaults to `false`. @@ -213,6 +229,27 @@ spec: `latest` images, and `IfNotPresent` in other cases. type: string type: object + devfileRegistry: + description: Configuration settings related to the plugin registry used + by the Che installation. + properties: + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + type: object k8s: description: Configuration settings specific to Che installations made on upstream Kubernetes. @@ -266,6 +303,27 @@ spec: description: Enables `metrics` Che server endpoint. Default to `true`. type: boolean type: object + pluginRegistry: + description: Configuration settings related to the devfile registry + used by the Che installation. + properties: + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + type: object server: description: General configuration settings related to the Che server and the plugin and devfile registries @@ -386,6 +444,14 @@ spec: config map will be propagated to the Che components and provide particular configuration for Git. type: boolean + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object nonProxyHosts: description: List of hosts that should not use the configured proxy. Use `|`` as delimiter, eg `localhost|my.host.com|123.42.12.32` @@ -400,7 +466,7 @@ spec: pluginRegistryImage: description: Overrides the container image used in the Plugin registry deployment. This includes the image tag. Omit it or leave it empty - to use the defaut container image provided by the operator. + to use the default container image provided by the operator. type: string pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry @@ -453,6 +519,14 @@ spec: a proxy is required (see also the `proxyURL`, `proxyPassword` and `proxySecret` fields). type: string + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object selfSignedCert: description: Deprecated. The value of this flag is ignored. Che operator will automatically detect if router certificate is self-signed. diff --git a/pkg/apis/org/v1/che_types.go b/pkg/apis/org/v1/che_types.go index b71f4d98d4..6dba926c75 100644 --- a/pkg/apis/org/v1/che_types.go +++ b/pkg/apis/org/v1/che_types.go @@ -47,10 +47,15 @@ type CheClusterSpec struct { // Configuration settings related to the metrics collection used by the Che installation. // +optional Metrics CheClusterSpecMetrics `json:"metrics"` - // Configuration settings specific to Che installations made on upstream Kubernetes. // +optional K8s CheClusterSpecK8SOnly `json:"k8s"` + // Configuration settings related to the devfile registry used by the Che installation. + // +optional + PluginRegistry CheClusterSpecPluginRegistry `json:"pluginRegistry"` + // Configuration settings related to the plugin registry used by the Che installation. + // +optional + DevfileRegistry CheClusterSpecDevfileRegistry `json:"devfileRegistry"` } // +k8s:openapi-gen=true @@ -170,7 +175,7 @@ type CheClusterSpecServer struct { // +optional PluginRegistryUrl string `json:"pluginRegistryUrl,omitempty"` // Overrides the container image used in the Plugin registry deployment. This includes the image tag. - // Omit it or leave it empty to use the defaut container image provided by the operator. + // Omit it or leave it empty to use the default container image provided by the operator. // +optional PluginRegistryImage string `json:"pluginRegistryImage,omitempty"` // Overrides the image pull policy used in the Plugin registry deployment. @@ -262,6 +267,12 @@ type CheClusterSpecServer struct { // The labels that need to be present (and are put) on the configmaps representing the gateway configuration. // +optional SingleHostGatewayConfigMapLabels labels.Set `json:"singleHostGatewayConfigMapLabels,omitempty"` + // Additional labels to add into an Ingress + // +optional + Ingress CheClusterLabels `json:"ingress,omitempty"` + // Additional labels to add into a Route + // +optional + Route CheClusterLabels `json:"route,omitempty"` } // +k8s:openapi-gen=true @@ -392,6 +403,42 @@ type CheClusterSpecAuth struct { // Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. // +optional IdentityProviderImagePullPolicy corev1.PullPolicy `json:"identityProviderImagePullPolicy,omitempty"` + // Additional labels to add into an Ingress + // +optional + Ingress CheClusterLabels `json:"ingress,omitempty"` + // Additional labels to add into a Route + // +optional + Route CheClusterLabels `json:"route,omitempty"` +} + +// +k8s:openapi-gen=true +// Configuration settings related to the devfile registry used by the Che installation. +type CheClusterSpecDevfileRegistry struct { + // Additional labels to add into an Ingress + // +optional + Ingress CheClusterLabels `json:"ingress,omitempty"` + // Additional labels to add into a Route + // +optional + Route CheClusterLabels `json:"route,omitempty"` +} + +// +k8s:openapi-gen=true +// Configuration settings related to the plugin registry used by the Che installation. +type CheClusterSpecPluginRegistry struct { + // Additional labels to add into an Ingress + // +optional + Ingress CheClusterLabels `json:"ingress,omitempty"` + // Additional labels to add into a Route + // +optional + Route CheClusterLabels `json:"route,omitempty"` +} + +// +k8s:openapi-gen=true +// Configuration settings related to the persistent storage used by the Che installation. +type CheClusterLabels struct { + // Comma separated list of labels that can be used to organize and categorize (scope and select) objects. + // +optional + Labels string `json:"labels,omitempty"` } // +k8s:openapi-gen=true diff --git a/pkg/apis/org/v1/zz_generated.deepcopy.go b/pkg/apis/org/v1/zz_generated.deepcopy.go index 30dfaece18..53a4ebae08 100644 --- a/pkg/apis/org/v1/zz_generated.deepcopy.go +++ b/pkg/apis/org/v1/zz_generated.deepcopy.go @@ -37,6 +37,22 @@ func (in *CheCluster) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CheClusterLabels) DeepCopyInto(out *CheClusterLabels) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterLabels. +func (in *CheClusterLabels) DeepCopy() *CheClusterLabels { + if in == nil { + return nil + } + out := new(CheClusterLabels) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterList) DeepCopyInto(out *CheClusterList) { *out = *in @@ -79,6 +95,8 @@ func (in *CheClusterSpec) DeepCopyInto(out *CheClusterSpec) { out.Storage = in.Storage out.Metrics = in.Metrics out.K8s = in.K8s + out.PluginRegistry = in.PluginRegistry + out.DevfileRegistry = in.DevfileRegistry return } @@ -95,6 +113,8 @@ func (in *CheClusterSpec) DeepCopy() *CheClusterSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecAuth) DeepCopyInto(out *CheClusterSpecAuth) { *out = *in + out.Ingress = in.Ingress + out.Route = in.Route return } @@ -124,6 +144,24 @@ func (in *CheClusterSpecDB) DeepCopy() *CheClusterSpecDB { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CheClusterSpecDevfileRegistry) DeepCopyInto(out *CheClusterSpecDevfileRegistry) { + *out = *in + out.Ingress = in.Ingress + out.Route = in.Route + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterSpecDevfileRegistry. +func (in *CheClusterSpecDevfileRegistry) DeepCopy() *CheClusterSpecDevfileRegistry { + if in == nil { + return nil + } + out := new(CheClusterSpecDevfileRegistry) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecK8SOnly) DeepCopyInto(out *CheClusterSpecK8SOnly) { *out = *in @@ -156,6 +194,24 @@ func (in *CheClusterSpecMetrics) DeepCopy() *CheClusterSpecMetrics { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CheClusterSpecPluginRegistry) DeepCopyInto(out *CheClusterSpecPluginRegistry) { + *out = *in + out.Ingress = in.Ingress + out.Route = in.Route + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterSpecPluginRegistry. +func (in *CheClusterSpecPluginRegistry) DeepCopy() *CheClusterSpecPluginRegistry { + if in == nil { + return nil + } + out := new(CheClusterSpecPluginRegistry) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecServer) DeepCopyInto(out *CheClusterSpecServer) { *out = *in @@ -173,6 +229,8 @@ func (in *CheClusterSpecServer) DeepCopyInto(out *CheClusterSpecServer) { (*out)[key] = val } } + out.Ingress = in.Ingress + out.Route = in.Route return } diff --git a/pkg/apis/org/v1/zz_generated.openapi.go b/pkg/apis/org/v1/zz_generated.openapi.go index 4f75d8ea71..264d6f5d9c 100644 --- a/pkg/apis/org/v1/zz_generated.openapi.go +++ b/pkg/apis/org/v1/zz_generated.openapi.go @@ -11,13 +11,16 @@ import ( func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { return map[string]common.OpenAPIDefinition{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheCluster": schema_pkg_apis_org_v1_CheCluster(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpec": schema_pkg_apis_org_v1_CheClusterSpec(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth": schema_pkg_apis_org_v1_CheClusterSpecAuth(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB": schema_pkg_apis_org_v1_CheClusterSpecDB(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly": schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer": schema_pkg_apis_org_v1_CheClusterSpecServer(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage": schema_pkg_apis_org_v1_CheClusterSpecStorage(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheCluster": schema_pkg_apis_org_v1_CheCluster(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels": schema_pkg_apis_org_v1_CheClusterLabels(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpec": schema_pkg_apis_org_v1_CheClusterSpec(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth": schema_pkg_apis_org_v1_CheClusterSpecAuth(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB": schema_pkg_apis_org_v1_CheClusterSpecDB(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDevfileRegistry": schema_pkg_apis_org_v1_CheClusterSpecDevfileRegistry(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly": schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecPluginRegistry": schema_pkg_apis_org_v1_CheClusterSpecPluginRegistry(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer": schema_pkg_apis_org_v1_CheClusterSpecServer(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage": schema_pkg_apis_org_v1_CheClusterSpecStorage(ref), } } @@ -66,6 +69,26 @@ func schema_pkg_apis_org_v1_CheCluster(ref common.ReferenceCallback) common.Open } } +func schema_pkg_apis_org_v1_CheClusterLabels(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Configuration settings related to the persistent storage used by the Che installation.", + Properties: map[string]spec.Schema{ + "labels": { + SchemaProps: spec.SchemaProps{ + Description: "Comma separated list of labels that can be used to organize and categorize (scope and select) objects.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{}, + } +} + func schema_pkg_apis_org_v1_CheClusterSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -108,11 +131,23 @@ func schema_pkg_apis_org_v1_CheClusterSpec(ref common.ReferenceCallback) common. Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly"), }, }, + "pluginRegistry": { + SchemaProps: spec.SchemaProps{ + Description: "Configuration settings related to the devfile registry used by the Che installation.", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecPluginRegistry"), + }, + }, + "devfileRegistry": { + SchemaProps: spec.SchemaProps{ + Description: "Configuration settings related to the plugin registry used by the Che installation.", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDevfileRegistry"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecMetrics", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage"}, + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDevfileRegistry", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecMetrics", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecPluginRegistry", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage"}, } } @@ -227,10 +262,23 @@ func schema_pkg_apis_org_v1_CheClusterSpecAuth(ref common.ReferenceCallback) com Format: "", }, }, + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into an Ingress", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, + "route": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into a Route", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, }, }, }, - Dependencies: []string{}, + Dependencies: []string{ + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, } } @@ -310,6 +358,32 @@ func schema_pkg_apis_org_v1_CheClusterSpecDB(ref common.ReferenceCallback) commo } } +func schema_pkg_apis_org_v1_CheClusterSpecDevfileRegistry(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Configuration settings related to the devfile registry used by the Che installation.", + Properties: map[string]spec.Schema{ + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into an Ingress", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, + "route": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into a Route", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, + } +} + func schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -372,6 +446,32 @@ func schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref common.ReferenceCallback) } } +func schema_pkg_apis_org_v1_CheClusterSpecPluginRegistry(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Configuration settings related to the plugin registry used by the Che installation.", + Properties: map[string]spec.Schema{ + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into an Ingress", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, + "route": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into a Route", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, + } +} + func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -548,7 +648,7 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c }, "pluginRegistryImage": { SchemaProps: spec.SchemaProps{ - Description: "Overrides the container image used in the Plugin registry deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator.", + Description: "Overrides the container image used in the Plugin registry deployment. This includes the image tag. Omit it or leave it empty to use the default container image provided by the operator.", Type: []string{"string"}, Format: "", }, @@ -686,10 +786,23 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c }, }, }, + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into an Ingress", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, + "route": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into a Route", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + }, + }, }, }, }, - Dependencies: []string{}, + Dependencies: []string{ + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, } } diff --git a/pkg/controller/che/che_controller.go b/pkg/controller/che/che_controller.go index 07c185a051..9a4a488ca7 100644 --- a/pkg/controller/che/che_controller.go +++ b/pkg/controller/che/che_controller.go @@ -720,7 +720,8 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e exposedServiceName := getServerExposingServiceName(instance) cheHost := "" if !isOpenShift { - ingress, err := deploy.SyncIngressToCluster(deployContext, cheFlavor, instance.Spec.Server.CheHost, exposedServiceName, 8080) + additionalLabels := deployContext.CheCluster.Spec.Server.Ingress.Labels + ingress, err := deploy.SyncIngressToCluster(deployContext, cheFlavor, instance.Spec.Server.CheHost, exposedServiceName, 8080, additionalLabels) if !tests { if ingress == nil { logrus.Infof("Waiting on ingress '%s' to be ready", cheFlavor) @@ -739,7 +740,8 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e customHost = "" } - route, err := deploy.SyncRouteToCluster(deployContext, cheFlavor, customHost, exposedServiceName, 8080) + additionalLabels := deployContext.CheCluster.Spec.Server.Route.Labels + route, err := deploy.SyncRouteToCluster(deployContext, cheFlavor, customHost, exposedServiceName, 8080, additionalLabels) if !tests { if route == nil { logrus.Infof("Waiting on route '%s' to be ready", cheFlavor) @@ -991,7 +993,8 @@ func EvaluateCheServerVersion(cr *orgv1.CheCluster) string { func getDefaultCheHost(deployContext *deploy.DeployContext) (string, error) { routeName := deploy.DefaultCheFlavor(deployContext.CheCluster) - route, err := deploy.SyncRouteToCluster(deployContext, routeName, "", getServerExposingServiceName(deployContext.CheCluster), 8080) + additionalLabels := deployContext.CheCluster.Spec.Server.Route.Labels + route, err := deploy.SyncRouteToCluster(deployContext, routeName, "", getServerExposingServiceName(deployContext.CheCluster), 8080, additionalLabels) if route == nil { logrus.Infof("Waiting on route '%s' to be ready", routeName) if err != nil { diff --git a/pkg/deploy/devfile_registry.go b/pkg/deploy/devfile_registry.go index 787a0a24ee..32b0684fa4 100644 --- a/pkg/deploy/devfile_registry.go +++ b/pkg/deploy/devfile_registry.go @@ -67,7 +67,8 @@ func SyncDevfileRegistryToCluster(deployContext *DeployContext, cheHost string) logrus.Error(err) } } else { - ingress, err := SyncIngressToCluster(deployContext, DevfileRegistry, domain, DevfileRegistry, 8080) + additionalLabels := deployContext.CheCluster.Spec.DevfileRegistry.Ingress.Labels + ingress, err := SyncIngressToCluster(deployContext, DevfileRegistry, domain, DevfileRegistry, 8080, additionalLabels) if !util.IsTestMode() { if ingress == nil { logrus.Infof("Waiting on ingress '%s' to be ready", DevfileRegistry) @@ -98,7 +99,8 @@ func SyncDevfileRegistryToCluster(deployContext *DeployContext, cheHost string) } } else { // the empty string for a host is intentional here - we let OpenShift decide on the hostname - route, err := SyncRouteToCluster(deployContext, DevfileRegistry, "", DevfileRegistry, 8080) + additionalLabels := deployContext.CheCluster.Spec.DevfileRegistry.Route.Labels + route, err := SyncRouteToCluster(deployContext, DevfileRegistry, "", DevfileRegistry, 8080, additionalLabels) if !util.IsTestMode() { if route == nil { logrus.Infof("Waiting on route '%s' to be ready", DevfileRegistry) diff --git a/pkg/deploy/identity_provider.go b/pkg/deploy/identity_provider.go index 24cc11c0d4..2a4ca73945 100644 --- a/pkg/deploy/identity_provider.go +++ b/pkg/deploy/identity_provider.go @@ -79,7 +79,8 @@ func SyncIdentityProviderToCluster(deployContext *DeployContext, cheHost string, keycloakURL = protocol + "://" + cheHost } else { logrus.Infof("Deploying Keycloak on %s", host) - ingress, err := SyncIngressToCluster(deployContext, "keycloak", host, "keycloak", 8080) + additionalLabels := deployContext.CheCluster.Spec.Auth.Ingress.Labels + ingress, err := SyncIngressToCluster(deployContext, "keycloak", host, "keycloak", 8080, additionalLabels) if !tests { if ingress == nil { logrus.Info("Waiting on ingress 'keycloak' to be ready") @@ -115,7 +116,8 @@ func SyncIdentityProviderToCluster(deployContext *DeployContext, cheHost string, } } else { // create Keycloak route - route, err := SyncRouteToCluster(deployContext, "keycloak", "", "keycloak", 8080) + additionalLabels := deployContext.CheCluster.Spec.Auth.Route.Labels + route, err := SyncRouteToCluster(deployContext, "keycloak", "", "keycloak", 8080, additionalLabels) if !tests { if route == nil { logrus.Info("Waiting on route 'keycloak' to be ready") diff --git a/pkg/deploy/ingress.go b/pkg/deploy/ingress.go index 17d5e86320..9b67eba0b4 100644 --- a/pkg/deploy/ingress.go +++ b/pkg/deploy/ingress.go @@ -14,6 +14,7 @@ package deploy import ( "context" "fmt" + "reflect" "github.com/eclipse/che-operator/pkg/util" "github.com/google/go-cmp/cmp" @@ -29,7 +30,10 @@ import ( ) var ingressDiffOpts = cmp.Options{ - cmpopts.IgnoreFields(v1beta1.Ingress{}, "TypeMeta", "ObjectMeta", "Status"), + cmpopts.IgnoreFields(v1beta1.Ingress{}, "TypeMeta", "Status"), + cmp.Comparer(func(x, y metav1.ObjectMeta) bool { + return reflect.DeepEqual(x.Labels, y.Labels) + }), } func SyncIngressToCluster( @@ -37,9 +41,10 @@ func SyncIngressToCluster( name string, host string, serviceName string, - servicePort int) (*v1beta1.Ingress, error) { + servicePort int, + additionalLabels string) (*v1beta1.Ingress, error) { - specIngress, err := getSpecIngress(deployContext, name, host, serviceName, servicePort) + specIngress, err := getSpecIngress(deployContext, name, host, serviceName, servicePort, additionalLabels) if err != nil { return nil, err } @@ -109,13 +114,15 @@ func getSpecIngress( name string, host string, serviceName string, - servicePort int) (*v1beta1.Ingress, error) { + servicePort int, + additionalLabels string) (*v1beta1.Ingress, error) { tlsSupport := deployContext.CheCluster.Spec.Server.TlsSupport ingressStrategy := util.GetServerExposureStrategy(deployContext.CheCluster, DefaultServerExposureStrategy) ingressDomain := deployContext.CheCluster.Spec.K8s.IngressDomain ingressClass := util.GetValue(deployContext.CheCluster.Spec.K8s.IngressClass, DefaultIngressClass) labels := GetLabels(deployContext.CheCluster, name) + MergeLabels(labels, additionalLabels) if host == "" { if ingressStrategy == "multi-host" { diff --git a/pkg/deploy/labels.go b/pkg/deploy/labels.go index fc601dcc5b..51041ad3ee 100644 --- a/pkg/deploy/labels.go +++ b/pkg/deploy/labels.go @@ -12,6 +12,8 @@ package deploy import ( + "strings" + orgv1 "github.com/eclipse/che-operator/pkg/apis/org/v1" ) @@ -19,3 +21,12 @@ func GetLabels(cr *orgv1.CheCluster, component string) (labels map[string]string labels = map[string]string{"app": DefaultCheFlavor(cr), "component": component} return labels } + +func MergeLabels(labels map[string]string, additionalLabels string) { + for _, l := range strings.Split(additionalLabels, ",") { + pair := strings.SplitN(l, "=", 2) + if len(pair) == 2 { + labels[pair[0]] = pair[1] + } + } +} diff --git a/pkg/deploy/plugin_registry.go b/pkg/deploy/plugin_registry.go index dd310eb832..2eddfb1c53 100644 --- a/pkg/deploy/plugin_registry.go +++ b/pkg/deploy/plugin_registry.go @@ -67,7 +67,8 @@ func SyncPluginRegistryToCluster(deployContext *DeployContext, cheHost string) ( logrus.Error(err) } } else { - ingress, err := SyncIngressToCluster(deployContext, PluginRegistry, domain, PluginRegistry, 8080) + additionalLabels := deployContext.CheCluster.Spec.PluginRegistry.Ingress.Labels + ingress, err := SyncIngressToCluster(deployContext, PluginRegistry, domain, PluginRegistry, 8080, additionalLabels) if !util.IsTestMode() { if ingress == nil { logrus.Infof("Waiting on ingress '%s' to be ready", PluginRegistry) @@ -98,7 +99,8 @@ func SyncPluginRegistryToCluster(deployContext *DeployContext, cheHost string) ( } } else { // the empty string for a host is intentional here - we let OpenShift decide on the hostname - route, err := SyncRouteToCluster(deployContext, PluginRegistry, "", PluginRegistry, 8080) + additionalLabels := deployContext.CheCluster.Spec.PluginRegistry.Route.Labels + route, err := SyncRouteToCluster(deployContext, PluginRegistry, "", PluginRegistry, 8080, additionalLabels) if !util.IsTestMode() { if route == nil { logrus.Infof("Waiting on route '%s' to be ready", PluginRegistry) diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index e1cd4aea5f..c7810255c7 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -14,6 +14,7 @@ package deploy import ( "context" "fmt" + "reflect" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" @@ -31,10 +32,16 @@ import ( var routeDiffOpts = cmp.Options{ cmpopts.IgnoreFields(routev1.Route{}, "TypeMeta", "ObjectMeta", "Status"), cmpopts.IgnoreFields(routev1.RouteSpec{}, "Host", "WildcardPolicy"), + cmp.Comparer(func(x, y metav1.ObjectMeta) bool { + return reflect.DeepEqual(x.Labels, y.Labels) + }), } var routeWithHostDiffOpts = cmp.Options{ - cmpopts.IgnoreFields(routev1.Route{}, "TypeMeta", "ObjectMeta", "Status"), + cmpopts.IgnoreFields(routev1.Route{}, "TypeMeta", "Status"), cmpopts.IgnoreFields(routev1.RouteSpec{}, "WildcardPolicy"), + cmp.Comparer(func(x, y metav1.ObjectMeta) bool { + return reflect.DeepEqual(x.Labels, y.Labels) + }), } func SyncRouteToCluster( @@ -42,9 +49,10 @@ func SyncRouteToCluster( name string, host string, serviceName string, - servicePort int32) (*routev1.Route, error) { + servicePort int32, + additionalLabels string) (*routev1.Route, error) { - specRoute, err := GetSpecRoute(deployContext, name, host, serviceName, servicePort) + specRoute, err := GetSpecRoute(deployContext, name, host, serviceName, servicePort, additionalLabels) if err != nil { return nil, err } @@ -123,10 +131,12 @@ func GetSpecRoute( name string, host string, serviceName string, - servicePort int32) (*routev1.Route, error) { + servicePort int32, + additionalLabels string) (*routev1.Route, error) { tlsSupport := deployContext.CheCluster.Spec.Server.TlsSupport labels := GetLabels(deployContext.CheCluster, DefaultCheFlavor(deployContext.CheCluster)) + MergeLabels(labels, additionalLabels) weight := int32(100) if name == "keycloak" { diff --git a/pkg/deploy/tls.go b/pkg/deploy/tls.go index a0b509dde7..b110c70f93 100644 --- a/pkg/deploy/tls.go +++ b/pkg/deploy/tls.go @@ -112,7 +112,8 @@ func GetEndpointTLSCrtChain(deployContext *DeployContext, endpointURL string) ([ if isTestRoute { // Create test route to get certificates chain. // Note, it is not possible to use SyncRouteToCluster here as it may cause infinite reconcile loop. - routeSpec, err := GetSpecRoute(deployContext, "test", "", "test", 8080) + additionalLabels := deployContext.CheCluster.Spec.Server.Route.Labels + routeSpec, err := GetSpecRoute(deployContext, "test", "", "test", 8080, additionalLabels) if err != nil { return nil, err } From 1431259b1e7ac2e29ef0b4b025cf1b549ff04c17 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Fri, 18 Sep 2020 16:54:14 +0300 Subject: [PATCH 02/13] Remove devfile/plugin registries sections Signed-off-by: Anatolii Bazko --- deploy/crds/org_v1_che_crd.yaml | 54 +-- .../che-operator.clusterserviceversion.yaml | 436 +++++++++--------- pkg/apis/org/v1/che_types.go | 40 +- pkg/apis/org/v1/zz_generated.deepcopy.go | 38 -- pkg/apis/org/v1/zz_generated.openapi.go | 112 ++--- pkg/deploy/devfile_registry.go | 4 +- pkg/deploy/plugin_registry.go | 4 +- 7 files changed, 283 insertions(+), 405 deletions(-) diff --git a/deploy/crds/org_v1_che_crd.yaml b/deploy/crds/org_v1_che_crd.yaml index 54618b3b7c..5d338c51e4 100644 --- a/deploy/crds/org_v1_che_crd.yaml +++ b/deploy/crds/org_v1_che_crd.yaml @@ -229,27 +229,6 @@ spec: `latest` images, and `IfNotPresent` in other cases. type: string type: object - devfileRegistry: - description: Configuration settings related to the plugin registry used - by the Che installation. - properties: - ingress: - description: Additional labels to add into an Ingress - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object - route: - description: Additional labels to add into a Route - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object - type: object k8s: description: Configuration settings specific to Che installations made on upstream Kubernetes. @@ -303,27 +282,6 @@ spec: description: Enables `metrics` Che server endpoint. Default to `true`. type: boolean type: object - pluginRegistry: - description: Configuration settings related to the devfile registry - used by the Che installation. - properties: - ingress: - description: Additional labels to add into an Ingress - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object - route: - description: Additional labels to add into a Route - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object - type: object server: description: General configuration settings related to the Che server and the plugin and devfile registries @@ -406,6 +364,9 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator. type: string + devfileRegistryIngressLabels: + description: Additional labels to add into an Ingress + type: string devfileRegistryMemoryLimit: description: Overrides the memory limit used in the Devfile registry deployment. Defaults to 256Mi. @@ -419,6 +380,9 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + devfileRegistryRouteLabels: + description: Additional labels to add into a Route + type: string devfileRegistryUrl: description: Public URL of the Devfile registry, that serves sample, ready-to-use devfiles. You should set it ONLY if you use an external @@ -468,6 +432,9 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the default container image provided by the operator. type: string + pluginRegistryIngressLabels: + description: Additional labels to add into an Ingress + type: string pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry deployment. Defaults to 256Mi. @@ -481,6 +448,9 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + pluginRegistryRouteLabels: + description: Additional labels to add into a Route + type: string pluginRegistryUrl: description: Public URL of the Plugin registry, that serves sample ready-to-use devfiles. You should set it ONLY if you use an external diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml index baa08b0381..47c94715e2 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml @@ -64,53 +64,53 @@ spec: apiservicedefinitions: {} customresourcedefinitions: owned: - - description: Eclipse Che cluster with DB and Auth Server - displayName: Eclipse Che Cluster - kind: CheCluster - name: checlusters.org.eclipse.che - specDescriptors: - - description: TLS routes - displayName: TLS Mode - path: server.tlsSupport - x-descriptors: - - urn:alm:descriptor:com.tectonic.ui:booleanSwitch - statusDescriptors: - - description: Ingress to access Eclipse Che - displayName: Eclipse Che URL - path: cheURL - x-descriptors: - - urn:alm:descriptor:org.w3:link - - description: Ingress to access Keycloak Admin Console - displayName: Keycloak Admin Console URL - path: keycloakURL - x-descriptors: - - urn:alm:descriptor:org.w3:link - - description: Eclipse Che server version - displayName: Eclipse Che version - path: cheVersion - x-descriptors: - - urn:alm:descriptor:com.tectonic.ui:label - - description: The current status of the application - displayName: Status - path: cheClusterRunning - x-descriptors: - - urn:alm:descriptor:io.kubernetes.phase - - description: Reason of the current status - displayName: Reason - path: reason - x-descriptors: - - urn:alm:descriptor:text - - description: Message explaining the current status - displayName: Message - path: message - x-descriptors: - - urn:alm:descriptor:text - - description: Link providing help related to the current status - displayName: Help link - path: helpLink - x-descriptors: - - urn:alm:descriptor:org.w3:link - version: v1 + - description: Eclipse Che cluster with DB and Auth Server + displayName: Eclipse Che Cluster + kind: CheCluster + name: checlusters.org.eclipse.che + specDescriptors: + - description: TLS routes + displayName: TLS Mode + path: server.tlsSupport + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + statusDescriptors: + - description: Ingress to access Eclipse Che + displayName: Eclipse Che URL + path: cheURL + x-descriptors: + - urn:alm:descriptor:org.w3:link + - description: Ingress to access Keycloak Admin Console + displayName: Keycloak Admin Console URL + path: keycloakURL + x-descriptors: + - urn:alm:descriptor:org.w3:link + - description: Eclipse Che server version + displayName: Eclipse Che version + path: cheVersion + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:label + - description: The current status of the application + displayName: Status + path: cheClusterRunning + x-descriptors: + - urn:alm:descriptor:io.kubernetes.phase + - description: Reason of the current status + displayName: Reason + path: reason + x-descriptors: + - urn:alm:descriptor:text + - description: Message explaining the current status + displayName: Message + path: message + x-descriptors: + - urn:alm:descriptor:text + - description: Link providing help related to the current status + displayName: Help link + path: helpLink + x-descriptors: + - urn:alm:descriptor:org.w3:link + version: v1 description: | A collaborative Kubernetes-native development solution that delivers Kubernetes workspaces and in-browser IDE for rapid cloud application development. This operator installs PostgreSQL, Keycloak, Registries and the Eclipse Che server, as well as configures all these services. @@ -218,187 +218,187 @@ spec: ``` displayName: Eclipse Che icon: - - base64data: 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 - mediatype: image/png + - base64data: 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 + mediatype: image/png install: spec: deployments: - - name: che-operator - spec: - replicas: 1 - selector: - matchLabels: + - name: che-operator + spec: + replicas: 1 + selector: + matchLabels: + app: che-operator + strategy: {} + template: + metadata: + labels: app: che-operator - strategy: {} - template: - metadata: - labels: - app: che-operator - spec: - containers: - - command: - - /usr/local/bin/che-operator - env: - - name: WATCH_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.annotations['olm.targetNamespaces'] - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: OPERATOR_NAME - value: che-operator - - name: CHE_VERSION - value: nightly - - name: RELATED_IMAGE_che_server - value: quay.io/eclipse/che-server:nightly - - name: RELATED_IMAGE_plugin_registry - value: quay.io/eclipse/che-plugin-registry:nightly - - name: RELATED_IMAGE_devfile_registry - value: quay.io/eclipse/che-devfile-registry:nightly - - name: RELATED_IMAGE_che_tls_secrets_creation_job - value: quay.io/eclipse/che-tls-secret-creator:alpine-d1ed4ad - - name: RELATED_IMAGE_pvc_jobs - value: registry.access.redhat.com/ubi8-minimal:8.2-349 - - name: RELATED_IMAGE_postgres - value: centos/postgresql-96-centos7:9.6 - - name: RELATED_IMAGE_keycloak - value: quay.io/eclipse/che-keycloak:nightly - - name: RELATED_IMAGE_che_workspace_plugin_broker_metadata - value: quay.io/eclipse/che-plugin-metadata-broker:v3.4.0 - - name: RELATED_IMAGE_che_workspace_plugin_broker_artifacts - value: quay.io/eclipse/che-plugin-artifacts-broker:v3.4.0 - - name: RELATED_IMAGE_che_server_secure_exposer_jwt_proxy_image - value: quay.io/eclipse/che-jwtproxy:0.10.0 - - name: RELATED_IMAGE_single_host_gateway - value: docker.io/traefik:v2.2.8 - - name: RELATED_IMAGE_single_host_gateway_config_sidecar - value: quay.io/che-incubator/configbump:0.1.4 - - name: CHE_FLAVOR - value: che - - name: CONSOLE_LINK_NAME - value: che - - name: CONSOLE_LINK_DISPLAY_NAME - value: Eclipse Che - - name: CONSOLE_LINK_SECTION - value: Red Hat Applications - - name: CONSOLE_LINK_IMAGE - value: /dashboard/assets/branding/loader.svg - - name: CHE_IDENTITY_SECRET - value: che-identity-secret - - name: CHE_IDENTITY_POSTGRES_SECRET - value: che-identity-postgres-secret - - name: CHE_POSTGRES_SECRET - value: che-postgres-secret - - name: CHE_SERVER_TRUST_STORE_CONFIGMAP_NAME - value: ca-certs - image: quay.io/eclipse/che-operator:nightly - imagePullPolicy: Always - name: che-operator - ports: - - containerPort: 60000 - name: metrics - resources: {} - restartPolicy: Always - serviceAccountName: che-operator - terminationGracePeriodSeconds: 5 + spec: + containers: + - command: + - /usr/local/bin/che-operator + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.annotations['olm.targetNamespaces'] + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: che-operator + - name: CHE_VERSION + value: nightly + - name: RELATED_IMAGE_che_server + value: quay.io/eclipse/che-server:nightly + - name: RELATED_IMAGE_plugin_registry + value: quay.io/eclipse/che-plugin-registry:nightly + - name: RELATED_IMAGE_devfile_registry + value: quay.io/eclipse/che-devfile-registry:nightly + - name: RELATED_IMAGE_che_tls_secrets_creation_job + value: quay.io/eclipse/che-tls-secret-creator:alpine-d1ed4ad + - name: RELATED_IMAGE_pvc_jobs + value: registry.access.redhat.com/ubi8-minimal:8.2-349 + - name: RELATED_IMAGE_postgres + value: centos/postgresql-96-centos7:9.6 + - name: RELATED_IMAGE_keycloak + value: quay.io/eclipse/che-keycloak:nightly + - name: RELATED_IMAGE_che_workspace_plugin_broker_metadata + value: quay.io/eclipse/che-plugin-metadata-broker:v3.4.0 + - name: RELATED_IMAGE_che_workspace_plugin_broker_artifacts + value: quay.io/eclipse/che-plugin-artifacts-broker:v3.4.0 + - name: RELATED_IMAGE_che_server_secure_exposer_jwt_proxy_image + value: quay.io/eclipse/che-jwtproxy:0.10.0 + - name: RELATED_IMAGE_single_host_gateway + value: docker.io/traefik:v2.2.8 + - name: RELATED_IMAGE_single_host_gateway_config_sidecar + value: quay.io/che-incubator/configbump:0.1.4 + - name: CHE_FLAVOR + value: che + - name: CONSOLE_LINK_NAME + value: che + - name: CONSOLE_LINK_DISPLAY_NAME + value: Eclipse Che + - name: CONSOLE_LINK_SECTION + value: Red Hat Applications + - name: CONSOLE_LINK_IMAGE + value: /dashboard/assets/branding/loader.svg + - name: CHE_IDENTITY_SECRET + value: che-identity-secret + - name: CHE_IDENTITY_POSTGRES_SECRET + value: che-identity-postgres-secret + - name: CHE_POSTGRES_SECRET + value: che-postgres-secret + - name: CHE_SERVER_TRUST_STORE_CONFIGMAP_NAME + value: ca-certs + image: quay.io/eclipse/che-operator:nightly + imagePullPolicy: Always + name: che-operator + ports: + - containerPort: 60000 + name: metrics + resources: {} + restartPolicy: Always + serviceAccountName: che-operator + terminationGracePeriodSeconds: 5 permissions: - - rules: - - apiGroups: - - extensions - resources: - - ingresses - verbs: - - '*' - - apiGroups: - - batch - resources: - - jobs - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - roles - - rolebindings - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - clusterroles - - clusterrolebindings - verbs: - - '*' - - apiGroups: - - "" - resources: - - pods - - services - - serviceaccounts - - endpoints - - persistentvolumeclaims - - events - - configmaps - - secrets - - pods/exec - - pods/log - verbs: - - '*' - - apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - apiGroups: - - apps - resources: - - deployments - verbs: - - '*' - - apiGroups: - - monitoring.coreos.com - resources: - - servicemonitors - verbs: - - get - - create - - apiGroups: - - org.eclipse.che - resources: - - '*' - verbs: - - '*' - serviceAccountName: che-operator + - rules: + - apiGroups: + - extensions + resources: + - ingresses + verbs: + - '*' + - apiGroups: + - batch + resources: + - jobs + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + - clusterrolebindings + verbs: + - '*' + - apiGroups: + - "" + resources: + - pods + - services + - serviceaccounts + - endpoints + - persistentvolumeclaims + - events + - configmaps + - secrets + - pods/exec + - pods/log + verbs: + - '*' + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - apps + resources: + - deployments + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - get + - create + - apiGroups: + - org.eclipse.che + resources: + - '*' + verbs: + - '*' + serviceAccountName: che-operator strategy: deployment installModes: - - supported: true - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: true - type: MultiNamespace - - supported: false - type: AllNamespaces + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: true + type: MultiNamespace + - supported: false + type: AllNamespaces keywords: - - eclipse che - - workspaces - - devtools - - developer - - ide - - java + - eclipse che + - workspaces + - devtools + - developer + - ide + - java links: - - name: Product Page - url: http://www.eclipse.org/che - - name: Documentation - url: https://www.eclipse.org/che/docs - - name: Operator GitHub Repo - url: https://github.com/eclipse/che-operator + - name: Product Page + url: http://www.eclipse.org/che + - name: Documentation + url: https://www.eclipse.org/che/docs + - name: Operator GitHub Repo + url: https://github.com/eclipse/che-operator maintainers: - - email: dfestal@redhat.com - name: David Festal + - email: dfestal@redhat.com + name: David Festal maturity: stable provider: name: Eclipse Foundation diff --git a/pkg/apis/org/v1/che_types.go b/pkg/apis/org/v1/che_types.go index 6dba926c75..342d41d00d 100644 --- a/pkg/apis/org/v1/che_types.go +++ b/pkg/apis/org/v1/che_types.go @@ -50,12 +50,6 @@ type CheClusterSpec struct { // Configuration settings specific to Che installations made on upstream Kubernetes. // +optional K8s CheClusterSpecK8SOnly `json:"k8s"` - // Configuration settings related to the devfile registry used by the Che installation. - // +optional - PluginRegistry CheClusterSpecPluginRegistry `json:"pluginRegistry"` - // Configuration settings related to the plugin registry used by the Che installation. - // +optional - DevfileRegistry CheClusterSpecDevfileRegistry `json:"devfileRegistry"` } // +k8s:openapi-gen=true @@ -163,6 +157,12 @@ type CheClusterSpecServer struct { // Overrides the memory request used in the Devfile registry deployment. Defaults to 16Mi. // +optional DevfileRegistryMemoryRequest string `json:"devfileRegistryMemoryRequest,omitempty"` + // Additional labels to add into an Ingress + // +optional + DevfileRegistryIngressLabels string `json:"devfileRegistryIngressLabels,omitempty"` + // Additional labels to add into a Route + // +optional + DevfileRegistryRouteLabels string `json:"devfileRegistryRouteLabels,omitempty"` // Instructs the operator on whether or not to deploy a dedicated Devfile registry server. // By default a dedicated devfile registry server is started. // But if `externalDevfileRegistry` is `true`, then no such dedicated server will be started by the operator @@ -188,6 +188,12 @@ type CheClusterSpecServer struct { // Overrides the memory request used in the Plugin registry deployment. Defaults to 16Mi. // +optional PluginRegistryMemoryRequest string `json:"pluginRegistryMemoryRequest,omitempty"` + // Additional labels to add into an Ingress + // +optional + PluginRegistryIngressLabels string `json:"pluginRegistryIngressLabels,omitempty"` + // Additional labels to add into a Route + // +optional + PluginRegistryRouteLabels string `json:"pluginRegistryRouteLabels,omitempty"` // Instructs the operator on whether or not to deploy a dedicated Plugin registry server. // By default a dedicated plugin registry server is started. // But if `externalPluginRegistry` is `true`, then no such dedicated server will be started by the operator @@ -411,28 +417,6 @@ type CheClusterSpecAuth struct { Route CheClusterLabels `json:"route,omitempty"` } -// +k8s:openapi-gen=true -// Configuration settings related to the devfile registry used by the Che installation. -type CheClusterSpecDevfileRegistry struct { - // Additional labels to add into an Ingress - // +optional - Ingress CheClusterLabels `json:"ingress,omitempty"` - // Additional labels to add into a Route - // +optional - Route CheClusterLabels `json:"route,omitempty"` -} - -// +k8s:openapi-gen=true -// Configuration settings related to the plugin registry used by the Che installation. -type CheClusterSpecPluginRegistry struct { - // Additional labels to add into an Ingress - // +optional - Ingress CheClusterLabels `json:"ingress,omitempty"` - // Additional labels to add into a Route - // +optional - Route CheClusterLabels `json:"route,omitempty"` -} - // +k8s:openapi-gen=true // Configuration settings related to the persistent storage used by the Che installation. type CheClusterLabels struct { diff --git a/pkg/apis/org/v1/zz_generated.deepcopy.go b/pkg/apis/org/v1/zz_generated.deepcopy.go index 53a4ebae08..93703dc7e0 100644 --- a/pkg/apis/org/v1/zz_generated.deepcopy.go +++ b/pkg/apis/org/v1/zz_generated.deepcopy.go @@ -95,8 +95,6 @@ func (in *CheClusterSpec) DeepCopyInto(out *CheClusterSpec) { out.Storage = in.Storage out.Metrics = in.Metrics out.K8s = in.K8s - out.PluginRegistry = in.PluginRegistry - out.DevfileRegistry = in.DevfileRegistry return } @@ -144,24 +142,6 @@ func (in *CheClusterSpecDB) DeepCopy() *CheClusterSpecDB { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CheClusterSpecDevfileRegistry) DeepCopyInto(out *CheClusterSpecDevfileRegistry) { - *out = *in - out.Ingress = in.Ingress - out.Route = in.Route - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterSpecDevfileRegistry. -func (in *CheClusterSpecDevfileRegistry) DeepCopy() *CheClusterSpecDevfileRegistry { - if in == nil { - return nil - } - out := new(CheClusterSpecDevfileRegistry) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecK8SOnly) DeepCopyInto(out *CheClusterSpecK8SOnly) { *out = *in @@ -194,24 +174,6 @@ func (in *CheClusterSpecMetrics) DeepCopy() *CheClusterSpecMetrics { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CheClusterSpecPluginRegistry) DeepCopyInto(out *CheClusterSpecPluginRegistry) { - *out = *in - out.Ingress = in.Ingress - out.Route = in.Route - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterSpecPluginRegistry. -func (in *CheClusterSpecPluginRegistry) DeepCopy() *CheClusterSpecPluginRegistry { - if in == nil { - return nil - } - out := new(CheClusterSpecPluginRegistry) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecServer) DeepCopyInto(out *CheClusterSpecServer) { *out = *in diff --git a/pkg/apis/org/v1/zz_generated.openapi.go b/pkg/apis/org/v1/zz_generated.openapi.go index 264d6f5d9c..5d403d3194 100644 --- a/pkg/apis/org/v1/zz_generated.openapi.go +++ b/pkg/apis/org/v1/zz_generated.openapi.go @@ -11,16 +11,14 @@ import ( func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { return map[string]common.OpenAPIDefinition{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheCluster": schema_pkg_apis_org_v1_CheCluster(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels": schema_pkg_apis_org_v1_CheClusterLabels(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpec": schema_pkg_apis_org_v1_CheClusterSpec(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth": schema_pkg_apis_org_v1_CheClusterSpecAuth(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB": schema_pkg_apis_org_v1_CheClusterSpecDB(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDevfileRegistry": schema_pkg_apis_org_v1_CheClusterSpecDevfileRegistry(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly": schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecPluginRegistry": schema_pkg_apis_org_v1_CheClusterSpecPluginRegistry(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer": schema_pkg_apis_org_v1_CheClusterSpecServer(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage": schema_pkg_apis_org_v1_CheClusterSpecStorage(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheCluster": schema_pkg_apis_org_v1_CheCluster(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels": schema_pkg_apis_org_v1_CheClusterLabels(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpec": schema_pkg_apis_org_v1_CheClusterSpec(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth": schema_pkg_apis_org_v1_CheClusterSpecAuth(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB": schema_pkg_apis_org_v1_CheClusterSpecDB(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly": schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer": schema_pkg_apis_org_v1_CheClusterSpecServer(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage": schema_pkg_apis_org_v1_CheClusterSpecStorage(ref), } } @@ -131,23 +129,11 @@ func schema_pkg_apis_org_v1_CheClusterSpec(ref common.ReferenceCallback) common. Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly"), }, }, - "pluginRegistry": { - SchemaProps: spec.SchemaProps{ - Description: "Configuration settings related to the devfile registry used by the Che installation.", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecPluginRegistry"), - }, - }, - "devfileRegistry": { - SchemaProps: spec.SchemaProps{ - Description: "Configuration settings related to the plugin registry used by the Che installation.", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDevfileRegistry"), - }, - }, }, }, }, Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDevfileRegistry", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecMetrics", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecPluginRegistry", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage"}, + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecMetrics", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer", "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage"}, } } @@ -358,32 +344,6 @@ func schema_pkg_apis_org_v1_CheClusterSpecDB(ref common.ReferenceCallback) commo } } -func schema_pkg_apis_org_v1_CheClusterSpecDevfileRegistry(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Configuration settings related to the devfile registry used by the Che installation.", - Properties: map[string]spec.Schema{ - "ingress": { - SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into an Ingress", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), - }, - }, - "route": { - SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into a Route", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, - } -} - func schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -446,32 +406,6 @@ func schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref common.ReferenceCallback) } } -func schema_pkg_apis_org_v1_CheClusterSpecPluginRegistry(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Configuration settings related to the plugin registry used by the Che installation.", - Properties: map[string]spec.Schema{ - "ingress": { - SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into an Ingress", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), - }, - }, - "route": { - SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into a Route", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, - } -} - func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -632,6 +566,20 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c Format: "", }, }, + "devfileRegistryIngressLabels": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into an Ingress", + Type: []string{"string"}, + Format: "", + }, + }, + "devfileRegistryRouteLabels": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into a Route", + Type: []string{"string"}, + Format: "", + }, + }, "externalDevfileRegistry": { SchemaProps: spec.SchemaProps{ Description: "Instructs the operator on whether or not to deploy a dedicated Devfile registry server. By default a dedicated devfile registry server is started. But if `externalDevfileRegistry` is `true`, then no such dedicated server will be started by the operator and you will have to manually set the `devfileRegistryUrl` field", @@ -674,6 +622,20 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c Format: "", }, }, + "pluginRegistryIngressLabels": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into an Ingress", + Type: []string{"string"}, + Format: "", + }, + }, + "pluginRegistryRouteLabels": { + SchemaProps: spec.SchemaProps{ + Description: "Additional labels to add into a Route", + Type: []string{"string"}, + Format: "", + }, + }, "externalPluginRegistry": { SchemaProps: spec.SchemaProps{ Description: "Instructs the operator on whether or not to deploy a dedicated Plugin registry server. By default a dedicated plugin registry server is started. But if `externalPluginRegistry` is `true`, then no such dedicated server will be started by the operator and you will have to manually set the `pluginRegistryUrl` field.", diff --git a/pkg/deploy/devfile_registry.go b/pkg/deploy/devfile_registry.go index 32b0684fa4..38828f3ecd 100644 --- a/pkg/deploy/devfile_registry.go +++ b/pkg/deploy/devfile_registry.go @@ -67,7 +67,7 @@ func SyncDevfileRegistryToCluster(deployContext *DeployContext, cheHost string) logrus.Error(err) } } else { - additionalLabels := deployContext.CheCluster.Spec.DevfileRegistry.Ingress.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.DevfileRegistryIngressLabels ingress, err := SyncIngressToCluster(deployContext, DevfileRegistry, domain, DevfileRegistry, 8080, additionalLabels) if !util.IsTestMode() { if ingress == nil { @@ -99,7 +99,7 @@ func SyncDevfileRegistryToCluster(deployContext *DeployContext, cheHost string) } } else { // the empty string for a host is intentional here - we let OpenShift decide on the hostname - additionalLabels := deployContext.CheCluster.Spec.DevfileRegistry.Route.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.DevfileRegistryRouteLabels route, err := SyncRouteToCluster(deployContext, DevfileRegistry, "", DevfileRegistry, 8080, additionalLabels) if !util.IsTestMode() { if route == nil { diff --git a/pkg/deploy/plugin_registry.go b/pkg/deploy/plugin_registry.go index 2eddfb1c53..19cfdc0e2e 100644 --- a/pkg/deploy/plugin_registry.go +++ b/pkg/deploy/plugin_registry.go @@ -67,7 +67,7 @@ func SyncPluginRegistryToCluster(deployContext *DeployContext, cheHost string) ( logrus.Error(err) } } else { - additionalLabels := deployContext.CheCluster.Spec.PluginRegistry.Ingress.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.PluginRegistryIngressLabels ingress, err := SyncIngressToCluster(deployContext, PluginRegistry, domain, PluginRegistry, 8080, additionalLabels) if !util.IsTestMode() { if ingress == nil { @@ -99,7 +99,7 @@ func SyncPluginRegistryToCluster(deployContext *DeployContext, cheHost string) ( } } else { // the empty string for a host is intentional here - we let OpenShift decide on the hostname - additionalLabels := deployContext.CheCluster.Spec.PluginRegistry.Route.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.PluginRegistryRouteLabels route, err := SyncRouteToCluster(deployContext, PluginRegistry, "", PluginRegistry, 8080, additionalLabels) if !util.IsTestMode() { if route == nil { From b93053bf3d2f4ab92c7b48b12fc81edbcd4cc2eb Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Mon, 21 Sep 2020 10:34:24 +0300 Subject: [PATCH 03/13] Update nightly bundle Signed-off-by: Anatolii Bazko --- .../che-operator.clusterserviceversion.yaml | 440 +++++++++--------- .../manifests/org_v1_che_crd.yaml | 46 +- .../che-operator.clusterserviceversion.yaml | 4 +- .../manifests/org_v1_che_crd.yaml | 46 +- pkg/apis/org/v1/che_types.go | 11 +- pkg/apis/org/v1/zz_generated.deepcopy.go | 32 +- pkg/apis/org/v1/zz_generated.openapi.go | 53 ++- 7 files changed, 359 insertions(+), 273 deletions(-) diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml index 47c94715e2..7ace8aa5e4 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml @@ -58,59 +58,59 @@ metadata: operatorframework.io/suggested-namespace: eclipse-che repository: https://github.com/eclipse/che-operator support: Eclipse Foundation - name: eclipse-che-preview-kubernetes.v7.19.0-6.nightly + name: eclipse-che-preview-kubernetes.v7.19.0-7.nightly namespace: placeholder spec: apiservicedefinitions: {} customresourcedefinitions: owned: - - description: Eclipse Che cluster with DB and Auth Server - displayName: Eclipse Che Cluster - kind: CheCluster - name: checlusters.org.eclipse.che - specDescriptors: - - description: TLS routes - displayName: TLS Mode - path: server.tlsSupport - x-descriptors: - - urn:alm:descriptor:com.tectonic.ui:booleanSwitch - statusDescriptors: - - description: Ingress to access Eclipse Che - displayName: Eclipse Che URL - path: cheURL - x-descriptors: - - urn:alm:descriptor:org.w3:link - - description: Ingress to access Keycloak Admin Console - displayName: Keycloak Admin Console URL - path: keycloakURL - x-descriptors: - - urn:alm:descriptor:org.w3:link - - description: Eclipse Che server version - displayName: Eclipse Che version - path: cheVersion - x-descriptors: - - urn:alm:descriptor:com.tectonic.ui:label - - description: The current status of the application - displayName: Status - path: cheClusterRunning - x-descriptors: - - urn:alm:descriptor:io.kubernetes.phase - - description: Reason of the current status - displayName: Reason - path: reason - x-descriptors: - - urn:alm:descriptor:text - - description: Message explaining the current status - displayName: Message - path: message - x-descriptors: - - urn:alm:descriptor:text - - description: Link providing help related to the current status - displayName: Help link - path: helpLink - x-descriptors: - - urn:alm:descriptor:org.w3:link - version: v1 + - description: Eclipse Che cluster with DB and Auth Server + displayName: Eclipse Che Cluster + kind: CheCluster + name: checlusters.org.eclipse.che + specDescriptors: + - description: TLS routes + displayName: TLS Mode + path: server.tlsSupport + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + statusDescriptors: + - description: Ingress to access Eclipse Che + displayName: Eclipse Che URL + path: cheURL + x-descriptors: + - urn:alm:descriptor:org.w3:link + - description: Ingress to access Keycloak Admin Console + displayName: Keycloak Admin Console URL + path: keycloakURL + x-descriptors: + - urn:alm:descriptor:org.w3:link + - description: Eclipse Che server version + displayName: Eclipse Che version + path: cheVersion + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:label + - description: The current status of the application + displayName: Status + path: cheClusterRunning + x-descriptors: + - urn:alm:descriptor:io.kubernetes.phase + - description: Reason of the current status + displayName: Reason + path: reason + x-descriptors: + - urn:alm:descriptor:text + - description: Message explaining the current status + displayName: Message + path: message + x-descriptors: + - urn:alm:descriptor:text + - description: Link providing help related to the current status + displayName: Help link + path: helpLink + x-descriptors: + - urn:alm:descriptor:org.w3:link + version: v1 description: | A collaborative Kubernetes-native development solution that delivers Kubernetes workspaces and in-browser IDE for rapid cloud application development. This operator installs PostgreSQL, Keycloak, Registries and the Eclipse Che server, as well as configures all these services. @@ -218,188 +218,188 @@ spec: ``` displayName: Eclipse Che icon: - - base64data: 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 - mediatype: image/png + - base64data: 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 + mediatype: image/png install: spec: deployments: - - name: che-operator - spec: - replicas: 1 - selector: - matchLabels: - app: che-operator - strategy: {} - template: - metadata: - labels: + - name: che-operator + spec: + replicas: 1 + selector: + matchLabels: app: che-operator - spec: - containers: - - command: - - /usr/local/bin/che-operator - env: - - name: WATCH_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.annotations['olm.targetNamespaces'] - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: OPERATOR_NAME - value: che-operator - - name: CHE_VERSION - value: nightly - - name: RELATED_IMAGE_che_server - value: quay.io/eclipse/che-server:nightly - - name: RELATED_IMAGE_plugin_registry - value: quay.io/eclipse/che-plugin-registry:nightly - - name: RELATED_IMAGE_devfile_registry - value: quay.io/eclipse/che-devfile-registry:nightly - - name: RELATED_IMAGE_che_tls_secrets_creation_job - value: quay.io/eclipse/che-tls-secret-creator:alpine-d1ed4ad - - name: RELATED_IMAGE_pvc_jobs - value: registry.access.redhat.com/ubi8-minimal:8.2-349 - - name: RELATED_IMAGE_postgres - value: centos/postgresql-96-centos7:9.6 - - name: RELATED_IMAGE_keycloak - value: quay.io/eclipse/che-keycloak:nightly - - name: RELATED_IMAGE_che_workspace_plugin_broker_metadata - value: quay.io/eclipse/che-plugin-metadata-broker:v3.4.0 - - name: RELATED_IMAGE_che_workspace_plugin_broker_artifacts - value: quay.io/eclipse/che-plugin-artifacts-broker:v3.4.0 - - name: RELATED_IMAGE_che_server_secure_exposer_jwt_proxy_image - value: quay.io/eclipse/che-jwtproxy:0.10.0 - - name: RELATED_IMAGE_single_host_gateway - value: docker.io/traefik:v2.2.8 - - name: RELATED_IMAGE_single_host_gateway_config_sidecar - value: quay.io/che-incubator/configbump:0.1.4 - - name: CHE_FLAVOR - value: che - - name: CONSOLE_LINK_NAME - value: che - - name: CONSOLE_LINK_DISPLAY_NAME - value: Eclipse Che - - name: CONSOLE_LINK_SECTION - value: Red Hat Applications - - name: CONSOLE_LINK_IMAGE - value: /dashboard/assets/branding/loader.svg - - name: CHE_IDENTITY_SECRET - value: che-identity-secret - - name: CHE_IDENTITY_POSTGRES_SECRET - value: che-identity-postgres-secret - - name: CHE_POSTGRES_SECRET - value: che-postgres-secret - - name: CHE_SERVER_TRUST_STORE_CONFIGMAP_NAME - value: ca-certs - image: quay.io/eclipse/che-operator:nightly - imagePullPolicy: Always - name: che-operator - ports: - - containerPort: 60000 - name: metrics - resources: {} - restartPolicy: Always - serviceAccountName: che-operator - terminationGracePeriodSeconds: 5 + strategy: {} + template: + metadata: + labels: + app: che-operator + spec: + containers: + - command: + - /usr/local/bin/che-operator + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.annotations['olm.targetNamespaces'] + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: che-operator + - name: CHE_VERSION + value: nightly + - name: RELATED_IMAGE_che_server + value: quay.io/eclipse/che-server:nightly + - name: RELATED_IMAGE_plugin_registry + value: quay.io/eclipse/che-plugin-registry:nightly + - name: RELATED_IMAGE_devfile_registry + value: quay.io/eclipse/che-devfile-registry:nightly + - name: RELATED_IMAGE_che_tls_secrets_creation_job + value: quay.io/eclipse/che-tls-secret-creator:alpine-d1ed4ad + - name: RELATED_IMAGE_pvc_jobs + value: registry.access.redhat.com/ubi8-minimal:8.2-349 + - name: RELATED_IMAGE_postgres + value: centos/postgresql-96-centos7:9.6 + - name: RELATED_IMAGE_keycloak + value: quay.io/eclipse/che-keycloak:nightly + - name: RELATED_IMAGE_che_workspace_plugin_broker_metadata + value: quay.io/eclipse/che-plugin-metadata-broker:v3.4.0 + - name: RELATED_IMAGE_che_workspace_plugin_broker_artifacts + value: quay.io/eclipse/che-plugin-artifacts-broker:v3.4.0 + - name: RELATED_IMAGE_che_server_secure_exposer_jwt_proxy_image + value: quay.io/eclipse/che-jwtproxy:0.10.0 + - name: RELATED_IMAGE_single_host_gateway + value: docker.io/traefik:v2.2.8 + - name: RELATED_IMAGE_single_host_gateway_config_sidecar + value: quay.io/che-incubator/configbump:0.1.4 + - name: CHE_FLAVOR + value: che + - name: CONSOLE_LINK_NAME + value: che + - name: CONSOLE_LINK_DISPLAY_NAME + value: Eclipse Che + - name: CONSOLE_LINK_SECTION + value: Red Hat Applications + - name: CONSOLE_LINK_IMAGE + value: /dashboard/assets/branding/loader.svg + - name: CHE_IDENTITY_SECRET + value: che-identity-secret + - name: CHE_IDENTITY_POSTGRES_SECRET + value: che-identity-postgres-secret + - name: CHE_POSTGRES_SECRET + value: che-postgres-secret + - name: CHE_SERVER_TRUST_STORE_CONFIGMAP_NAME + value: ca-certs + image: quay.io/eclipse/che-operator:nightly + imagePullPolicy: Always + name: che-operator + ports: + - containerPort: 60000 + name: metrics + resources: {} + restartPolicy: Always + serviceAccountName: che-operator + terminationGracePeriodSeconds: 5 permissions: - - rules: - - apiGroups: - - extensions - resources: - - ingresses - verbs: - - '*' - - apiGroups: - - batch - resources: - - jobs - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - roles - - rolebindings - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - clusterroles - - clusterrolebindings - verbs: - - '*' - - apiGroups: - - "" - resources: - - pods - - services - - serviceaccounts - - endpoints - - persistentvolumeclaims - - events - - configmaps - - secrets - - pods/exec - - pods/log - verbs: - - '*' - - apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - apiGroups: - - apps - resources: - - deployments - verbs: - - '*' - - apiGroups: - - monitoring.coreos.com - resources: - - servicemonitors - verbs: - - get - - create - - apiGroups: - - org.eclipse.che - resources: - - '*' - verbs: - - '*' - serviceAccountName: che-operator + - rules: + - apiGroups: + - extensions + resources: + - ingresses + verbs: + - '*' + - apiGroups: + - batch + resources: + - jobs + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + - rolebindings + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + - clusterrolebindings + verbs: + - '*' + - apiGroups: + - "" + resources: + - pods + - services + - serviceaccounts + - endpoints + - persistentvolumeclaims + - events + - configmaps + - secrets + - pods/exec + - pods/log + verbs: + - '*' + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - apps + resources: + - deployments + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - get + - create + - apiGroups: + - org.eclipse.che + resources: + - '*' + verbs: + - '*' + serviceAccountName: che-operator strategy: deployment installModes: - - supported: true - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: true - type: MultiNamespace - - supported: false - type: AllNamespaces + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: true + type: MultiNamespace + - supported: false + type: AllNamespaces keywords: - - eclipse che - - workspaces - - devtools - - developer - - ide - - java + - eclipse che + - workspaces + - devtools + - developer + - ide + - java links: - - name: Product Page - url: http://www.eclipse.org/che - - name: Documentation - url: https://www.eclipse.org/che/docs - - name: Operator GitHub Repo - url: https://github.com/eclipse/che-operator + - name: Product Page + url: http://www.eclipse.org/che + - name: Documentation + url: https://www.eclipse.org/che/docs + - name: Operator GitHub Repo + url: https://github.com/eclipse/che-operator maintainers: - - email: dfestal@redhat.com - name: David Festal + - email: dfestal@redhat.com + name: David Festal maturity: stable provider: name: Eclipse Foundation - version: 7.19.0-6.nightly + version: 7.19.0-7.nightly diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml index 428af85e3f..5d338c51e4 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml @@ -129,6 +129,14 @@ spec: By default this will be automatically calculated and set by the operator. type: string + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object oAuthClientName: description: Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated @@ -148,6 +156,14 @@ spec: user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.' type: boolean + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object updateAdminPassword: description: Forces the default `admin` Che user to update password on first login. Defaults to `false`. @@ -348,6 +364,9 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator. type: string + devfileRegistryIngressLabels: + description: Additional labels to add into an Ingress + type: string devfileRegistryMemoryLimit: description: Overrides the memory limit used in the Devfile registry deployment. Defaults to 256Mi. @@ -361,6 +380,9 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + devfileRegistryRouteLabels: + description: Additional labels to add into a Route + type: string devfileRegistryUrl: description: Public URL of the Devfile registry, that serves sample, ready-to-use devfiles. You should set it ONLY if you use an external @@ -386,6 +408,14 @@ spec: config map will be propagated to the Che components and provide particular configuration for Git. type: boolean + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object nonProxyHosts: description: List of hosts that should not use the configured proxy. Use `|`` as delimiter, eg `localhost|my.host.com|123.42.12.32` @@ -400,7 +430,10 @@ spec: pluginRegistryImage: description: Overrides the container image used in the Plugin registry deployment. This includes the image tag. Omit it or leave it empty - to use the defaut container image provided by the operator. + to use the default container image provided by the operator. + type: string + pluginRegistryIngressLabels: + description: Additional labels to add into an Ingress type: string pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry @@ -415,6 +448,9 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + pluginRegistryRouteLabels: + description: Additional labels to add into a Route + type: string pluginRegistryUrl: description: Public URL of the Plugin registry, that serves sample ready-to-use devfiles. You should set it ONLY if you use an external @@ -453,6 +489,14 @@ spec: a proxy is required (see also the `proxyURL`, `proxyPassword` and `proxySecret` fields). type: string + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object selfSignedCert: description: Deprecated. The value of this flag is ignored. Che operator will automatically detect if router certificate is self-signed. diff --git a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml index afe0809a81..ea7d68e2b1 100644 --- a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml @@ -55,7 +55,7 @@ metadata: operatorframework.io/suggested-namespace: eclipse-che repository: https://github.com/eclipse/che-operator support: Eclipse Foundation - name: eclipse-che-preview-openshift.v7.19.0-6.nightly + name: eclipse-che-preview-openshift.v7.19.0-7.nightly namespace: placeholder spec: apiservicedefinitions: {} @@ -435,4 +435,4 @@ spec: maturity: stable provider: name: Eclipse Foundation - version: 7.19.0-6.nightly + version: 7.19.0-7.nightly diff --git a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml index 428af85e3f..5d338c51e4 100644 --- a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml @@ -129,6 +129,14 @@ spec: By default this will be automatically calculated and set by the operator. type: string + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object oAuthClientName: description: Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated @@ -148,6 +156,14 @@ spec: user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.' type: boolean + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object updateAdminPassword: description: Forces the default `admin` Che user to update password on first login. Defaults to `false`. @@ -348,6 +364,9 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator. type: string + devfileRegistryIngressLabels: + description: Additional labels to add into an Ingress + type: string devfileRegistryMemoryLimit: description: Overrides the memory limit used in the Devfile registry deployment. Defaults to 256Mi. @@ -361,6 +380,9 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + devfileRegistryRouteLabels: + description: Additional labels to add into a Route + type: string devfileRegistryUrl: description: Public URL of the Devfile registry, that serves sample, ready-to-use devfiles. You should set it ONLY if you use an external @@ -386,6 +408,14 @@ spec: config map will be propagated to the Che components and provide particular configuration for Git. type: boolean + ingress: + description: Additional labels to add into an Ingress + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object nonProxyHosts: description: List of hosts that should not use the configured proxy. Use `|`` as delimiter, eg `localhost|my.host.com|123.42.12.32` @@ -400,7 +430,10 @@ spec: pluginRegistryImage: description: Overrides the container image used in the Plugin registry deployment. This includes the image tag. Omit it or leave it empty - to use the defaut container image provided by the operator. + to use the default container image provided by the operator. + type: string + pluginRegistryIngressLabels: + description: Additional labels to add into an Ingress type: string pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry @@ -415,6 +448,9 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + pluginRegistryRouteLabels: + description: Additional labels to add into a Route + type: string pluginRegistryUrl: description: Public URL of the Plugin registry, that serves sample ready-to-use devfiles. You should set it ONLY if you use an external @@ -453,6 +489,14 @@ spec: a proxy is required (see also the `proxyURL`, `proxyPassword` and `proxySecret` fields). type: string + route: + description: Additional labels to add into a Route + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object selfSignedCert: description: Deprecated. The value of this flag is ignored. Che operator will automatically detect if router certificate is self-signed. diff --git a/pkg/apis/org/v1/che_types.go b/pkg/apis/org/v1/che_types.go index 342d41d00d..ba2dcd94d9 100644 --- a/pkg/apis/org/v1/che_types.go +++ b/pkg/apis/org/v1/che_types.go @@ -275,10 +275,10 @@ type CheClusterSpecServer struct { SingleHostGatewayConfigMapLabels labels.Set `json:"singleHostGatewayConfigMapLabels,omitempty"` // Additional labels to add into an Ingress // +optional - Ingress CheClusterLabels `json:"ingress,omitempty"` + Ingress CheClusterSpecLabels `json:"ingress,omitempty"` // Additional labels to add into a Route // +optional - Route CheClusterLabels `json:"route,omitempty"` + Route CheClusterSpecLabels `json:"route,omitempty"` } // +k8s:openapi-gen=true @@ -411,15 +411,14 @@ type CheClusterSpecAuth struct { IdentityProviderImagePullPolicy corev1.PullPolicy `json:"identityProviderImagePullPolicy,omitempty"` // Additional labels to add into an Ingress // +optional - Ingress CheClusterLabels `json:"ingress,omitempty"` + Ingress CheClusterSpecLabels `json:"ingress,omitempty"` // Additional labels to add into a Route // +optional - Route CheClusterLabels `json:"route,omitempty"` + Route CheClusterSpecLabels `json:"route,omitempty"` } // +k8s:openapi-gen=true -// Configuration settings related to the persistent storage used by the Che installation. -type CheClusterLabels struct { +type CheClusterSpecLabels struct { // Comma separated list of labels that can be used to organize and categorize (scope and select) objects. // +optional Labels string `json:"labels,omitempty"` diff --git a/pkg/apis/org/v1/zz_generated.deepcopy.go b/pkg/apis/org/v1/zz_generated.deepcopy.go index 93703dc7e0..466b2965fd 100644 --- a/pkg/apis/org/v1/zz_generated.deepcopy.go +++ b/pkg/apis/org/v1/zz_generated.deepcopy.go @@ -37,22 +37,6 @@ func (in *CheCluster) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CheClusterLabels) DeepCopyInto(out *CheClusterLabels) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterLabels. -func (in *CheClusterLabels) DeepCopy() *CheClusterLabels { - if in == nil { - return nil - } - out := new(CheClusterLabels) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterList) DeepCopyInto(out *CheClusterList) { *out = *in @@ -158,6 +142,22 @@ func (in *CheClusterSpecK8SOnly) DeepCopy() *CheClusterSpecK8SOnly { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CheClusterSpecLabels) DeepCopyInto(out *CheClusterSpecLabels) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterSpecLabels. +func (in *CheClusterSpecLabels) DeepCopy() *CheClusterSpecLabels { + if in == nil { + return nil + } + out := new(CheClusterSpecLabels) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecMetrics) DeepCopyInto(out *CheClusterSpecMetrics) { *out = *in diff --git a/pkg/apis/org/v1/zz_generated.openapi.go b/pkg/apis/org/v1/zz_generated.openapi.go index 5d403d3194..2459977245 100644 --- a/pkg/apis/org/v1/zz_generated.openapi.go +++ b/pkg/apis/org/v1/zz_generated.openapi.go @@ -12,11 +12,11 @@ import ( func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { return map[string]common.OpenAPIDefinition{ "github.com/eclipse/che-operator/pkg/apis/org/v1.CheCluster": schema_pkg_apis_org_v1_CheCluster(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels": schema_pkg_apis_org_v1_CheClusterLabels(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpec": schema_pkg_apis_org_v1_CheClusterSpec(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth": schema_pkg_apis_org_v1_CheClusterSpecAuth(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB": schema_pkg_apis_org_v1_CheClusterSpecDB(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly": schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref), + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels": schema_pkg_apis_org_v1_CheClusterSpecLabels(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer": schema_pkg_apis_org_v1_CheClusterSpecServer(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage": schema_pkg_apis_org_v1_CheClusterSpecStorage(ref), } @@ -67,26 +67,6 @@ func schema_pkg_apis_org_v1_CheCluster(ref common.ReferenceCallback) common.Open } } -func schema_pkg_apis_org_v1_CheClusterLabels(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Configuration settings related to the persistent storage used by the Che installation.", - Properties: map[string]spec.Schema{ - "labels": { - SchemaProps: spec.SchemaProps{ - Description: "Comma separated list of labels that can be used to organize and categorize (scope and select) objects.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{}, - } -} - func schema_pkg_apis_org_v1_CheClusterSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -251,20 +231,20 @@ func schema_pkg_apis_org_v1_CheClusterSpecAuth(ref common.ReferenceCallback) com "ingress": { SchemaProps: spec.SchemaProps{ Description: "Additional labels to add into an Ingress", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), }, }, "route": { SchemaProps: spec.SchemaProps{ Description: "Additional labels to add into a Route", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), }, }, }, }, }, Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"}, } } @@ -406,6 +386,25 @@ func schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref common.ReferenceCallback) } } +func schema_pkg_apis_org_v1_CheClusterSpecLabels(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Properties: map[string]spec.Schema{ + "labels": { + SchemaProps: spec.SchemaProps{ + Description: "Comma separated list of labels that can be used to organize and categorize (scope and select) objects.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{}, + } +} + func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -751,20 +750,20 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c "ingress": { SchemaProps: spec.SchemaProps{ Description: "Additional labels to add into an Ingress", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), }, }, "route": { SchemaProps: spec.SchemaProps{ Description: "Additional labels to add into a Route", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"), + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), }, }, }, }, }, Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterLabels"}, + "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"}, } } From cb89455bdfa3d6a112595fb98a07e40a29f53c08 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 10:13:44 +0300 Subject: [PATCH 04/13] Small fixes Signed-off-by: Anatolii Bazko --- pkg/deploy/identity_provider.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/deploy/identity_provider.go b/pkg/deploy/identity_provider.go index 2a4ca73945..c2d780d1d2 100644 --- a/pkg/deploy/identity_provider.go +++ b/pkg/deploy/identity_provider.go @@ -78,7 +78,6 @@ func SyncIdentityProviderToCluster(deployContext *DeployContext, cheHost string, keycloakURL = protocol + "://" + cheHost } else { - logrus.Infof("Deploying Keycloak on %s", host) additionalLabels := deployContext.CheCluster.Spec.Auth.Ingress.Labels ingress, err := SyncIngressToCluster(deployContext, "keycloak", host, "keycloak", 8080, additionalLabels) if !tests { @@ -92,8 +91,6 @@ func SyncIdentityProviderToCluster(deployContext *DeployContext, cheHost string, } } - logrus.Infof("Deployed Keycloak on %s", ingress.Spec.Rules[0].Host) - if err := DeleteGatewayRouteConfig(keycloakGatewayConfig, deployContext); !tests && err != nil { logrus.Error(err) } From bba3772122ffa61e4327b7fefa31b7e5b605e9fd Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 10:42:18 +0300 Subject: [PATCH 05/13] Fixes Signed-off-by: Anatolii Bazko --- pkg/deploy/route.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index c7810255c7..8e3d770eac 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -30,7 +30,7 @@ import ( ) var routeDiffOpts = cmp.Options{ - cmpopts.IgnoreFields(routev1.Route{}, "TypeMeta", "ObjectMeta", "Status"), + cmpopts.IgnoreFields(routev1.Route{}, "TypeMeta", "Status"), cmpopts.IgnoreFields(routev1.RouteSpec{}, "Host", "WildcardPolicy"), cmp.Comparer(func(x, y metav1.ObjectMeta) bool { return reflect.DeepEqual(x.Labels, y.Labels) From eb33303c2f07fd9b4b8916b1a61b431939239344 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 10:57:07 +0300 Subject: [PATCH 06/13] Fixes Signed-off-by: Anatolii Bazko --- pkg/deploy/route.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index 8e3d770eac..b5e34aae46 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -81,11 +81,6 @@ func SyncRouteToCluster( fmt.Printf("Difference:\n%s", diff) err := deployContext.ClusterAPI.Client.Delete(context.TODO(), clusterRoute) - if err != nil { - return nil, err - } - - err = deployContext.ClusterAPI.Client.Create(context.TODO(), specRoute) return nil, err } @@ -136,12 +131,13 @@ func GetSpecRoute( tlsSupport := deployContext.CheCluster.Spec.Server.TlsSupport labels := GetLabels(deployContext.CheCluster, DefaultCheFlavor(deployContext.CheCluster)) - MergeLabels(labels, additionalLabels) - weight := int32(100) - if name == "keycloak" { labels = GetLabels(deployContext.CheCluster, name) } + + MergeLabels(labels, additionalLabels) + weight := int32(100) + targetPort := intstr.IntOrString{ Type: intstr.Int, IntVal: int32(servicePort), From f1631965da6c043bc2375568b355a99e7fe84f89 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 11:30:30 +0300 Subject: [PATCH 07/13] Fixes Signed-off-by: Anatolii Bazko --- pkg/deploy/route.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index b5e34aae46..3bb4bb84a8 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -77,10 +77,12 @@ func SyncRouteToCluster( } diff := cmp.Diff(clusterRoute, specRoute, diffOpts) if len(diff) > 0 { - logrus.Infof("Updating existed object: %s, name: %s", clusterRoute.Kind, clusterRoute.Name) - fmt.Printf("Difference:\n%s", diff) - err := deployContext.ClusterAPI.Client.Delete(context.TODO(), clusterRoute) + if !errors.IsNotFound(err) { + return nil, err + } + + fmt.Printf("Deleting existed object: %s, name: %s.\nDifference:\n%s", clusterRoute.Kind, clusterRoute.Name, diff) return nil, err } @@ -95,7 +97,7 @@ func DeleteRouteIfExists(name string, deployContext *DeployContext) error { if ingress != nil { err = deployContext.ClusterAPI.Client.Delete(context.TODO(), ingress) - if err != nil { + if !errors.IsNotFound(err) { return err } } @@ -134,8 +136,8 @@ func GetSpecRoute( if name == "keycloak" { labels = GetLabels(deployContext.CheCluster, name) } - MergeLabels(labels, additionalLabels) + weight := int32(100) targetPort := intstr.IntOrString{ From dec38b6200215bf67f226b23997662a0952dbd32 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 11:41:59 +0300 Subject: [PATCH 08/13] Fixes Signed-off-by: Anatolii Bazko --- pkg/controller/che/che_controller.go | 4 ++-- pkg/deploy/route.go | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/controller/che/che_controller.go b/pkg/controller/che/che_controller.go index 9a4a488ca7..b1ea24005c 100644 --- a/pkg/controller/che/che_controller.go +++ b/pkg/controller/che/che_controller.go @@ -782,7 +782,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e if err != nil { logrus.Errorf("Error provisioning '%s' to cluster: %v", deploy.DevfileRegistry, err) } - return reconcile.Result{Requeue: true}, err + return reconcile.Result{}, err } } @@ -792,7 +792,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e if err != nil { logrus.Errorf("Error provisioning '%s' to cluster: %v", deploy.PluginRegistry, err) } - return reconcile.Result{Requeue: true}, err + return reconcile.Result{}, err } } diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index 3bb4bb84a8..04b91b7f92 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -77,16 +77,18 @@ func SyncRouteToCluster( } diff := cmp.Diff(clusterRoute, specRoute, diffOpts) if len(diff) > 0 { + logrus.Infof("Deleting existed object: %s, name: %s", clusterRoute.Kind, clusterRoute.Name) + fmt.Printf("Difference:\n%s", diff) + err := deployContext.ClusterAPI.Client.Delete(context.TODO(), clusterRoute) if !errors.IsNotFound(err) { return nil, err } - fmt.Printf("Deleting existed object: %s, name: %s.\nDifference:\n%s", clusterRoute.Kind, clusterRoute.Name, diff) return nil, err } - return clusterRoute, err + return clusterRoute, nil } func DeleteRouteIfExists(name string, deployContext *DeployContext) error { From 88ee7b639715d64acbde50db29b0527580e2cb3f Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 11:49:53 +0300 Subject: [PATCH 09/13] Fixes Signed-off-by: Anatolii Bazko --- pkg/controller/che/che_controller.go | 4 ++-- pkg/deploy/route.go | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pkg/controller/che/che_controller.go b/pkg/controller/che/che_controller.go index b1ea24005c..0397c2512d 100644 --- a/pkg/controller/che/che_controller.go +++ b/pkg/controller/che/che_controller.go @@ -782,7 +782,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e if err != nil { logrus.Errorf("Error provisioning '%s' to cluster: %v", deploy.DevfileRegistry, err) } - return reconcile.Result{}, err + return reconcile.Result{RequeueAfter: time.Second * 1}, err } } @@ -792,7 +792,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e if err != nil { logrus.Errorf("Error provisioning '%s' to cluster: %v", deploy.PluginRegistry, err) } - return reconcile.Result{}, err + return reconcile.Result{RequeueAfter: time.Second * 1}, err } } diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index 04b91b7f92..b6efc546ab 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -77,15 +77,16 @@ func SyncRouteToCluster( } diff := cmp.Diff(clusterRoute, specRoute, diffOpts) if len(diff) > 0 { - logrus.Infof("Deleting existed object: %s, name: %s", clusterRoute.Kind, clusterRoute.Name) - fmt.Printf("Difference:\n%s", diff) - err := deployContext.ClusterAPI.Client.Delete(context.TODO(), clusterRoute) if !errors.IsNotFound(err) { return nil, err } - return nil, err + logrus.Infof("Deleting existed object: %s, name: %s", clusterRoute.Kind, clusterRoute.Name) + logrus.Infof("Difference:\n%s", diff) + fmt.Printf("Difference:\n%s", diff) + + return nil, nil } return clusterRoute, nil From 9108e12f12305638a8e023ef780d2b4cac923d50 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Wed, 23 Sep 2020 12:04:57 +0300 Subject: [PATCH 10/13] Fixes Signed-off-by: Anatolii Bazko --- pkg/deploy/route.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pkg/deploy/route.go b/pkg/deploy/route.go index b6efc546ab..8da9a177cd 100644 --- a/pkg/deploy/route.go +++ b/pkg/deploy/route.go @@ -77,15 +77,14 @@ func SyncRouteToCluster( } diff := cmp.Diff(clusterRoute, specRoute, diffOpts) if len(diff) > 0 { + logrus.Infof("Deleting existed object: %s, name: %s", clusterRoute.Kind, clusterRoute.Name) + fmt.Printf("Difference:\n%s", diff) + err := deployContext.ClusterAPI.Client.Delete(context.TODO(), clusterRoute) if !errors.IsNotFound(err) { return nil, err } - logrus.Infof("Deleting existed object: %s, name: %s", clusterRoute.Kind, clusterRoute.Name) - logrus.Infof("Difference:\n%s", diff) - fmt.Printf("Difference:\n%s", diff) - return nil, nil } From b3281d0eca8f36d4ab2763fe256ca37b62c7f70f Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Fri, 25 Sep 2020 11:40:47 +0300 Subject: [PATCH 11/13] Change structure Signed-off-by: Anatolii Bazko --- deploy/crds/org_v1_che_crd.yaml | 8 ++-- pkg/apis/org/v1/che_types.go | 27 ++++++++----- pkg/apis/org/v1/zz_generated.deepcopy.go | 48 ++++++++++++++++-------- pkg/apis/org/v1/zz_generated.openapi.go | 40 +++++--------------- 4 files changed, 63 insertions(+), 60 deletions(-) diff --git a/deploy/crds/org_v1_che_crd.yaml b/deploy/crds/org_v1_che_crd.yaml index 5d338c51e4..dc9b2efe4a 100644 --- a/deploy/crds/org_v1_che_crd.yaml +++ b/deploy/crds/org_v1_che_crd.yaml @@ -130,7 +130,7 @@ spec: operator. type: string ingress: - description: Additional labels to add into an Ingress + description: Ingress custom settings properties: labels: description: Comma separated list of labels that can be used @@ -157,7 +157,7 @@ spec: the Che Dashboard.' type: boolean route: - description: Additional labels to add into a Route + description: Route custom settings properties: labels: description: Comma separated list of labels that can be used @@ -409,7 +409,7 @@ spec: particular configuration for Git. type: boolean ingress: - description: Additional labels to add into an Ingress + description: Ingress custom settings properties: labels: description: Comma separated list of labels that can be used @@ -490,7 +490,7 @@ spec: and `proxySecret` fields). type: string route: - description: Additional labels to add into a Route + description: Route custom settings properties: labels: description: Comma separated list of labels that can be used diff --git a/pkg/apis/org/v1/che_types.go b/pkg/apis/org/v1/che_types.go index ba2dcd94d9..f4e782ab6d 100644 --- a/pkg/apis/org/v1/che_types.go +++ b/pkg/apis/org/v1/che_types.go @@ -273,12 +273,12 @@ type CheClusterSpecServer struct { // The labels that need to be present (and are put) on the configmaps representing the gateway configuration. // +optional SingleHostGatewayConfigMapLabels labels.Set `json:"singleHostGatewayConfigMapLabels,omitempty"` - // Additional labels to add into an Ingress + // Ingress custom settings // +optional - Ingress CheClusterSpecLabels `json:"ingress,omitempty"` - // Additional labels to add into a Route + Ingress IngressCustomSettings `json:"ingress,omitempty"` + // Route custom settings // +optional - Route CheClusterSpecLabels `json:"route,omitempty"` + Route RouteCustomSettings `json:"route,omitempty"` } // +k8s:openapi-gen=true @@ -409,16 +409,23 @@ type CheClusterSpecAuth struct { // Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. // +optional IdentityProviderImagePullPolicy corev1.PullPolicy `json:"identityProviderImagePullPolicy,omitempty"` - // Additional labels to add into an Ingress + // Ingress custom settings // +optional - Ingress CheClusterSpecLabels `json:"ingress,omitempty"` - // Additional labels to add into a Route + Ingress IngressCustomSettings `json:"ingress,omitempty"` + // Route custom settings // +optional - Route CheClusterSpecLabels `json:"route,omitempty"` + Route RouteCustomSettings `json:"route,omitempty"` } -// +k8s:openapi-gen=true -type CheClusterSpecLabels struct { +// Ingress custom settings, can be extended in the future +type IngressCustomSettings struct { + // Comma separated list of labels that can be used to organize and categorize (scope and select) objects. + // +optional + Labels string `json:"labels,omitempty"` +} + +// Route custom settings, can be extended in the future +type RouteCustomSettings struct { // Comma separated list of labels that can be used to organize and categorize (scope and select) objects. // +optional Labels string `json:"labels,omitempty"` diff --git a/pkg/apis/org/v1/zz_generated.deepcopy.go b/pkg/apis/org/v1/zz_generated.deepcopy.go index 466b2965fd..24462961c5 100644 --- a/pkg/apis/org/v1/zz_generated.deepcopy.go +++ b/pkg/apis/org/v1/zz_generated.deepcopy.go @@ -142,22 +142,6 @@ func (in *CheClusterSpecK8SOnly) DeepCopy() *CheClusterSpecK8SOnly { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CheClusterSpecLabels) DeepCopyInto(out *CheClusterSpecLabels) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CheClusterSpecLabels. -func (in *CheClusterSpecLabels) DeepCopy() *CheClusterSpecLabels { - if in == nil { - return nil - } - out := new(CheClusterSpecLabels) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecMetrics) DeepCopyInto(out *CheClusterSpecMetrics) { *out = *in @@ -237,3 +221,35 @@ func (in *CheClusterStatus) DeepCopy() *CheClusterStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressCustomSettings) DeepCopyInto(out *IngressCustomSettings) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressCustomSettings. +func (in *IngressCustomSettings) DeepCopy() *IngressCustomSettings { + if in == nil { + return nil + } + out := new(IngressCustomSettings) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteCustomSettings) DeepCopyInto(out *RouteCustomSettings) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteCustomSettings. +func (in *RouteCustomSettings) DeepCopy() *RouteCustomSettings { + if in == nil { + return nil + } + out := new(RouteCustomSettings) + in.DeepCopyInto(out) + return out +} diff --git a/pkg/apis/org/v1/zz_generated.openapi.go b/pkg/apis/org/v1/zz_generated.openapi.go index 2459977245..bce66f10f3 100644 --- a/pkg/apis/org/v1/zz_generated.openapi.go +++ b/pkg/apis/org/v1/zz_generated.openapi.go @@ -16,7 +16,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecAuth": schema_pkg_apis_org_v1_CheClusterSpecAuth(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecDB": schema_pkg_apis_org_v1_CheClusterSpecDB(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecK8SOnly": schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref), - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels": schema_pkg_apis_org_v1_CheClusterSpecLabels(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecServer": schema_pkg_apis_org_v1_CheClusterSpecServer(ref), "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecStorage": schema_pkg_apis_org_v1_CheClusterSpecStorage(ref), } @@ -230,21 +229,21 @@ func schema_pkg_apis_org_v1_CheClusterSpecAuth(ref common.ReferenceCallback) com }, "ingress": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into an Ingress", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), + Description: "Ingress custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings"), }, }, "route": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into a Route", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), + Description: "Route custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"), }, }, }, }, }, Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"}, + "github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings", "github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"}, } } @@ -386,25 +385,6 @@ func schema_pkg_apis_org_v1_CheClusterSpecK8SOnly(ref common.ReferenceCallback) } } -func schema_pkg_apis_org_v1_CheClusterSpecLabels(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Properties: map[string]spec.Schema{ - "labels": { - SchemaProps: spec.SchemaProps{ - Description: "Comma separated list of labels that can be used to organize and categorize (scope and select) objects.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{}, - } -} - func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -749,21 +729,21 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c }, "ingress": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into an Ingress", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), + Description: "Ingress custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings"), }, }, "route": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into a Route", - Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"), + Description: "Route custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"), }, }, }, }, }, Dependencies: []string{ - "github.com/eclipse/che-operator/pkg/apis/org/v1.CheClusterSpecLabels"}, + "github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings", "github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"}, } } From 109399061e0a4b77a11eea55a0faf7ac0a5807f6 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Fri, 25 Sep 2020 11:42:44 +0300 Subject: [PATCH 12/13] Update nightly bundle Signed-off-by: Anatolii Bazko --- .../manifests/che-operator.clusterserviceversion.yaml | 6 +++--- .../manifests/org_v1_che_crd.yaml | 8 ++++---- .../manifests/che-operator.clusterserviceversion.yaml | 6 +++--- .../manifests/org_v1_che_crd.yaml | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml index 7ace8aa5e4..432ec49a30 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml @@ -52,13 +52,13 @@ metadata: categories: Developer Tools certified: "false" containerImage: quay.io/eclipse/che-operator:nightly - createdAt: "2020-09-24T08:45:16Z" + createdAt: "2020-09-25T08:42:17Z" description: A Kube-native development solution that delivers portable and collaborative developer workspaces. operatorframework.io/suggested-namespace: eclipse-che repository: https://github.com/eclipse/che-operator support: Eclipse Foundation - name: eclipse-che-preview-kubernetes.v7.19.0-7.nightly + name: eclipse-che-preview-kubernetes.v7.20.0-8.nightly namespace: placeholder spec: apiservicedefinitions: {} @@ -402,4 +402,4 @@ spec: maturity: stable provider: name: Eclipse Foundation - version: 7.19.0-7.nightly + version: 7.20.0-8.nightly diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml index 5d338c51e4..dc9b2efe4a 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml @@ -130,7 +130,7 @@ spec: operator. type: string ingress: - description: Additional labels to add into an Ingress + description: Ingress custom settings properties: labels: description: Comma separated list of labels that can be used @@ -157,7 +157,7 @@ spec: the Che Dashboard.' type: boolean route: - description: Additional labels to add into a Route + description: Route custom settings properties: labels: description: Comma separated list of labels that can be used @@ -409,7 +409,7 @@ spec: particular configuration for Git. type: boolean ingress: - description: Additional labels to add into an Ingress + description: Ingress custom settings properties: labels: description: Comma separated list of labels that can be used @@ -490,7 +490,7 @@ spec: and `proxySecret` fields). type: string route: - description: Additional labels to add into a Route + description: Route custom settings properties: labels: description: Comma separated list of labels that can be used diff --git a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml index ea7d68e2b1..6d31e35e29 100644 --- a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml @@ -49,13 +49,13 @@ metadata: categories: Developer Tools, OpenShift Optional certified: "false" containerImage: quay.io/eclipse/che-operator:nightly - createdAt: "2020-09-24T08:45:16Z" + createdAt: "2020-09-25T08:42:17Z" description: A Kube-native development solution that delivers portable and collaborative developer workspaces in OpenShift. operatorframework.io/suggested-namespace: eclipse-che repository: https://github.com/eclipse/che-operator support: Eclipse Foundation - name: eclipse-che-preview-openshift.v7.19.0-7.nightly + name: eclipse-che-preview-openshift.v7.20.0-8.nightly namespace: placeholder spec: apiservicedefinitions: {} @@ -435,4 +435,4 @@ spec: maturity: stable provider: name: Eclipse Foundation - version: 7.19.0-7.nightly + version: 7.20.0-8.nightly diff --git a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml index 5d338c51e4..dc9b2efe4a 100644 --- a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml @@ -130,7 +130,7 @@ spec: operator. type: string ingress: - description: Additional labels to add into an Ingress + description: Ingress custom settings properties: labels: description: Comma separated list of labels that can be used @@ -157,7 +157,7 @@ spec: the Che Dashboard.' type: boolean route: - description: Additional labels to add into a Route + description: Route custom settings properties: labels: description: Comma separated list of labels that can be used @@ -409,7 +409,7 @@ spec: particular configuration for Git. type: boolean ingress: - description: Additional labels to add into an Ingress + description: Ingress custom settings properties: labels: description: Comma separated list of labels that can be used @@ -490,7 +490,7 @@ spec: and `proxySecret` fields). type: string route: - description: Additional labels to add into a Route + description: Route custom settings properties: labels: description: Comma separated list of labels that can be used From 0d781efe31f81cd4042b9c2214e1eda33c10f07b Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Fri, 25 Sep 2020 12:24:51 +0300 Subject: [PATCH 13/13] Update structures Signed-off-by: Anatolii Bazko --- deploy/crds/org_v1_che_crd.yaml | 108 +++++++++++------- .../che-operator.clusterserviceversion.yaml | 6 +- .../manifests/org_v1_che_crd.yaml | 108 +++++++++++------- .../che-operator.clusterserviceversion.yaml | 6 +- .../manifests/org_v1_che_crd.yaml | 108 +++++++++++------- pkg/apis/org/v1/che_types.go | 28 ++--- pkg/apis/org/v1/zz_generated.deepcopy.go | 12 +- pkg/apis/org/v1/zz_generated.openapi.go | 40 +++---- pkg/controller/che/che_controller.go | 6 +- pkg/deploy/devfile_registry.go | 4 +- pkg/deploy/identity_provider.go | 4 +- pkg/deploy/plugin_registry.go | 4 +- pkg/deploy/tls.go | 2 +- 13 files changed, 248 insertions(+), 188 deletions(-) diff --git a/deploy/crds/org_v1_che_crd.yaml b/deploy/crds/org_v1_che_crd.yaml index dc9b2efe4a..8526bd373d 100644 --- a/deploy/crds/org_v1_che_crd.yaml +++ b/deploy/crds/org_v1_che_crd.yaml @@ -81,6 +81,14 @@ spec: for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + identityProviderIngress: + description: Ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object identityProviderPassword: description: Overrides the password of Keycloak admin user. This is useful to override it ONLY if you use an external Identity @@ -111,6 +119,14 @@ spec: field). If omitted or left blank, it will be set to the value of the `flavour` field. type: string + identityProviderRoute: + description: Route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object identityProviderSecret: description: 'The secret that contains `user` and `password` for Identity Provider. If the secret is defined then `identityProviderAdminUserName` @@ -129,14 +145,6 @@ spec: By default this will be automatically calculated and set by the operator. type: string - ingress: - description: Ingress custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object oAuthClientName: description: Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated @@ -156,14 +164,6 @@ spec: user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.' type: boolean - route: - description: Route custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object updateAdminPassword: description: Forces the default `admin` Che user to update password on first login. Defaults to `false`. @@ -344,6 +344,22 @@ spec: description: 'Log level for the Che server: `INFO` or `DEBUG`. Defaults to `INFO`.' type: string + cheServerIngress: + description: Che server ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + cheServerRoute: + description: Che server route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object cheWorkspaceClusterRole: description: Custom cluster role bound to the user for the Che workspaces. The default roles are used if this is omitted or left blank. @@ -364,9 +380,14 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator. type: string - devfileRegistryIngressLabels: - description: Additional labels to add into an Ingress - type: string + devfileRegistryIngress: + description: Devfile registry ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object devfileRegistryMemoryLimit: description: Overrides the memory limit used in the Devfile registry deployment. Defaults to 256Mi. @@ -380,9 +401,14 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string - devfileRegistryRouteLabels: - description: Additional labels to add into a Route - type: string + devfileRegistryRoute: + description: Devfile registry route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object devfileRegistryUrl: description: Public URL of the Devfile registry, that serves sample, ready-to-use devfiles. You should set it ONLY if you use an external @@ -408,14 +434,6 @@ spec: config map will be propagated to the Che components and provide particular configuration for Git. type: boolean - ingress: - description: Ingress custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object nonProxyHosts: description: List of hosts that should not use the configured proxy. Use `|`` as delimiter, eg `localhost|my.host.com|123.42.12.32` @@ -432,9 +450,14 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the default container image provided by the operator. type: string - pluginRegistryIngressLabels: - description: Additional labels to add into an Ingress - type: string + pluginRegistryIngress: + description: Plugin registry ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry deployment. Defaults to 256Mi. @@ -448,9 +471,14 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string - pluginRegistryRouteLabels: - description: Additional labels to add into a Route - type: string + pluginRegistryRoute: + description: Plugin registry route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object pluginRegistryUrl: description: Public URL of the Plugin registry, that serves sample ready-to-use devfiles. You should set it ONLY if you use an external @@ -489,14 +517,6 @@ spec: a proxy is required (see also the `proxyURL`, `proxyPassword` and `proxySecret` fields). type: string - route: - description: Route custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object selfSignedCert: description: Deprecated. The value of this flag is ignored. Che operator will automatically detect if router certificate is self-signed. diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml index 432ec49a30..740ce0cc31 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/che-operator.clusterserviceversion.yaml @@ -52,13 +52,13 @@ metadata: categories: Developer Tools certified: "false" containerImage: quay.io/eclipse/che-operator:nightly - createdAt: "2020-09-25T08:42:17Z" + createdAt: "2020-09-25T09:17:34Z" description: A Kube-native development solution that delivers portable and collaborative developer workspaces. operatorframework.io/suggested-namespace: eclipse-che repository: https://github.com/eclipse/che-operator support: Eclipse Foundation - name: eclipse-che-preview-kubernetes.v7.20.0-8.nightly + name: eclipse-che-preview-kubernetes.v7.20.0-9.nightly namespace: placeholder spec: apiservicedefinitions: {} @@ -402,4 +402,4 @@ spec: maturity: stable provider: name: Eclipse Foundation - version: 7.20.0-8.nightly + version: 7.20.0-9.nightly diff --git a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml index dc9b2efe4a..8526bd373d 100644 --- a/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-kubernetes/manifests/org_v1_che_crd.yaml @@ -81,6 +81,14 @@ spec: for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + identityProviderIngress: + description: Ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object identityProviderPassword: description: Overrides the password of Keycloak admin user. This is useful to override it ONLY if you use an external Identity @@ -111,6 +119,14 @@ spec: field). If omitted or left blank, it will be set to the value of the `flavour` field. type: string + identityProviderRoute: + description: Route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object identityProviderSecret: description: 'The secret that contains `user` and `password` for Identity Provider. If the secret is defined then `identityProviderAdminUserName` @@ -129,14 +145,6 @@ spec: By default this will be automatically calculated and set by the operator. type: string - ingress: - description: Ingress custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object oAuthClientName: description: Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated @@ -156,14 +164,6 @@ spec: user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.' type: boolean - route: - description: Route custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object updateAdminPassword: description: Forces the default `admin` Che user to update password on first login. Defaults to `false`. @@ -344,6 +344,22 @@ spec: description: 'Log level for the Che server: `INFO` or `DEBUG`. Defaults to `INFO`.' type: string + cheServerIngress: + description: Che server ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + cheServerRoute: + description: Che server route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object cheWorkspaceClusterRole: description: Custom cluster role bound to the user for the Che workspaces. The default roles are used if this is omitted or left blank. @@ -364,9 +380,14 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator. type: string - devfileRegistryIngressLabels: - description: Additional labels to add into an Ingress - type: string + devfileRegistryIngress: + description: Devfile registry ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object devfileRegistryMemoryLimit: description: Overrides the memory limit used in the Devfile registry deployment. Defaults to 256Mi. @@ -380,9 +401,14 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string - devfileRegistryRouteLabels: - description: Additional labels to add into a Route - type: string + devfileRegistryRoute: + description: Devfile registry route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object devfileRegistryUrl: description: Public URL of the Devfile registry, that serves sample, ready-to-use devfiles. You should set it ONLY if you use an external @@ -408,14 +434,6 @@ spec: config map will be propagated to the Che components and provide particular configuration for Git. type: boolean - ingress: - description: Ingress custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object nonProxyHosts: description: List of hosts that should not use the configured proxy. Use `|`` as delimiter, eg `localhost|my.host.com|123.42.12.32` @@ -432,9 +450,14 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the default container image provided by the operator. type: string - pluginRegistryIngressLabels: - description: Additional labels to add into an Ingress - type: string + pluginRegistryIngress: + description: Plugin registry ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry deployment. Defaults to 256Mi. @@ -448,9 +471,14 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string - pluginRegistryRouteLabels: - description: Additional labels to add into a Route - type: string + pluginRegistryRoute: + description: Plugin registry route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object pluginRegistryUrl: description: Public URL of the Plugin registry, that serves sample ready-to-use devfiles. You should set it ONLY if you use an external @@ -489,14 +517,6 @@ spec: a proxy is required (see also the `proxyURL`, `proxyPassword` and `proxySecret` fields). type: string - route: - description: Route custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object selfSignedCert: description: Deprecated. The value of this flag is ignored. Che operator will automatically detect if router certificate is self-signed. diff --git a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml index 6d31e35e29..c9e4c6df60 100644 --- a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/che-operator.clusterserviceversion.yaml @@ -49,13 +49,13 @@ metadata: categories: Developer Tools, OpenShift Optional certified: "false" containerImage: quay.io/eclipse/che-operator:nightly - createdAt: "2020-09-25T08:42:17Z" + createdAt: "2020-09-25T09:17:35Z" description: A Kube-native development solution that delivers portable and collaborative developer workspaces in OpenShift. operatorframework.io/suggested-namespace: eclipse-che repository: https://github.com/eclipse/che-operator support: Eclipse Foundation - name: eclipse-che-preview-openshift.v7.20.0-8.nightly + name: eclipse-che-preview-openshift.v7.20.0-9.nightly namespace: placeholder spec: apiservicedefinitions: {} @@ -435,4 +435,4 @@ spec: maturity: stable provider: name: Eclipse Foundation - version: 7.20.0-8.nightly + version: 7.20.0-9.nightly diff --git a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml index dc9b2efe4a..8526bd373d 100644 --- a/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml +++ b/deploy/olm-catalog/eclipse-che-preview-openshift/manifests/org_v1_che_crd.yaml @@ -81,6 +81,14 @@ spec: for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string + identityProviderIngress: + description: Ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object identityProviderPassword: description: Overrides the password of Keycloak admin user. This is useful to override it ONLY if you use an external Identity @@ -111,6 +119,14 @@ spec: field). If omitted or left blank, it will be set to the value of the `flavour` field. type: string + identityProviderRoute: + description: Route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object identityProviderSecret: description: 'The secret that contains `user` and `password` for Identity Provider. If the secret is defined then `identityProviderAdminUserName` @@ -129,14 +145,6 @@ spec: By default this will be automatically calculated and set by the operator. type: string - ingress: - description: Ingress custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object oAuthClientName: description: Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated @@ -156,14 +164,6 @@ spec: user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.' type: boolean - route: - description: Route custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object updateAdminPassword: description: Forces the default `admin` Che user to update password on first login. Defaults to `false`. @@ -344,6 +344,22 @@ spec: description: 'Log level for the Che server: `INFO` or `DEBUG`. Defaults to `INFO`.' type: string + cheServerIngress: + description: Che server ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object + cheServerRoute: + description: Che server route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object cheWorkspaceClusterRole: description: Custom cluster role bound to the user for the Che workspaces. The default roles are used if this is omitted or left blank. @@ -364,9 +380,14 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the defaut container image provided by the operator. type: string - devfileRegistryIngressLabels: - description: Additional labels to add into an Ingress - type: string + devfileRegistryIngress: + description: Devfile registry ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object devfileRegistryMemoryLimit: description: Overrides the memory limit used in the Devfile registry deployment. Defaults to 256Mi. @@ -380,9 +401,14 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string - devfileRegistryRouteLabels: - description: Additional labels to add into a Route - type: string + devfileRegistryRoute: + description: Devfile registry route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object devfileRegistryUrl: description: Public URL of the Devfile registry, that serves sample, ready-to-use devfiles. You should set it ONLY if you use an external @@ -408,14 +434,6 @@ spec: config map will be propagated to the Che components and provide particular configuration for Git. type: boolean - ingress: - description: Ingress custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object nonProxyHosts: description: List of hosts that should not use the configured proxy. Use `|`` as delimiter, eg `localhost|my.host.com|123.42.12.32` @@ -432,9 +450,14 @@ spec: deployment. This includes the image tag. Omit it or leave it empty to use the default container image provided by the operator. type: string - pluginRegistryIngressLabels: - description: Additional labels to add into an Ingress - type: string + pluginRegistryIngress: + description: Plugin registry ingress custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object pluginRegistryMemoryLimit: description: Overrides the memory limit used in the Plugin registry deployment. Defaults to 256Mi. @@ -448,9 +471,14 @@ spec: registry deployment. Default value is `Always` for `nightly` or `latest` images, and `IfNotPresent` in other cases. type: string - pluginRegistryRouteLabels: - description: Additional labels to add into a Route - type: string + pluginRegistryRoute: + description: Plugin registry route custom settings + properties: + labels: + description: Comma separated list of labels that can be used + to organize and categorize (scope and select) objects. + type: string + type: object pluginRegistryUrl: description: Public URL of the Plugin registry, that serves sample ready-to-use devfiles. You should set it ONLY if you use an external @@ -489,14 +517,6 @@ spec: a proxy is required (see also the `proxyURL`, `proxyPassword` and `proxySecret` fields). type: string - route: - description: Route custom settings - properties: - labels: - description: Comma separated list of labels that can be used - to organize and categorize (scope and select) objects. - type: string - type: object selfSignedCert: description: Deprecated. The value of this flag is ignored. Che operator will automatically detect if router certificate is self-signed. diff --git a/pkg/apis/org/v1/che_types.go b/pkg/apis/org/v1/che_types.go index f4e782ab6d..98e274a474 100644 --- a/pkg/apis/org/v1/che_types.go +++ b/pkg/apis/org/v1/che_types.go @@ -157,12 +157,12 @@ type CheClusterSpecServer struct { // Overrides the memory request used in the Devfile registry deployment. Defaults to 16Mi. // +optional DevfileRegistryMemoryRequest string `json:"devfileRegistryMemoryRequest,omitempty"` - // Additional labels to add into an Ingress + // Devfile registry ingress custom settings // +optional - DevfileRegistryIngressLabels string `json:"devfileRegistryIngressLabels,omitempty"` - // Additional labels to add into a Route + DevfileRegistryIngress IngressCustomSettings `json:"devfileRegistryIngress,omitempty"` + // Devfile registry route custom settings // +optional - DevfileRegistryRouteLabels string `json:"devfileRegistryRouteLabels,omitempty"` + DevfileRegistryRoute RouteCustomSettings `json:"devfileRegistryRoute,omitempty"` // Instructs the operator on whether or not to deploy a dedicated Devfile registry server. // By default a dedicated devfile registry server is started. // But if `externalDevfileRegistry` is `true`, then no such dedicated server will be started by the operator @@ -188,12 +188,12 @@ type CheClusterSpecServer struct { // Overrides the memory request used in the Plugin registry deployment. Defaults to 16Mi. // +optional PluginRegistryMemoryRequest string `json:"pluginRegistryMemoryRequest,omitempty"` - // Additional labels to add into an Ingress + // Plugin registry ingress custom settings // +optional - PluginRegistryIngressLabels string `json:"pluginRegistryIngressLabels,omitempty"` - // Additional labels to add into a Route + PluginRegistryIngress IngressCustomSettings `json:"pluginRegistryIngress,omitempty"` + // Plugin registry route custom settings // +optional - PluginRegistryRouteLabels string `json:"pluginRegistryRouteLabels,omitempty"` + PluginRegistryRoute RouteCustomSettings `json:"pluginRegistryRoute,omitempty"` // Instructs the operator on whether or not to deploy a dedicated Plugin registry server. // By default a dedicated plugin registry server is started. // But if `externalPluginRegistry` is `true`, then no such dedicated server will be started by the operator @@ -273,12 +273,12 @@ type CheClusterSpecServer struct { // The labels that need to be present (and are put) on the configmaps representing the gateway configuration. // +optional SingleHostGatewayConfigMapLabels labels.Set `json:"singleHostGatewayConfigMapLabels,omitempty"` - // Ingress custom settings + // Che server ingress custom settings // +optional - Ingress IngressCustomSettings `json:"ingress,omitempty"` - // Route custom settings + CheServerIngress IngressCustomSettings `json:"cheServerIngress,omitempty"` + // Che server route custom settings // +optional - Route RouteCustomSettings `json:"route,omitempty"` + CheServerRoute RouteCustomSettings `json:"cheServerRoute,omitempty"` } // +k8s:openapi-gen=true @@ -411,10 +411,10 @@ type CheClusterSpecAuth struct { IdentityProviderImagePullPolicy corev1.PullPolicy `json:"identityProviderImagePullPolicy,omitempty"` // Ingress custom settings // +optional - Ingress IngressCustomSettings `json:"ingress,omitempty"` + IdentityProviderIngress IngressCustomSettings `json:"identityProviderIngress,omitempty"` // Route custom settings // +optional - Route RouteCustomSettings `json:"route,omitempty"` + IdentityProviderRoute RouteCustomSettings `json:"identityProviderRoute,omitempty"` } // Ingress custom settings, can be extended in the future diff --git a/pkg/apis/org/v1/zz_generated.deepcopy.go b/pkg/apis/org/v1/zz_generated.deepcopy.go index 24462961c5..3de941451c 100644 --- a/pkg/apis/org/v1/zz_generated.deepcopy.go +++ b/pkg/apis/org/v1/zz_generated.deepcopy.go @@ -95,8 +95,8 @@ func (in *CheClusterSpec) DeepCopy() *CheClusterSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecAuth) DeepCopyInto(out *CheClusterSpecAuth) { *out = *in - out.Ingress = in.Ingress - out.Route = in.Route + out.IdentityProviderIngress = in.IdentityProviderIngress + out.IdentityProviderRoute = in.IdentityProviderRoute return } @@ -161,6 +161,10 @@ func (in *CheClusterSpecMetrics) DeepCopy() *CheClusterSpecMetrics { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CheClusterSpecServer) DeepCopyInto(out *CheClusterSpecServer) { *out = *in + out.DevfileRegistryIngress = in.DevfileRegistryIngress + out.DevfileRegistryRoute = in.DevfileRegistryRoute + out.PluginRegistryIngress = in.PluginRegistryIngress + out.PluginRegistryRoute = in.PluginRegistryRoute if in.CustomCheProperties != nil { in, out := &in.CustomCheProperties, &out.CustomCheProperties *out = make(map[string]string, len(*in)) @@ -175,8 +179,8 @@ func (in *CheClusterSpecServer) DeepCopyInto(out *CheClusterSpecServer) { (*out)[key] = val } } - out.Ingress = in.Ingress - out.Route = in.Route + out.CheServerIngress = in.CheServerIngress + out.CheServerRoute = in.CheServerRoute return } diff --git a/pkg/apis/org/v1/zz_generated.openapi.go b/pkg/apis/org/v1/zz_generated.openapi.go index bce66f10f3..a6a5d0c803 100644 --- a/pkg/apis/org/v1/zz_generated.openapi.go +++ b/pkg/apis/org/v1/zz_generated.openapi.go @@ -227,13 +227,13 @@ func schema_pkg_apis_org_v1_CheClusterSpecAuth(ref common.ReferenceCallback) com Format: "", }, }, - "ingress": { + "identityProviderIngress": { SchemaProps: spec.SchemaProps{ Description: "Ingress custom settings", Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings"), }, }, - "route": { + "identityProviderRoute": { SchemaProps: spec.SchemaProps{ Description: "Route custom settings", Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"), @@ -545,18 +545,16 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c Format: "", }, }, - "devfileRegistryIngressLabels": { + "devfileRegistryIngress": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into an Ingress", - Type: []string{"string"}, - Format: "", + Description: "Devfile registry ingress custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings"), }, }, - "devfileRegistryRouteLabels": { + "devfileRegistryRoute": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into a Route", - Type: []string{"string"}, - Format: "", + Description: "Devfile registry route custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"), }, }, "externalDevfileRegistry": { @@ -601,18 +599,16 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c Format: "", }, }, - "pluginRegistryIngressLabels": { + "pluginRegistryIngress": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into an Ingress", - Type: []string{"string"}, - Format: "", + Description: "Plugin registry ingress custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings"), }, }, - "pluginRegistryRouteLabels": { + "pluginRegistryRoute": { SchemaProps: spec.SchemaProps{ - Description: "Additional labels to add into a Route", - Type: []string{"string"}, - Format: "", + Description: "Plugin registry route custom settings", + Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"), }, }, "externalPluginRegistry": { @@ -727,15 +723,15 @@ func schema_pkg_apis_org_v1_CheClusterSpecServer(ref common.ReferenceCallback) c }, }, }, - "ingress": { + "cheServerIngress": { SchemaProps: spec.SchemaProps{ - Description: "Ingress custom settings", + Description: "Che server ingress custom settings", Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.IngressCustomSettings"), }, }, - "route": { + "cheServerRoute": { SchemaProps: spec.SchemaProps{ - Description: "Route custom settings", + Description: "Che server route custom settings", Ref: ref("github.com/eclipse/che-operator/pkg/apis/org/v1.RouteCustomSettings"), }, }, diff --git a/pkg/controller/che/che_controller.go b/pkg/controller/che/che_controller.go index 0397c2512d..28e31461a3 100644 --- a/pkg/controller/che/che_controller.go +++ b/pkg/controller/che/che_controller.go @@ -720,7 +720,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e exposedServiceName := getServerExposingServiceName(instance) cheHost := "" if !isOpenShift { - additionalLabels := deployContext.CheCluster.Spec.Server.Ingress.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.CheServerIngress.Labels ingress, err := deploy.SyncIngressToCluster(deployContext, cheFlavor, instance.Spec.Server.CheHost, exposedServiceName, 8080, additionalLabels) if !tests { if ingress == nil { @@ -740,7 +740,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e customHost = "" } - additionalLabels := deployContext.CheCluster.Spec.Server.Route.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.CheServerRoute.Labels route, err := deploy.SyncRouteToCluster(deployContext, cheFlavor, customHost, exposedServiceName, 8080, additionalLabels) if !tests { if route == nil { @@ -993,7 +993,7 @@ func EvaluateCheServerVersion(cr *orgv1.CheCluster) string { func getDefaultCheHost(deployContext *deploy.DeployContext) (string, error) { routeName := deploy.DefaultCheFlavor(deployContext.CheCluster) - additionalLabels := deployContext.CheCluster.Spec.Server.Route.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.CheServerRoute.Labels route, err := deploy.SyncRouteToCluster(deployContext, routeName, "", getServerExposingServiceName(deployContext.CheCluster), 8080, additionalLabels) if route == nil { logrus.Infof("Waiting on route '%s' to be ready", routeName) diff --git a/pkg/deploy/devfile_registry.go b/pkg/deploy/devfile_registry.go index 38828f3ecd..a5ddbef57b 100644 --- a/pkg/deploy/devfile_registry.go +++ b/pkg/deploy/devfile_registry.go @@ -67,7 +67,7 @@ func SyncDevfileRegistryToCluster(deployContext *DeployContext, cheHost string) logrus.Error(err) } } else { - additionalLabels := deployContext.CheCluster.Spec.Server.DevfileRegistryIngressLabels + additionalLabels := deployContext.CheCluster.Spec.Server.DevfileRegistryIngress.Labels ingress, err := SyncIngressToCluster(deployContext, DevfileRegistry, domain, DevfileRegistry, 8080, additionalLabels) if !util.IsTestMode() { if ingress == nil { @@ -99,7 +99,7 @@ func SyncDevfileRegistryToCluster(deployContext *DeployContext, cheHost string) } } else { // the empty string for a host is intentional here - we let OpenShift decide on the hostname - additionalLabels := deployContext.CheCluster.Spec.Server.DevfileRegistryRouteLabels + additionalLabels := deployContext.CheCluster.Spec.Server.DevfileRegistryRoute.Labels route, err := SyncRouteToCluster(deployContext, DevfileRegistry, "", DevfileRegistry, 8080, additionalLabels) if !util.IsTestMode() { if route == nil { diff --git a/pkg/deploy/identity_provider.go b/pkg/deploy/identity_provider.go index c2d780d1d2..9f2f61013f 100644 --- a/pkg/deploy/identity_provider.go +++ b/pkg/deploy/identity_provider.go @@ -78,7 +78,7 @@ func SyncIdentityProviderToCluster(deployContext *DeployContext, cheHost string, keycloakURL = protocol + "://" + cheHost } else { - additionalLabels := deployContext.CheCluster.Spec.Auth.Ingress.Labels + additionalLabels := deployContext.CheCluster.Spec.Auth.IdentityProviderIngress.Labels ingress, err := SyncIngressToCluster(deployContext, "keycloak", host, "keycloak", 8080, additionalLabels) if !tests { if ingress == nil { @@ -113,7 +113,7 @@ func SyncIdentityProviderToCluster(deployContext *DeployContext, cheHost string, } } else { // create Keycloak route - additionalLabels := deployContext.CheCluster.Spec.Auth.Route.Labels + additionalLabels := deployContext.CheCluster.Spec.Auth.IdentityProviderRoute.Labels route, err := SyncRouteToCluster(deployContext, "keycloak", "", "keycloak", 8080, additionalLabels) if !tests { if route == nil { diff --git a/pkg/deploy/plugin_registry.go b/pkg/deploy/plugin_registry.go index 19cfdc0e2e..add18a8d6a 100644 --- a/pkg/deploy/plugin_registry.go +++ b/pkg/deploy/plugin_registry.go @@ -67,7 +67,7 @@ func SyncPluginRegistryToCluster(deployContext *DeployContext, cheHost string) ( logrus.Error(err) } } else { - additionalLabels := deployContext.CheCluster.Spec.Server.PluginRegistryIngressLabels + additionalLabels := deployContext.CheCluster.Spec.Server.PluginRegistryIngress.Labels ingress, err := SyncIngressToCluster(deployContext, PluginRegistry, domain, PluginRegistry, 8080, additionalLabels) if !util.IsTestMode() { if ingress == nil { @@ -99,7 +99,7 @@ func SyncPluginRegistryToCluster(deployContext *DeployContext, cheHost string) ( } } else { // the empty string for a host is intentional here - we let OpenShift decide on the hostname - additionalLabels := deployContext.CheCluster.Spec.Server.PluginRegistryRouteLabels + additionalLabels := deployContext.CheCluster.Spec.Server.PluginRegistryRoute.Labels route, err := SyncRouteToCluster(deployContext, PluginRegistry, "", PluginRegistry, 8080, additionalLabels) if !util.IsTestMode() { if route == nil { diff --git a/pkg/deploy/tls.go b/pkg/deploy/tls.go index b110c70f93..fd32bbd5bb 100644 --- a/pkg/deploy/tls.go +++ b/pkg/deploy/tls.go @@ -112,7 +112,7 @@ func GetEndpointTLSCrtChain(deployContext *DeployContext, endpointURL string) ([ if isTestRoute { // Create test route to get certificates chain. // Note, it is not possible to use SyncRouteToCluster here as it may cause infinite reconcile loop. - additionalLabels := deployContext.CheCluster.Spec.Server.Route.Labels + additionalLabels := deployContext.CheCluster.Spec.Server.CheServerRoute.Labels routeSpec, err := GetSpecRoute(deployContext, "test", "", "test", 8080, additionalLabels) if err != nil { return nil, err