mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	move deployment PodTemplate to be not a pointer
This commit is contained in:
		@@ -208,7 +208,7 @@ type DeploymentSpec struct {
 | 
			
		||||
	Selector map[string]string `json:"selector,omitempty"`
 | 
			
		||||
 | 
			
		||||
	// Template describes the pods that will be created.
 | 
			
		||||
	Template *api.PodTemplateSpec `json:"template,omitempty"`
 | 
			
		||||
	Template api.PodTemplateSpec `json:"template"`
 | 
			
		||||
 | 
			
		||||
	// The deployment strategy to use to replace existing pods with new ones.
 | 
			
		||||
	Strategy DeploymentStrategy `json:"strategy,omitempty"`
 | 
			
		||||
 
 | 
			
		||||
@@ -213,14 +213,9 @@ func convert_extensions_DeploymentSpec_To_v1beta1_DeploymentSpec(in *extensions.
 | 
			
		||||
	} else {
 | 
			
		||||
		out.Selector = nil
 | 
			
		||||
	}
 | 
			
		||||
	if in.Template != nil {
 | 
			
		||||
		out.Template = new(v1.PodTemplateSpec)
 | 
			
		||||
		if err := convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil {
 | 
			
		||||
	if err := convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	} else {
 | 
			
		||||
		out.Template = nil
 | 
			
		||||
	}
 | 
			
		||||
	if err := convert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
@@ -244,14 +239,9 @@ func convert_v1beta1_DeploymentSpec_To_extensions_DeploymentSpec(in *DeploymentS
 | 
			
		||||
	} else {
 | 
			
		||||
		out.Selector = nil
 | 
			
		||||
	}
 | 
			
		||||
	if in.Template != nil {
 | 
			
		||||
		out.Template = new(api.PodTemplateSpec)
 | 
			
		||||
		if err := convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil {
 | 
			
		||||
	if err := convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	} else {
 | 
			
		||||
		out.Template = nil
 | 
			
		||||
	}
 | 
			
		||||
	if err := convert_v1beta1_DeploymentStrategy_To_extensions_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -45,10 +45,8 @@ func addDefaultingFuncs() {
 | 
			
		||||
		},
 | 
			
		||||
		func(obj *Deployment) {
 | 
			
		||||
			// Default labels and selector to labels from pod template spec.
 | 
			
		||||
			var labels map[string]string
 | 
			
		||||
			if obj.Spec.Template != nil {
 | 
			
		||||
				labels = obj.Spec.Template.Labels
 | 
			
		||||
			}
 | 
			
		||||
			labels := obj.Spec.Template.Labels
 | 
			
		||||
 | 
			
		||||
			if labels != nil {
 | 
			
		||||
				if len(obj.Spec.Selector) == 0 {
 | 
			
		||||
					obj.Spec.Selector = labels
 | 
			
		||||
 
 | 
			
		||||
@@ -88,6 +88,15 @@ func TestSetDefaultDeployment(t *testing.T) {
 | 
			
		||||
	defaultIntOrString := util.NewIntOrStringFromInt(1)
 | 
			
		||||
	differentIntOrString := util.NewIntOrStringFromInt(5)
 | 
			
		||||
	deploymentLabelKey := "deployment.kubernetes.io/podTemplateHash"
 | 
			
		||||
	period := int64(v1.DefaultTerminationGracePeriodSeconds)
 | 
			
		||||
	defaultTemplate := v1.PodTemplateSpec{
 | 
			
		||||
		Spec: v1.PodSpec{
 | 
			
		||||
			DNSPolicy:                     v1.DNSClusterFirst,
 | 
			
		||||
			RestartPolicy:                 v1.RestartPolicyAlways,
 | 
			
		||||
			SecurityContext:               &v1.PodSecurityContext{},
 | 
			
		||||
			TerminationGracePeriodSeconds: &period,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		original *Deployment
 | 
			
		||||
		expected *Deployment
 | 
			
		||||
@@ -104,6 +113,7 @@ func TestSetDefaultDeployment(t *testing.T) {
 | 
			
		||||
							MaxUnavailable: &defaultIntOrString,
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
					Template:       defaultTemplate,
 | 
			
		||||
					UniqueLabelKey: newString(deploymentLabelKey),
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
@@ -129,6 +139,7 @@ func TestSetDefaultDeployment(t *testing.T) {
 | 
			
		||||
							MaxUnavailable: &defaultIntOrString,
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
					Template:       defaultTemplate,
 | 
			
		||||
					UniqueLabelKey: newString(deploymentLabelKey),
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
@@ -148,6 +159,7 @@ func TestSetDefaultDeployment(t *testing.T) {
 | 
			
		||||
					Strategy: DeploymentStrategy{
 | 
			
		||||
						Type: RecreateDeploymentStrategyType,
 | 
			
		||||
					},
 | 
			
		||||
					Template:       defaultTemplate,
 | 
			
		||||
					UniqueLabelKey: newString(deploymentLabelKey),
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
@@ -168,6 +180,7 @@ func TestSetDefaultDeployment(t *testing.T) {
 | 
			
		||||
					Strategy: DeploymentStrategy{
 | 
			
		||||
						Type: RecreateDeploymentStrategyType,
 | 
			
		||||
					},
 | 
			
		||||
					Template:       defaultTemplate,
 | 
			
		||||
					UniqueLabelKey: newString("customDeploymentKey"),
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
@@ -184,7 +197,7 @@ func TestSetDefaultDeployment(t *testing.T) {
 | 
			
		||||
			t.FailNow()
 | 
			
		||||
		}
 | 
			
		||||
		if !reflect.DeepEqual(got.Spec, expected.Spec) {
 | 
			
		||||
			t.Errorf("got different than expected: %v, %v", got, expected)
 | 
			
		||||
			t.Errorf("got different than expected:\n\t%+v\ngot:\n\t%+v", got.Spec, expected.Spec)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -201,7 +201,7 @@ type DeploymentSpec struct {
 | 
			
		||||
	Selector map[string]string `json:"selector,omitempty"`
 | 
			
		||||
 | 
			
		||||
	// Template describes the pods that will be created.
 | 
			
		||||
	Template *v1.PodTemplateSpec `json:"template,omitempty"`
 | 
			
		||||
	Template v1.PodTemplateSpec `json:"template"`
 | 
			
		||||
 | 
			
		||||
	// The deployment strategy to use to replace existing pods with new ones.
 | 
			
		||||
	Strategy DeploymentStrategy `json:"strategy,omitempty"`
 | 
			
		||||
 
 | 
			
		||||
@@ -265,7 +265,7 @@ func ValidateDeploymentSpec(spec *extensions.DeploymentSpec) errs.ValidationErro
 | 
			
		||||
	allErrs := errs.ValidationErrorList{}
 | 
			
		||||
	allErrs = append(allErrs, apivalidation.ValidateNonEmptySelector(spec.Selector, "selector")...)
 | 
			
		||||
	allErrs = append(allErrs, apivalidation.ValidatePositiveField(int64(spec.Replicas), "replicas")...)
 | 
			
		||||
	allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpecForRC(spec.Template, spec.Selector, spec.Replicas, "template")...)
 | 
			
		||||
	allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpecForRC(&spec.Template, spec.Selector, spec.Replicas, "template")...)
 | 
			
		||||
	allErrs = append(allErrs, ValidateDeploymentStrategy(&spec.Strategy, "strategy")...)
 | 
			
		||||
	allErrs = append(allErrs, apivalidation.ValidateLabelName(spec.UniqueLabelKey, "uniqueLabel")...)
 | 
			
		||||
	return allErrs
 | 
			
		||||
 
 | 
			
		||||
@@ -613,7 +613,7 @@ func validDeployment() *extensions.Deployment {
 | 
			
		||||
			Selector: map[string]string{
 | 
			
		||||
				"name": "abc",
 | 
			
		||||
			},
 | 
			
		||||
			Template: &api.PodTemplateSpec{
 | 
			
		||||
			Template: api.PodTemplateSpec{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Name:      "abc",
 | 
			
		||||
					Namespace: api.NamespaceDefault,
 | 
			
		||||
 
 | 
			
		||||
@@ -151,7 +151,7 @@ func (d *DeploymentController) getNewRC(deployment extensions.Deployment) (*api.
 | 
			
		||||
		Spec: api.ReplicationControllerSpec{
 | 
			
		||||
			Replicas: 0,
 | 
			
		||||
			Selector: newRCSelector,
 | 
			
		||||
			Template: newRCTemplate,
 | 
			
		||||
			Template: &newRCTemplate,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	createdRC, err := d.client.ReplicationControllers(namespace).Create(&newRC)
 | 
			
		||||
 
 | 
			
		||||
@@ -503,7 +503,7 @@ func TestDescribeDeployment(t *testing.T) {
 | 
			
		||||
			Namespace: "foo",
 | 
			
		||||
		},
 | 
			
		||||
		Spec: extensions.DeploymentSpec{
 | 
			
		||||
			Template: &api.PodTemplateSpec{},
 | 
			
		||||
			Template: api.PodTemplateSpec{},
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	c := &describeClient{T: t, Namespace: "foo", Interface: fake}
 | 
			
		||||
 
 | 
			
		||||
@@ -1237,7 +1237,7 @@ func TestPrintDeployment(t *testing.T) {
 | 
			
		||||
				},
 | 
			
		||||
				Spec: extensions.DeploymentSpec{
 | 
			
		||||
					Replicas: 5,
 | 
			
		||||
					Template: &api.PodTemplateSpec{
 | 
			
		||||
					Template: api.PodTemplateSpec{
 | 
			
		||||
						Spec: api.PodSpec{Containers: make([]api.Container, 2)},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ func validNewDeployment() *extensions.Deployment {
 | 
			
		||||
		},
 | 
			
		||||
		Spec: extensions.DeploymentSpec{
 | 
			
		||||
			Selector: map[string]string{"a": "b"},
 | 
			
		||||
			Template: &api.PodTemplateSpec{
 | 
			
		||||
			Template: api.PodTemplateSpec{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Labels: map[string]string{"a": "b"},
 | 
			
		||||
				},
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,8 @@ func GetOldRCs(deployment extensions.Deployment, c client.Interface) ([]*api.Rep
 | 
			
		||||
			rcLabelsSelector := labels.SelectorFromSet(rc.Spec.Selector)
 | 
			
		||||
			if rcLabelsSelector.Matches(podLabelsSelector) {
 | 
			
		||||
				// Filter out RC that has the same pod template spec as the deployment - that is the new RC.
 | 
			
		||||
				if api.Semantic.DeepEqual(rc.Spec.Template, GetNewRCTemplate(deployment)) {
 | 
			
		||||
				newRCTemplate := GetNewRCTemplate(deployment)
 | 
			
		||||
				if api.Semantic.DeepEqual(rc.Spec.Template, &newRCTemplate) {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
				oldRCs[rc.ObjectMeta.Name] = rc
 | 
			
		||||
@@ -74,7 +75,7 @@ func GetNewRC(deployment extensions.Deployment, c client.Interface) (*api.Replic
 | 
			
		||||
	newRCTemplate := GetNewRCTemplate(deployment)
 | 
			
		||||
 | 
			
		||||
	for _, rc := range rcList.Items {
 | 
			
		||||
		if api.Semantic.DeepEqual(rc.Spec.Template, newRCTemplate) {
 | 
			
		||||
		if api.Semantic.DeepEqual(rc.Spec.Template, &newRCTemplate) {
 | 
			
		||||
			// This is the new RC.
 | 
			
		||||
			return &rc, nil
 | 
			
		||||
		}
 | 
			
		||||
@@ -84,9 +85,9 @@ func GetNewRC(deployment extensions.Deployment, c client.Interface) (*api.Replic
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the desired PodTemplateSpec for the new RC corresponding to the given RC.
 | 
			
		||||
func GetNewRCTemplate(deployment extensions.Deployment) *api.PodTemplateSpec {
 | 
			
		||||
func GetNewRCTemplate(deployment extensions.Deployment) api.PodTemplateSpec {
 | 
			
		||||
	// newRC will have the same template as in deployment spec, plus a unique label in some cases.
 | 
			
		||||
	newRCTemplate := &api.PodTemplateSpec{
 | 
			
		||||
	newRCTemplate := api.PodTemplateSpec{
 | 
			
		||||
		ObjectMeta: deployment.Spec.Template.ObjectMeta,
 | 
			
		||||
		Spec:       deployment.Spec.Template.Spec,
 | 
			
		||||
	}
 | 
			
		||||
@@ -113,7 +114,7 @@ func CloneAndAddLabel(labels map[string]string, labelKey string, labelValue uint
 | 
			
		||||
	return newLabels
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetPodTemplateSpecHash(template *api.PodTemplateSpec) uint32 {
 | 
			
		||||
func GetPodTemplateSpecHash(template api.PodTemplateSpec) uint32 {
 | 
			
		||||
	podTemplateSpecHasher := adler32.New()
 | 
			
		||||
	util.DeepHashObject(podTemplateSpecHasher, template)
 | 
			
		||||
	return podTemplateSpecHasher.Sum32()
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ package e2e
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
			
		||||
	deploymentutil "k8s.io/kubernetes/pkg/util/deployment"
 | 
			
		||||
@@ -54,7 +55,7 @@ func testNewDeployment(f *Framework) {
 | 
			
		||||
			Replicas:       1,
 | 
			
		||||
			Selector:       podLabels,
 | 
			
		||||
			UniqueLabelKey: "deployment.kubernetes.io/podTemplateHash",
 | 
			
		||||
			Template: &api.PodTemplateSpec{
 | 
			
		||||
			Template: api.PodTemplateSpec{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Labels: podLabels,
 | 
			
		||||
				},
 | 
			
		||||
@@ -147,7 +148,7 @@ func testRollingUpdateDeployment(f *Framework) {
 | 
			
		||||
			Replicas:       3,
 | 
			
		||||
			Selector:       deploymentPodLabels,
 | 
			
		||||
			UniqueLabelKey: "deployment.kubernetes.io/podTemplateHash",
 | 
			
		||||
			Template: &api.PodTemplateSpec{
 | 
			
		||||
			Template: api.PodTemplateSpec{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Labels: deploymentPodLabels,
 | 
			
		||||
				},
 | 
			
		||||
@@ -228,7 +229,7 @@ func testRollingUpdateDeploymentEvents(f *Framework) {
 | 
			
		||||
			Replicas:       1,
 | 
			
		||||
			Selector:       deploymentPodLabels,
 | 
			
		||||
			UniqueLabelKey: "deployment.kubernetes.io/podTemplateHash",
 | 
			
		||||
			Template: &api.PodTemplateSpec{
 | 
			
		||||
			Template: api.PodTemplateSpec{
 | 
			
		||||
				ObjectMeta: api.ObjectMeta{
 | 
			
		||||
					Labels: deploymentPodLabels,
 | 
			
		||||
				},
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user