diff --git a/submarine-cloud-v3/config/crd/bases/submarine.apache.org_submarines.yaml b/submarine-cloud-v3/config/crd/bases/submarine.apache.org_submarines.yaml index 3db3c6b5a..8db47fbc0 100644 --- a/submarine-cloud-v3/config/crd/bases/submarine.apache.org_submarines.yaml +++ b/submarine-cloud-v3/config/crd/bases/submarine.apache.org_submarines.yaml @@ -1,20 +1,3 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition diff --git a/submarine-cloud-v3/config/rbac/role.yaml b/submarine-cloud-v3/config/rbac/role.yaml index 7384f94b4..76d56ef3e 100644 --- a/submarine-cloud-v3/config/rbac/role.yaml +++ b/submarine-cloud-v3/config/rbac/role.yaml @@ -1,20 +1,3 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole diff --git a/submarine-cloud-v3/controllers/submarine_controller.go b/submarine-cloud-v3/controllers/submarine_controller.go index fa334c8f6..7ee71b26e 100644 --- a/submarine-cloud-v3/controllers/submarine_controller.go +++ b/submarine-cloud-v3/controllers/submarine_controller.go @@ -65,6 +65,7 @@ const ( observerRbacYamlPath = artifactPath + "submarine-observer-rbac.yaml" storageRbacYamlPath = artifactPath + "submarine-storage-rbac.yaml" virtualServiceYamlPath = artifactPath + "submarine-virtualservice.yaml" + appVersion = "0.8.0-SNAPSHOT" ) // Name of deployments whose replica count and readiness need to be checked diff --git a/submarine-cloud-v3/controllers/submarine_database.go b/submarine-cloud-v3/controllers/submarine_database.go index 91e48aa8a..f31f42bd4 100644 --- a/submarine-cloud-v3/controllers/submarine_database.go +++ b/submarine-cloud-v3/controllers/submarine_database.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var databaseAdditionalLabels = map[string]string{"app.kubernetes.io/name": databaseName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "database"} + func (r *SubmarineReconciler) newSubmarineDatabasePersistentVolumeClaim(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *corev1.PersistentVolumeClaim { pvc, err := ParsePersistentVolumeClaimYaml(databaseYamlPath) if err != nil { r.Log.Error(err, "ParsePersistentVolumeClaimYaml") } pvc.Namespace = submarine.Namespace + pvcLabels := pvc.GetLabels() + if pvcLabels == nil { + pvc.SetLabels(make(map[string]string)) + pvcLabels = pvc.GetLabels() + } + for k, v := range databaseAdditionalLabels { + pvcLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, pvc, r.Scheme) if err != nil { r.Log.Error(err, "Set PVC ControllerReference") @@ -52,6 +62,20 @@ func (r *SubmarineReconciler) newSubmarineDatabaseStatefulSet(ctx context.Contex } statefulset.Namespace = submarine.Namespace + statefulsetLabels := statefulset.GetLabels() + if statefulsetLabels == nil { + statefulset.SetLabels(make(map[string]string)) + statefulsetLabels = statefulset.GetLabels() + } + podLabels := statefulset.Spec.Template.GetLabels() + if podLabels == nil { + statefulset.Spec.Template.SetLabels(make(map[string]string)) + podLabels = statefulset.Spec.Template.GetLabels() + } + for k, v := range databaseAdditionalLabels { + statefulsetLabels[k] = v + podLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, statefulset, r.Scheme) if err != nil { r.Log.Error(err, "Set Stateful Set ControllerReference") @@ -71,6 +95,14 @@ func (r *SubmarineReconciler) newSubmarineDatabaseService(ctx context.Context, s r.Log.Error(err, "ParseServiceYaml") } service.Namespace = submarine.Namespace + serviceLabels := service.GetLabels() + if serviceLabels == nil { + service.SetLabels(make(map[string]string)) + serviceLabels = service.GetLabels() + } + for k, v := range databaseAdditionalLabels { + serviceLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, service, r.Scheme) if err != nil { r.Log.Error(err, "Set Service ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_minio.go b/submarine-cloud-v3/controllers/submarine_minio.go index b5d5e8d61..bebfb5fa9 100644 --- a/submarine-cloud-v3/controllers/submarine_minio.go +++ b/submarine-cloud-v3/controllers/submarine_minio.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var minioAdditionalLabels = map[string]string{"app.kubernetes.io/name": minioName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "minio"} + func (r *SubmarineReconciler) newSubmarineMinioPersistentVolumeClaim(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *corev1.PersistentVolumeClaim { pvc, err := ParsePersistentVolumeClaimYaml(minioYamlPath) if err != nil { r.Log.Error(err, "ParsePersistentVolumeClaimYaml") } pvc.Namespace = submarine.Namespace + pvcLabels := pvc.GetLabels() + if pvcLabels == nil { + pvc.SetLabels(make(map[string]string)) + pvcLabels = pvc.GetLabels() + } + for k, v := range minioAdditionalLabels { + pvcLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, pvc, r.Scheme) if err != nil { r.Log.Error(err, "Set PersistentVolumeClaim ControllerReference") @@ -51,6 +61,20 @@ func (r *SubmarineReconciler) newSubmarineMinioDeployment(ctx context.Context, s r.Log.Error(err, "ParseDeploymentYaml") } deployment.Namespace = submarine.Namespace + deploymentLabels := deployment.GetLabels() + if deploymentLabels == nil { + deployment.SetLabels(make(map[string]string)) + deploymentLabels = deployment.GetLabels() + } + podLabels := deployment.Spec.Template.GetLabels() + if podLabels == nil { + deployment.Spec.Template.SetLabels(make(map[string]string)) + podLabels = deployment.Spec.Template.GetLabels() + } + for k, v := range minioAdditionalLabels { + deploymentLabels[k] = v + podLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, deployment, r.Scheme) if err != nil { r.Log.Error(err, "Set Deployment ControllerReference") @@ -64,6 +88,14 @@ func (r *SubmarineReconciler) newSubmarineMinioService(ctx context.Context, subm r.Log.Error(err, "ParseServiceYaml") } service.Namespace = submarine.Namespace + serviceLabels := service.GetLabels() + if serviceLabels == nil { + service.SetLabels(make(map[string]string)) + serviceLabels = service.GetLabels() + } + for k, v := range minioAdditionalLabels { + serviceLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, service, r.Scheme) if err != nil { r.Log.Error(err, "Set Service ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_mlflow.go b/submarine-cloud-v3/controllers/submarine_mlflow.go index 5a3457766..1214f3d2a 100644 --- a/submarine-cloud-v3/controllers/submarine_mlflow.go +++ b/submarine-cloud-v3/controllers/submarine_mlflow.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var mlflowAdditionalLabels = map[string]string{"app.kubernetes.io/name": mlflowName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "mlflow"} + func (r *SubmarineReconciler) newSubmarineMlflowPersistentVolumeClaim(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *corev1.PersistentVolumeClaim { pvc, err := ParsePersistentVolumeClaimYaml(mlflowYamlPath) if err != nil { r.Log.Error(err, "ParsePersistentVolumeClaimYaml") } pvc.Namespace = submarine.Namespace + pvcLabels := pvc.GetLabels() + if pvcLabels == nil { + pvc.SetLabels(make(map[string]string)) + pvcLabels = pvc.GetLabels() + } + for k, v := range mlflowAdditionalLabels { + pvcLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, pvc, r.Scheme) if err != nil { r.Log.Error(err, "Set PersistentVolumeClaim ControllerReference") @@ -51,6 +61,20 @@ func (r *SubmarineReconciler) newSubmarineMlflowDeployment(ctx context.Context, r.Log.Error(err, "ParseDeploymentYaml") } deployment.Namespace = submarine.Namespace + deploymentLabels := deployment.GetLabels() + if deploymentLabels == nil { + deployment.SetLabels(make(map[string]string)) + deploymentLabels = deployment.GetLabels() + } + podLabels := deployment.Spec.Template.GetLabels() + if podLabels == nil { + deployment.Spec.Template.SetLabels(make(map[string]string)) + podLabels = deployment.Spec.Template.GetLabels() + } + for k, v := range mlflowAdditionalLabels { + deploymentLabels[k] = v + podLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, deployment, r.Scheme) if err != nil { r.Log.Error(err, "Set Deployment ControllerReference") @@ -64,6 +88,14 @@ func (r *SubmarineReconciler) newSubmarineMlflowService(ctx context.Context, sub r.Log.Error(err, "ParseServiceYaml") } service.Namespace = submarine.Namespace + serviceLabels := service.GetLabels() + if serviceLabels == nil { + service.SetLabels(make(map[string]string)) + serviceLabels = service.GetLabels() + } + for k, v := range mlflowAdditionalLabels { + serviceLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, service, r.Scheme) if err != nil { r.Log.Error(err, "Set Service ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_observer_rbac.go b/submarine-cloud-v3/controllers/submarine_observer_rbac.go index b1126b7b5..157595f3b 100644 --- a/submarine-cloud-v3/controllers/submarine_observer_rbac.go +++ b/submarine-cloud-v3/controllers/submarine_observer_rbac.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var observerAdditionalLabels = map[string]string{"app.kubernetes.io/name": observerName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "observer"} + func (r *SubmarineReconciler) newSubmarineObserverRole(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *rbacv1.Role { role, err := ParseRoleYaml(observerRbacYamlPath) if err != nil { r.Log.Error(err, "ParseRoleYaml") } role.Namespace = submarine.Namespace + roleLabels := role.GetLabels() + if roleLabels == nil { + role.SetLabels(make(map[string]string)) + roleLabels = role.GetLabels() + } + for k, v := range observerAdditionalLabels { + roleLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, role, r.Scheme) if err != nil { r.Log.Error(err, "Set Role ControllerReference") @@ -51,6 +61,14 @@ func (r *SubmarineReconciler) newSubmarineObserverRoleBinding(ctx context.Contex r.Log.Error(err, "Set RoleBinding ControllerReference") } roleBinding.Namespace = submarine.Namespace + roleBindingLabels := roleBinding.GetLabels() + if roleBindingLabels == nil { + roleBinding.SetLabels(make(map[string]string)) + roleBindingLabels = roleBinding.GetLabels() + } + for k, v := range observerAdditionalLabels { + roleBindingLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, roleBinding, r.Scheme) if err != nil { r.Log.Error(err, "Set RoleBinding ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_server.go b/submarine-cloud-v3/controllers/submarine_server.go index f02e13ec6..69eced46e 100644 --- a/submarine-cloud-v3/controllers/submarine_server.go +++ b/submarine-cloud-v3/controllers/submarine_server.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var serverAdditionalLabels = map[string]string{"app.kubernetes.io/name": serverName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "server"} + func (r *SubmarineReconciler) newSubmarineServerServiceAccount(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *corev1.ServiceAccount { serviceAccount, err := ParseServiceAccountYaml(serverYamlPath) if err != nil { r.Log.Error(err, "ParseServiceAccountYaml") } serviceAccount.Namespace = submarine.Namespace + serviceAccountLabels := serviceAccount.GetLabels() + if serviceAccountLabels == nil { + serviceAccount.SetLabels(make(map[string]string)) + serviceAccountLabels = serviceAccount.GetLabels() + } + for k, v := range serverAdditionalLabels { + serviceAccountLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, serviceAccount, r.Scheme) if err != nil { r.Log.Error(err, "Set ServiceAccount ControllerReference") @@ -51,6 +61,14 @@ func (r *SubmarineReconciler) newSubmarineServerService(ctx context.Context, sub r.Log.Error(err, "ParseServiceYaml") } service.Namespace = submarine.Namespace + serviceLabels := service.GetLabels() + if serviceLabels == nil { + service.SetLabels(make(map[string]string)) + serviceLabels = service.GetLabels() + } + for k, v := range serverAdditionalLabels { + serviceLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, service, r.Scheme) if err != nil { r.Log.Error(err, "Set Service ControllerReference") @@ -92,6 +110,20 @@ func (r *SubmarineReconciler) newSubmarineServerDeployment(ctx context.Context, r.Log.Error(err, "ParseDeploymentYaml") } deployment.Namespace = submarine.Namespace + deploymentLabels := deployment.GetLabels() + if deploymentLabels == nil { + deployment.SetLabels(make(map[string]string)) + deploymentLabels = deployment.GetLabels() + } + podLabels := deployment.Spec.Template.GetLabels() + if podLabels == nil { + deployment.Spec.Template.SetLabels(make(map[string]string)) + podLabels = deployment.Spec.Template.GetLabels() + } + for k, v := range serverAdditionalLabels { + deploymentLabels[k] = v + podLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, deployment, r.Scheme) if err != nil { r.Log.Error(err, "Set Deployment ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_server_rbac.go b/submarine-cloud-v3/controllers/submarine_server_rbac.go index 653361210..ce9fd8a97 100644 --- a/submarine-cloud-v3/controllers/submarine_server_rbac.go +++ b/submarine-cloud-v3/controllers/submarine_server_rbac.go @@ -38,6 +38,14 @@ func (r *SubmarineReconciler) newSubmarineServerRole(ctx context.Context, submar r.Log.Error(err, "ParseRoleYaml") } role.Namespace = submarine.Namespace + roleLabels := role.GetLabels() + if roleLabels == nil { + role.SetLabels(make(map[string]string)) + roleLabels = role.GetLabels() + } + for k, v := range serverAdditionalLabels { + roleLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, role, r.Scheme) if err != nil { r.Log.Error(err, "Set Role ControllerReference") @@ -61,6 +69,14 @@ func (r *SubmarineReconciler) newSubmarineServerRoleBinding(ctx context.Context, r.Log.Error(err, "Set RoleBinding ControllerReference") } roleBinding.Namespace = submarine.Namespace + roleBindingLabels := roleBinding.GetLabels() + if roleBindingLabels == nil { + roleBinding.SetLabels(make(map[string]string)) + roleBindingLabels = roleBinding.GetLabels() + } + for k, v := range serverAdditionalLabels { + roleBindingLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, roleBinding, r.Scheme) if err != nil { r.Log.Error(err, "Set RoleBinding ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_storage_rbac.go b/submarine-cloud-v3/controllers/submarine_storage_rbac.go index 7a6d2234b..112545b10 100644 --- a/submarine-cloud-v3/controllers/submarine_storage_rbac.go +++ b/submarine-cloud-v3/controllers/submarine_storage_rbac.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var storageAdditionalLabels = map[string]string{"app.kubernetes.io/name": storageName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "storage"} + func (r *SubmarineReconciler) newSubmarineStorageRole(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *rbacv1.Role { role, err := ParseRoleYaml(storageRbacYamlPath) if err != nil { r.Log.Error(err, "ParseRoleYaml") } role.Namespace = submarine.Namespace + roleLabels := role.GetLabels() + if roleLabels == nil { + role.SetLabels(make(map[string]string)) + roleLabels = role.GetLabels() + } + for k, v := range storageAdditionalLabels { + roleLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, role, r.Scheme) if err != nil { r.Log.Error(err, "Set Role ControllerReference") @@ -59,6 +69,14 @@ func (r *SubmarineReconciler) newSubmarineStorageRoleBinding(ctx context.Context r.Log.Error(err, "Set RoleBinding ControllerReference") } roleBinding.Namespace = submarine.Namespace + roleBindingLabels := roleBinding.GetLabels() + if roleBindingLabels == nil { + roleBinding.SetLabels(make(map[string]string)) + roleBindingLabels = roleBinding.GetLabels() + } + for k, v := range storageAdditionalLabels { + roleBindingLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, roleBinding, r.Scheme) if err != nil { r.Log.Error(err, "Set RoleBinding ControllerReference") @@ -72,6 +90,14 @@ func (r *SubmarineReconciler) newSubmarineStorageServiceAccount(ctx context.Cont r.Log.Error(err, "ParseServiceAccountYaml") } serviceAccount.Namespace = submarine.Namespace + serviceAccountLabels := serviceAccount.GetLabels() + if serviceAccountLabels == nil { + serviceAccount.SetLabels(make(map[string]string)) + serviceAccountLabels = serviceAccount.GetLabels() + } + for k, v := range storageAdditionalLabels { + serviceAccountLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, serviceAccount, r.Scheme) if err != nil { r.Log.Error(err, "Set ServiceAccount ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_tensorboard.go b/submarine-cloud-v3/controllers/submarine_tensorboard.go index 898740fd5..a92e86550 100644 --- a/submarine-cloud-v3/controllers/submarine_tensorboard.go +++ b/submarine-cloud-v3/controllers/submarine_tensorboard.go @@ -32,12 +32,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var tensorboardAdditionalLabels = map[string]string{"app.kubernetes.io/name": tensorboardName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "tensorboard"} + func (r *SubmarineReconciler) newSubmarineTensorboardPersistentVolumeClaim(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *corev1.PersistentVolumeClaim { pvc, err := ParsePersistentVolumeClaimYaml(tensorboardYamlPath) if err != nil { r.Log.Error(err, "ParsePersistentVolumeClaimYaml") } pvc.Namespace = submarine.Namespace + pvcLabels := pvc.GetLabels() + if pvcLabels == nil { + pvc.SetLabels(make(map[string]string)) + pvcLabels = pvc.GetLabels() + } + for k, v := range tensorboardAdditionalLabels { + pvcLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, pvc, r.Scheme) if err != nil { r.Log.Error(err, "Set PersistentVolumeClaim ControllerReference") @@ -51,6 +61,20 @@ func (r *SubmarineReconciler) newSubmarineTensorboardDeployment(ctx context.Cont r.Log.Error(err, "ParseDeploymentYaml") } deployment.Namespace = submarine.Namespace + deploymentLabels := deployment.GetLabels() + if deploymentLabels == nil { + deployment.SetLabels(make(map[string]string)) + deploymentLabels = deployment.GetLabels() + } + podLabels := deployment.Spec.Template.GetLabels() + if podLabels == nil { + deployment.Spec.Template.SetLabels(make(map[string]string)) + podLabels = deployment.Spec.Template.GetLabels() + } + for k, v := range tensorboardAdditionalLabels { + deploymentLabels[k] = v + podLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, deployment, r.Scheme) if err != nil { r.Log.Error(err, "Set Deployment ControllerReference") @@ -64,6 +88,14 @@ func (r *SubmarineReconciler) newSubmarineTensorboardService(ctx context.Context r.Log.Error(err, "ParseServiceYaml") } service.Namespace = submarine.Namespace + serviceLabels := service.GetLabels() + if serviceLabels == nil { + service.SetLabels(make(map[string]string)) + serviceLabels = service.GetLabels() + } + for k, v := range tensorboardAdditionalLabels { + serviceLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, service, r.Scheme) if err != nil { r.Log.Error(err, "Set Service ControllerReference") diff --git a/submarine-cloud-v3/controllers/submarine_virtualservice.go b/submarine-cloud-v3/controllers/submarine_virtualservice.go index 2158817e9..278fe60da 100644 --- a/submarine-cloud-v3/controllers/submarine_virtualservice.go +++ b/submarine-cloud-v3/controllers/submarine_virtualservice.go @@ -33,12 +33,22 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) +var virtualServiceAdditionalLabels = map[string]string{"app.kubernetes.io/name": virtualServiceName, "app.kubernetes.io/version": appVersion, "app.kubernetes.io/component": "virtual-service"} + func (r *SubmarineReconciler) newSubmarineVirtualService(ctx context.Context, submarine *submarineapacheorgv1alpha1.Submarine) *istiov1alpha3.VirtualService { virtualService, err := ParseVirtualService(virtualServiceYamlPath) if err != nil { r.Log.Error(err, "ParseVirtualService") } virtualService.Namespace = submarine.Namespace + virtualServiceLabels := virtualService.GetLabels() + if virtualServiceLabels == nil { + virtualService.SetLabels(make(map[string]string)) + virtualServiceLabels = virtualService.GetLabels() + } + for k, v := range virtualServiceAdditionalLabels { + virtualServiceLabels[k] = v + } err = controllerutil.SetControllerReference(submarine, virtualService, r.Scheme) if err != nil { r.Log.Error(err, "Set VirtualService ControllerReference")