1060 lines
38 KiB
Go
1060 lines
38 KiB
Go
/*
|
|
Copyright 2021 The Karmada Authors.
|
|
|
|
Licensed 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.
|
|
*/
|
|
|
|
package base
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/onsi/ginkgo/v2"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
|
"k8s.io/apimachinery/pkg/util/rand"
|
|
"k8s.io/klog/v2"
|
|
|
|
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
|
|
"github.com/karmada-io/karmada/test/e2e/framework"
|
|
"github.com/karmada-io/karmada/test/helper"
|
|
)
|
|
|
|
var _ = ginkgo.Describe("[OverridePolicy] apply overriders testing", func() {
|
|
var propagationPolicyNamespace, propagationPolicyName string
|
|
var overridePolicyNamespace, overridePolicyName string
|
|
var propagationPolicy *policyv1alpha1.PropagationPolicy
|
|
var overridePolicy *policyv1alpha1.OverridePolicy
|
|
|
|
ginkgo.Context("[LabelsOverrider] apply labels overrider testing", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var deployment *appsv1.Deployment
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
deployment.SetLabels(map[string]string{
|
|
"foo": "foo",
|
|
"bar": "bar"},
|
|
)
|
|
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
LabelsOverrider: []policyv1alpha1.LabelAnnotationOverrider{
|
|
{
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: map[string]string{
|
|
"foo": "exist",
|
|
"non-exist": "non-exist",
|
|
},
|
|
},
|
|
{
|
|
Operator: policyv1alpha1.OverriderOpAdd,
|
|
Value: map[string]string{
|
|
"app": "nginx",
|
|
},
|
|
},
|
|
{
|
|
Operator: policyv1alpha1.OverriderOpRemove,
|
|
Value: map[string]string{
|
|
"bar": "bar",
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment labelsOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct labels value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
_, labelBarExist := deployment.GetLabels()["bar"]
|
|
_, labelNonExist := deployment.GetLabels()["non-exist"]
|
|
return !labelBarExist && !labelNonExist &&
|
|
deployment.GetLabels()["foo"] == "exist" &&
|
|
deployment.GetLabels()["app"] == "nginx"
|
|
})
|
|
})
|
|
})
|
|
ginkgo.Context("[AnnotationsOverrider] apply annotations overrider testing", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var deployment *appsv1.Deployment
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
deployment.SetAnnotations(map[string]string{
|
|
"foo": "foo",
|
|
"bar": "bar"},
|
|
)
|
|
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
AnnotationsOverrider: []policyv1alpha1.LabelAnnotationOverrider{
|
|
{
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: map[string]string{
|
|
"foo": "exist",
|
|
"non-exist": "non-exist",
|
|
},
|
|
},
|
|
{
|
|
Operator: policyv1alpha1.OverriderOpAdd,
|
|
Value: map[string]string{
|
|
"app": "nginx",
|
|
},
|
|
},
|
|
{
|
|
Operator: policyv1alpha1.OverriderOpRemove,
|
|
Value: map[string]string{
|
|
"bar": "bar",
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment annotationsOverrider testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct annotations value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
_, labelBarExist := deployment.GetAnnotations()["bar"]
|
|
_, labelNonExist := deployment.GetAnnotations()["non-exist"]
|
|
return !labelBarExist && !labelNonExist &&
|
|
deployment.GetAnnotations()["foo"] == "exist" &&
|
|
deployment.GetAnnotations()["app"] == "nginx"
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Deployment override all images in container list", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var deployment *appsv1.Deployment
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "1.0",
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct image value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
for _, container := range deployment.Spec.Template.Spec.Containers {
|
|
if container.Image != "fictional.registry.us/busybox:1.0" {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Pod override all images in container list", func() {
|
|
var podNamespace, podName string
|
|
var pod *corev1.Pod
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
podNamespace = testNamespace
|
|
podName = podNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = podName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = podName
|
|
|
|
pod = helper.NewPod(podNamespace, podName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: pod.APIVersion,
|
|
Kind: pod.Kind,
|
|
Name: pod.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: pod.APIVersion,
|
|
Kind: pod.Kind,
|
|
Name: pod.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "1.0",
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreatePod(kubeClient, pod)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemovePod(kubeClient, pod.Namespace, pod.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("pod imageOverride testing", func() {
|
|
klog.Infof("check if pod present on member clusters have correct image value")
|
|
framework.WaitPodPresentOnClustersFitWith(framework.ClusterNames(), pod.Namespace, pod.Name, func(pod *corev1.Pod) bool {
|
|
for _, container := range pod.Spec.Containers {
|
|
if container.Image != "fictional.registry.us/busybox:1.0" {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Deployment override specific images in container list", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var deployment *appsv1.Deployment
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Predicate: &policyv1alpha1.ImagePredicate{
|
|
Path: "/spec/template/spec/containers/0/image",
|
|
},
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct image value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return deployment.Spec.Template.Spec.Containers[0].Image == "fictional.registry.us/nginx:1.19.0"
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("[FieldOverrider] apply field overrider testing to update JSON values in ConfigMap", func() {
|
|
var configMapNamespace, configMapName string
|
|
var configMap *corev1.ConfigMap
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
configMapNamespace = testNamespace
|
|
configMapName = configMapNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = configMapName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = configMapName
|
|
|
|
configMapData := map[string]string{
|
|
"deploy.json": fmt.Sprintf(`{
|
|
"apiVersion": "apps/v1",
|
|
"kind": "Deployment",
|
|
"metadata": {
|
|
"name": "nginx-deploy",
|
|
"namespace": "%s"
|
|
},
|
|
"spec": {
|
|
"replicas": 3,
|
|
"selector": {
|
|
"matchLabels": {
|
|
"app": "nginx"
|
|
}
|
|
},
|
|
"template": {
|
|
"metadata": {
|
|
"labels": {
|
|
"app": "nginx"
|
|
}
|
|
},
|
|
"spec": {
|
|
"containers": [
|
|
{
|
|
"name": "nginx",
|
|
"image": "nginx:1.19.0"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}`, configMapNamespace),
|
|
}
|
|
|
|
configMap = helper.NewConfigMap(configMapNamespace, configMapName, configMapData)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: configMap.APIVersion,
|
|
Kind: configMap.Kind,
|
|
Name: configMap.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: configMap.APIVersion,
|
|
Kind: configMap.Kind,
|
|
Name: configMap.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
FieldOverrider: []policyv1alpha1.FieldOverrider{
|
|
{
|
|
FieldPath: "/data/deploy.json",
|
|
JSON: []policyv1alpha1.JSONPatchOperation{
|
|
{
|
|
SubPath: "/spec/replicas",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: apiextensionsv1.JSON{Raw: []byte(`5`)},
|
|
},
|
|
{
|
|
SubPath: "/spec/template/spec/containers/-",
|
|
Operator: policyv1alpha1.OverriderOpAdd,
|
|
Value: apiextensionsv1.JSON{Raw: []byte(`{"name": "nginx-helper", "image": "nginx:1.19.1"}`)},
|
|
},
|
|
{
|
|
SubPath: "/spec/template/spec/containers/0/image",
|
|
Operator: policyv1alpha1.OverriderOpRemove,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateConfigMap(kubeClient, configMap)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveConfigMap(kubeClient, configMap.Namespace, configMap.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("should override JSON field in ConfigMap", func() {
|
|
klog.Infof("check if configMap present on member clusters has the correct JSON field value.")
|
|
framework.WaitConfigMapPresentOnClustersFitWith(framework.ClusterNames(), configMap.Namespace, configMap.Name,
|
|
func(cm *corev1.ConfigMap) bool {
|
|
return strings.Contains(cm.Data["deploy.json"], `"replicas":5`) &&
|
|
strings.Contains(cm.Data["deploy.json"], `"name":"nginx-helper"`) &&
|
|
!strings.Contains(cm.Data["deploy.json"], `"image":"nginx:1.19.0"`)
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("[FieldOverrider] apply field overrider testing to update YAML values in ConfigMap", func() {
|
|
var configMapNamespace, configMapName string
|
|
var configMap *corev1.ConfigMap
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
configMapNamespace = testNamespace
|
|
configMapName = configMapNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = configMapName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = configMapName
|
|
|
|
// Define the ConfigMap data
|
|
configMapData := map[string]string{
|
|
"nginx.yaml": `
|
|
server:
|
|
listen: 80
|
|
server_name: localhost
|
|
location /:
|
|
root: /usr/share/nginx/html
|
|
index:
|
|
- index.html
|
|
- index.htm
|
|
error_page:
|
|
- code: 500
|
|
- code: 502
|
|
- code: 503
|
|
- code: 504
|
|
location /50x.html:
|
|
root: /usr/share/nginx/html
|
|
`,
|
|
}
|
|
configMap = helper.NewConfigMap(configMapNamespace, configMapName, configMapData)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: configMap.APIVersion,
|
|
Kind: configMap.Kind,
|
|
Name: configMap.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: configMap.APIVersion,
|
|
Kind: configMap.Kind,
|
|
Name: configMap.Name,
|
|
},
|
|
}, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
FieldOverrider: []policyv1alpha1.FieldOverrider{
|
|
{
|
|
FieldPath: "/data/nginx.yaml",
|
|
YAML: []policyv1alpha1.YAMLPatchOperation{
|
|
{
|
|
SubPath: "/server/location ~1/root",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: apiextensionsv1.JSON{Raw: []byte(`"/var/www/html"`)},
|
|
},
|
|
{
|
|
SubPath: "/server/error_page/-",
|
|
Operator: policyv1alpha1.OverriderOpAdd,
|
|
Value: apiextensionsv1.JSON{Raw: []byte(`{"code": 400}`)},
|
|
},
|
|
{
|
|
SubPath: "/server/location ~1/index",
|
|
Operator: policyv1alpha1.OverriderOpRemove,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateConfigMap(kubeClient, configMap)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveConfigMap(kubeClient, configMap.Namespace, configMap.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("should override YAML field in ConfigMap", func() {
|
|
klog.Infof("check if configMap present on member clusters has the correct YAML field value.")
|
|
framework.WaitConfigMapPresentOnClustersFitWith(framework.ClusterNames(), configMap.Namespace, configMap.Name,
|
|
func(cm *corev1.ConfigMap) bool {
|
|
return strings.Contains(cm.Data["nginx.yaml"], "root: /var/www/html") &&
|
|
strings.Contains(cm.Data["nginx.yaml"], "code: 400") &&
|
|
!strings.Contains(cm.Data["nginx.yaml"], "- index.html")
|
|
})
|
|
})
|
|
})
|
|
|
|
})
|
|
|
|
var _ = framework.SerialDescribe("OverridePolicy with nil resourceSelector testing", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var propagationPolicyNamespace, propagationPolicyName string
|
|
var overridePolicyNamespace, overridePolicyName string
|
|
var deployment *appsv1.Deployment
|
|
var propagationPolicy *policyv1alpha1.PropagationPolicy
|
|
var overridePolicy *policyv1alpha1.OverridePolicy
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicy(overridePolicyNamespace, overridePolicyName, nil, policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
}, policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Predicate: &policyv1alpha1.ImagePredicate{
|
|
Path: "/spec/template/spec/containers/0/image",
|
|
},
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Deployment override testing", func() {
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct image value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return deployment.Spec.Template.Spec.Containers[0].Image == "fictional.registry.us/nginx:1.19.0"
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
var _ = ginkgo.Describe("[OverrideRules] apply overriders testing", func() {
|
|
var propagationPolicyNamespace, propagationPolicyName string
|
|
var overridePolicyNamespace, overridePolicyName string
|
|
var propagationPolicy *policyv1alpha1.PropagationPolicy
|
|
var overridePolicy *policyv1alpha1.OverridePolicy
|
|
|
|
ginkgo.Context("Deployment override all images in container list", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var deployment *appsv1.Deployment
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicyByOverrideRules(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, []policyv1alpha1.RuleWithCluster{
|
|
{
|
|
TargetCluster: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
Overriders: policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "1.0",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct image value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
for _, container := range deployment.Spec.Template.Spec.Containers {
|
|
if container.Image != "fictional.registry.us/busybox:1.0" {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Pod override all images in container list", func() {
|
|
var podNamespace, podName string
|
|
var pod *corev1.Pod
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
podNamespace = testNamespace
|
|
podName = podNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = podName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = podName
|
|
|
|
pod = helper.NewPod(podNamespace, podName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: pod.APIVersion,
|
|
Kind: pod.Kind,
|
|
Name: pod.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicyByOverrideRules(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: pod.APIVersion,
|
|
Kind: pod.Kind,
|
|
Name: pod.Name,
|
|
},
|
|
}, []policyv1alpha1.RuleWithCluster{
|
|
{
|
|
TargetCluster: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
Overriders: policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "1.0",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreatePod(kubeClient, pod)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemovePod(kubeClient, pod.Namespace, pod.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("pod imageOverride testing", func() {
|
|
klog.Infof("check if pod present on member clusters have correct image value")
|
|
framework.WaitPodPresentOnClustersFitWith(framework.ClusterNames(), pod.Namespace, pod.Name, func(pod *corev1.Pod) bool {
|
|
for _, container := range pod.Spec.Containers {
|
|
if container.Image != "fictional.registry.us/busybox:1.0" {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Deployment override specific images in container list", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var deployment *appsv1.Deployment
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
overridePolicy = helper.NewOverridePolicyByOverrideRules(overridePolicyNamespace, overridePolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, []policyv1alpha1.RuleWithCluster{
|
|
{
|
|
TargetCluster: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
Overriders: policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Predicate: &policyv1alpha1.ImagePredicate{
|
|
Path: "/spec/template/spec/containers/0/image",
|
|
},
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct image value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return deployment.Spec.Template.Spec.Containers[0].Image == "fictional.registry.us/nginx:1.19.0"
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
var _ = framework.SerialDescribe("OverrideRules with nil resourceSelector testing", func() {
|
|
var deploymentNamespace, deploymentName string
|
|
var propagationPolicyNamespace, propagationPolicyName string
|
|
var overridePolicyNamespace, overridePolicyName string
|
|
var deployment *appsv1.Deployment
|
|
var propagationPolicy *policyv1alpha1.PropagationPolicy
|
|
var overridePolicy *policyv1alpha1.OverridePolicy
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
deploymentNamespace = testNamespace
|
|
deploymentName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
propagationPolicyNamespace = testNamespace
|
|
propagationPolicyName = deploymentName
|
|
overridePolicyNamespace = testNamespace
|
|
overridePolicyName = deploymentName
|
|
|
|
deployment = helper.NewDeployment(deploymentNamespace, deploymentName)
|
|
propagationPolicy = helper.NewPropagationPolicy(propagationPolicyNamespace, propagationPolicyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
|
|
overridePolicy = helper.NewOverridePolicyByOverrideRules(overridePolicyNamespace, overridePolicyName, nil, []policyv1alpha1.RuleWithCluster{
|
|
{
|
|
TargetCluster: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
Overriders: policyv1alpha1.Overriders{
|
|
ImageOverrider: []policyv1alpha1.ImageOverrider{
|
|
{
|
|
Predicate: &policyv1alpha1.ImagePredicate{
|
|
Path: "/spec/template/spec/containers/0/image",
|
|
},
|
|
Component: "Registry",
|
|
Operator: policyv1alpha1.OverriderOpReplace,
|
|
Value: "fictional.registry.us",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Deployment override testing", func() {
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
klog.Infof("check if deployment present on member clusters have correct image value")
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return deployment.Spec.Template.Spec.Containers[0].Image == "fictional.registry.us/nginx:1.19.0"
|
|
})
|
|
})
|
|
})
|
|
|
|
ginkgo.Context("Deployment override testing when creating overridePolicy after develop and propagationPolicy have been created", func() {
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, propagationPolicy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, propagationPolicy.Namespace, propagationPolicy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment imageOverride testing", func() {
|
|
ginkgo.By("Check if deployment have presented on member clusters", func() {
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(*appsv1.Deployment) bool {
|
|
return true
|
|
})
|
|
})
|
|
|
|
framework.CreateOverridePolicy(karmadaClient, overridePolicy)
|
|
|
|
ginkgo.By("Check if deployment presented on member clusters have correct image value", func() {
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return deployment.Spec.Template.Spec.Containers[0].Image == "fictional.registry.us/nginx:1.19.0"
|
|
})
|
|
})
|
|
|
|
framework.RemoveOverridePolicy(karmadaClient, overridePolicy.Namespace, overridePolicy.Name)
|
|
})
|
|
})
|
|
})
|