841 lines
30 KiB
Go
841 lines
30 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 e2e
|
|
|
|
import (
|
|
"github.com/onsi/ginkgo/v2"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
corev1 "k8s.io/api/core/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: "replace",
|
|
Value: map[string]string{
|
|
"foo": "exist",
|
|
"non-exist": "non-exist",
|
|
},
|
|
},
|
|
{
|
|
Operator: "add",
|
|
Value: map[string]string{
|
|
"app": "nginx",
|
|
},
|
|
},
|
|
{
|
|
Operator: "remove",
|
|
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: "replace",
|
|
Value: map[string]string{
|
|
"foo": "exist",
|
|
"non-exist": "non-exist",
|
|
},
|
|
},
|
|
{
|
|
Operator: "add",
|
|
Value: map[string]string{
|
|
"app": "nginx",
|
|
},
|
|
},
|
|
{
|
|
Operator: "remove",
|
|
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: "replace",
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: "replace",
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: "replace",
|
|
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: "replace",
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: "replace",
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: "replace",
|
|
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: "replace",
|
|
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("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: "replace",
|
|
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: "replace",
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: "replace",
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: "replace",
|
|
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: "replace",
|
|
Value: "fictional.registry.us",
|
|
},
|
|
{
|
|
Component: "Repository",
|
|
Operator: "replace",
|
|
Value: "busybox",
|
|
},
|
|
{
|
|
Component: "Tag",
|
|
Operator: "replace",
|
|
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: "replace",
|
|
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: "replace",
|
|
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(deployment *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)
|
|
})
|
|
})
|
|
})
|