ReplicaSetSpec.Template shouldn't be a pointer.

PodTemplateSpec should be consistent for all the types in extensions/v1beta1.

See PR #19510.
pull/6/head
Madhusudan.C.S 2016-03-09 13:11:13 -08:00
parent 108f722657
commit db48dcf583
22 changed files with 75 additions and 92 deletions

View File

@ -807,7 +807,7 @@ type ReplicaSetSpec struct {
// Template is the object that describes the pod that will be created if // Template is the object that describes the pod that will be created if
// insufficient replicas are detected. // insufficient replicas are detected.
Template *api.PodTemplateSpec `json:"template,omitempty"` Template api.PodTemplateSpec `json:"template,omitempty"`
} }
// ReplicaSetStatus represents the current status of a ReplicaSet. // ReplicaSetStatus represents the current status of a ReplicaSet.

View File

@ -297,14 +297,10 @@ func Convert_extensions_ReplicaSetSpec_To_v1beta1_ReplicaSetSpec(in *extensions.
} else { } else {
out.Selector = nil out.Selector = nil
} }
if in.Template != nil {
out.Template = new(v1.PodTemplateSpec) if err := v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
if err := v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil {
return err return err
} }
} else {
out.Template = nil
}
return nil return nil
} }
@ -323,14 +319,9 @@ func Convert_v1beta1_ReplicaSetSpec_To_extensions_ReplicaSetSpec(in *ReplicaSetS
} else { } else {
out.Selector = nil out.Selector = nil
} }
if in.Template != nil { if err := v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
out.Template = new(api.PodTemplateSpec)
if err := v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil {
return err return err
} }
} else {
out.Template = nil
}
return nil return nil
} }

View File

@ -118,10 +118,8 @@ func addDefaultingFuncs(scheme *runtime.Scheme) {
} }
}, },
func(obj *ReplicaSet) { func(obj *ReplicaSet) {
var labels map[string]string labels := obj.Spec.Template.Labels
if obj.Spec.Template != nil {
labels = obj.Spec.Template.Labels
}
// TODO: support templates defined elsewhere when we support them in the API // TODO: support templates defined elsewhere when we support them in the API
if labels != nil { if labels != nil {
if obj.Spec.Selector == nil { if obj.Spec.Selector == nil {

View File

@ -426,7 +426,7 @@ func TestSetDefaultReplicaSet(t *testing.T) {
{ {
rs: &ReplicaSet{ rs: &ReplicaSet{
Spec: ReplicaSetSpec{ Spec: ReplicaSetSpec{
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -446,7 +446,7 @@ func TestSetDefaultReplicaSet(t *testing.T) {
}, },
}, },
Spec: ReplicaSetSpec{ Spec: ReplicaSetSpec{
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -471,7 +471,7 @@ func TestSetDefaultReplicaSet(t *testing.T) {
"some": "other", "some": "other",
}, },
}, },
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -491,7 +491,7 @@ func TestSetDefaultReplicaSet(t *testing.T) {
"some": "other", "some": "other",
}, },
}, },
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -538,7 +538,7 @@ func TestSetDefaultReplicaSetReplicas(t *testing.T) {
{ {
rs: ReplicaSet{ rs: ReplicaSet{
Spec: ReplicaSetSpec{ Spec: ReplicaSetSpec{
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -553,7 +553,7 @@ func TestSetDefaultReplicaSetReplicas(t *testing.T) {
rs: ReplicaSet{ rs: ReplicaSet{
Spec: ReplicaSetSpec{ Spec: ReplicaSetSpec{
Replicas: newInt32(0), Replicas: newInt32(0),
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -568,7 +568,7 @@ func TestSetDefaultReplicaSetReplicas(t *testing.T) {
rs: ReplicaSet{ rs: ReplicaSet{
Spec: ReplicaSetSpec{ Spec: ReplicaSetSpec{
Replicas: newInt32(3), Replicas: newInt32(3),
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",
@ -611,7 +611,7 @@ func TestDefaultRequestIsNotSetForReplicaSet(t *testing.T) {
rs := &ReplicaSet{ rs := &ReplicaSet{
Spec: ReplicaSetSpec{ Spec: ReplicaSetSpec{
Replicas: newInt32(3), Replicas: newInt32(3),
Template: &v1.PodTemplateSpec{ Template: v1.PodTemplateSpec{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"foo": "bar", "foo": "bar",

View File

@ -898,7 +898,7 @@ type ReplicaSetSpec struct {
// Template is the object that describes the pod that will be created if // Template is the object that describes the pod that will be created if
// insufficient replicas are detected. // insufficient replicas are detected.
// More info: http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#pod-template // More info: http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#pod-template
Template *v1.PodTemplateSpec `json:"template,omitempty"` Template v1.PodTemplateSpec `json:"template,omitempty"`
} }
// ReplicaSetStatus represents the current status of a ReplicaSet. // ReplicaSetStatus represents the current status of a ReplicaSet.

View File

@ -710,7 +710,7 @@ func ValidateReplicaSetSpec(spec *extensions.ReplicaSetSpec, fldPath *field.Path
if err != nil { if err != nil {
allErrs = append(allErrs, field.Invalid(fldPath.Child("selector"), spec.Selector, "invalid label selector.")) allErrs = append(allErrs, field.Invalid(fldPath.Child("selector"), spec.Selector, "invalid label selector."))
} else { } else {
allErrs = append(allErrs, ValidatePodTemplateSpecForReplicaSet(spec.Template, selector, spec.Replicas, fldPath.Child("template"))...) allErrs = append(allErrs, ValidatePodTemplateSpecForReplicaSet(&spec.Template, selector, spec.Replicas, fldPath.Child("template"))...)
} }
return allErrs return allErrs
} }

View File

@ -1446,7 +1446,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 2, Replicas: 2,
@ -1457,7 +1457,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 3, Replicas: 3,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 4, Replicas: 4,
@ -1478,7 +1478,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 3, Replicas: 3,
@ -1489,7 +1489,7 @@ func TestValidateReplicaSetStatusUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: -3, Replicas: -3,
@ -1554,7 +1554,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
update: extensions.ReplicaSet{ update: extensions.ReplicaSet{
@ -1562,7 +1562,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 3, Replicas: 3,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
}, },
@ -1571,7 +1571,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
update: extensions.ReplicaSet{ update: extensions.ReplicaSet{
@ -1579,7 +1579,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 1, Replicas: 1,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &readWriteVolumePodTemplate.Template, Template: readWriteVolumePodTemplate.Template,
}, },
}, },
}, },
@ -1597,7 +1597,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
update: extensions.ReplicaSet{ update: extensions.ReplicaSet{
@ -1605,7 +1605,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &readWriteVolumePodTemplate.Template, Template: readWriteVolumePodTemplate.Template,
}, },
}, },
}, },
@ -1614,7 +1614,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
update: extensions.ReplicaSet{ update: extensions.ReplicaSet{
@ -1622,7 +1622,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Selector: &unversioned.LabelSelector{MatchLabels: invalidLabels}, Selector: &unversioned.LabelSelector{MatchLabels: invalidLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
}, },
@ -1631,7 +1631,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
update: extensions.ReplicaSet{ update: extensions.ReplicaSet{
@ -1639,7 +1639,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &invalidPodTemplate.Template, Template: invalidPodTemplate.Template,
}, },
}, },
}, },
@ -1648,7 +1648,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
update: extensions.ReplicaSet{ update: extensions.ReplicaSet{
@ -1656,7 +1656,7 @@ func TestValidateReplicaSetUpdate(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: -1, Replicas: -1,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
}, },
@ -1712,14 +1712,14 @@ func TestValidateReplicaSet(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
{ {
ObjectMeta: api.ObjectMeta{Name: "abc-123", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc-123", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
{ {
@ -1727,7 +1727,7 @@ func TestValidateReplicaSet(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 1, Replicas: 1,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &readWriteVolumePodTemplate.Template, Template: readWriteVolumePodTemplate.Template,
}, },
}, },
} }
@ -1742,27 +1742,27 @@ func TestValidateReplicaSet(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
"missing-namespace": { "missing-namespace": {
ObjectMeta: api.ObjectMeta{Name: "abc-123"}, ObjectMeta: api.ObjectMeta{Name: "abc-123"},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
"empty selector": { "empty selector": {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
"selector_doesnt_match": { "selector_doesnt_match": {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
"invalid manifest": { "invalid manifest": {
@ -1776,7 +1776,7 @@ func TestValidateReplicaSet(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &readWriteVolumePodTemplate.Template, Template: readWriteVolumePodTemplate.Template,
}, },
}, },
"negative_replicas": { "negative_replicas": {
@ -1796,7 +1796,7 @@ func TestValidateReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
"invalid_label 2": { "invalid_label 2": {
@ -1808,7 +1808,7 @@ func TestValidateReplicaSet(t *testing.T) {
}, },
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Template: &invalidPodTemplate.Template, Template: invalidPodTemplate.Template,
}, },
}, },
"invalid_annotation": { "invalid_annotation": {
@ -1821,7 +1821,7 @@ func TestValidateReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
}, },
"invalid restart policy 1": { "invalid restart policy 1": {
@ -1831,7 +1831,7 @@ func TestValidateReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
Spec: api.PodSpec{ Spec: api.PodSpec{
RestartPolicy: api.RestartPolicyOnFailure, RestartPolicy: api.RestartPolicyOnFailure,
DNSPolicy: api.DNSClusterFirst, DNSPolicy: api.DNSClusterFirst,
@ -1850,7 +1850,7 @@ func TestValidateReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validLabels}, Selector: &unversioned.LabelSelector{MatchLabels: validLabels},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
Spec: api.PodSpec{ Spec: api.PodSpec{
RestartPolicy: api.RestartPolicyNever, RestartPolicy: api.RestartPolicyNever,
DNSPolicy: api.DNSClusterFirst, DNSPolicy: api.DNSClusterFirst,

View File

@ -49,7 +49,7 @@ func TestListReplicaSets(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
@ -76,7 +76,7 @@ func TestGetReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
@ -115,7 +115,7 @@ func TestUpdateReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
@ -143,7 +143,7 @@ func TestUpdateStatusReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 2, Replicas: 2,
@ -183,7 +183,7 @@ func TestCreateReplicaSet(t *testing.T) {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 2, Replicas: 2,
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },

View File

@ -730,7 +730,7 @@ func (dc *DeploymentController) getNewReplicaSet(deployment *extensions.Deployme
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 0, Replicas: 0,
Selector: newRSSelector, Selector: newRSSelector,
Template: &newRSTemplate, Template: newRSTemplate,
}, },
} }
// Set new replica set's annotation // Set new replica set's annotation
@ -1100,9 +1100,9 @@ func (dc *DeploymentController) updateDeployment(deployment *extensions.Deployme
} }
func (dc *DeploymentController) rollbackToTemplate(deployment *extensions.Deployment, rs *extensions.ReplicaSet) (d *extensions.Deployment, performedRollback bool, err error) { func (dc *DeploymentController) rollbackToTemplate(deployment *extensions.Deployment, rs *extensions.ReplicaSet) (d *extensions.Deployment, performedRollback bool, err error) {
if !reflect.DeepEqual(deploymentutil.GetNewReplicaSetTemplate(deployment), *rs.Spec.Template) { if !reflect.DeepEqual(deploymentutil.GetNewReplicaSetTemplate(deployment), rs.Spec.Template) {
glog.Infof("Rolling back deployment %s to template spec %+v", deployment.Name, rs.Spec.Template.Spec) glog.Infof("Rolling back deployment %s to template spec %+v", deployment.Name, rs.Spec.Template.Spec)
deploymentutil.SetFromReplicaSetTemplate(deployment, *rs.Spec.Template) deploymentutil.SetFromReplicaSetTemplate(deployment, rs.Spec.Template)
performedRollback = true performedRollback = true
} else { } else {
glog.V(4).Infof("Rolling back to a revision that contains the same template as current deployment %s, skipping rollback...", deployment.Name) glog.V(4).Infof("Rolling back to a revision that contains the same template as current deployment %s, skipping rollback...", deployment.Name)

View File

@ -42,7 +42,7 @@ func rs(name string, replicas int, selector map[string]string) *exp.ReplicaSet {
Spec: exp.ReplicaSetSpec{ Spec: exp.ReplicaSetSpec{
Replicas: replicas, Replicas: replicas,
Selector: &unversioned.LabelSelector{MatchLabels: selector}, Selector: &unversioned.LabelSelector{MatchLabels: selector},
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
} }
} }
@ -120,7 +120,7 @@ func newReplicaSet(d *exp.Deployment, name string, replicas int) *exp.ReplicaSet
}, },
Spec: exp.ReplicaSetSpec{ Spec: exp.ReplicaSetSpec{
Replicas: replicas, Replicas: replicas,
Template: &d.Spec.Template, Template: d.Spec.Template,
}, },
} }

View File

@ -439,7 +439,7 @@ func (rsc *ReplicaSetController) manageReplicas(filteredPods []*api.Pod, rs *ext
for i := 0; i < diff; i++ { for i := 0; i < diff; i++ {
go func() { go func() {
defer wait.Done() defer wait.Done()
if err := rsc.podControl.CreatePods(rs.Namespace, rs.Spec.Template, rs); err != nil { if err := rsc.podControl.CreatePods(rs.Namespace, &rs.Spec.Template, rs); err != nil {
// Decrement the expected number of creates because the informer won't observe this pod // Decrement the expected number of creates because the informer won't observe this pod
glog.V(2).Infof("Failed creation, decrementing expectations for replica set %q/%q", rs.Namespace, rs.Name) glog.V(2).Infof("Failed creation, decrementing expectations for replica set %q/%q", rs.Namespace, rs.Name)
rsc.expectations.CreationObserved(rsKey) rsc.expectations.CreationObserved(rsKey)

View File

@ -69,7 +69,7 @@ func newReplicaSet(replicas int, selectorMap map[string]string) *extensions.Repl
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: replicas, Replicas: replicas,
Selector: &unversioned.LabelSelector{MatchLabels: selectorMap}, Selector: &unversioned.LabelSelector{MatchLabels: selectorMap},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: map[string]string{ Labels: map[string]string{
"name": "foo", "name": "foo",

View File

@ -1038,18 +1038,12 @@ func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, runnin
return tabbedString(func(out io.Writer) error { return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", rs.Name) fmt.Fprintf(out, "Name:\t%s\n", rs.Name)
fmt.Fprintf(out, "Namespace:\t%s\n", rs.Namespace) fmt.Fprintf(out, "Namespace:\t%s\n", rs.Namespace)
if rs.Spec.Template != nil {
fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&rs.Spec.Template.Spec)) fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&rs.Spec.Template.Spec))
} else {
fmt.Fprintf(out, "Image(s):\t%s\n", "<unset>")
}
fmt.Fprintf(out, "Selector:\t%s\n", unversioned.FormatLabelSelector(rs.Spec.Selector)) fmt.Fprintf(out, "Selector:\t%s\n", unversioned.FormatLabelSelector(rs.Spec.Selector))
fmt.Fprintf(out, "Labels:\t%s\n", labels.FormatLabels(rs.Labels)) fmt.Fprintf(out, "Labels:\t%s\n", labels.FormatLabels(rs.Labels))
fmt.Fprintf(out, "Replicas:\t%d current / %d desired\n", rs.Status.Replicas, rs.Spec.Replicas) fmt.Fprintf(out, "Replicas:\t%d current / %d desired\n", rs.Status.Replicas, rs.Spec.Replicas)
fmt.Fprintf(out, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) fmt.Fprintf(out, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
if rs.Spec.Template != nil {
describeVolumes(rs.Spec.Template.Spec.Volumes, out) describeVolumes(rs.Spec.Template.Spec.Volumes, out)
}
if events != nil { if events != nil {
DescribeEvents(events, out) DescribeEvents(events, out)
} }

View File

@ -81,7 +81,7 @@ func (h *DeploymentHistoryViewer) History(namespace, name string) (HistoryInfo,
if err != nil { if err != nil {
continue continue
} }
historyInfo.RevisionToTemplate[v] = rs.Spec.Template historyInfo.RevisionToTemplate[v] = &rs.Spec.Template
changeCause := getChangeCause(rs) changeCause := getChangeCause(rs)
if historyInfo.RevisionToTemplate[v].Annotations == nil { if historyInfo.RevisionToTemplate[v].Annotations == nil {
historyInfo.RevisionToTemplate[v].Annotations = make(map[string]string) historyInfo.RevisionToTemplate[v].Annotations = make(map[string]string)

View File

@ -552,7 +552,7 @@ func TestDeploymentStop(t *testing.T) {
Namespace: ns, Namespace: ns,
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Template: &template, Template: template,
}, },
}, },
}, },

View File

@ -61,7 +61,7 @@ func validNewReplicaSet() *extensions.ReplicaSet {
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"a": "b"}}, Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"a": "b"}},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: map[string]string{"a": "b"}, Labels: map[string]string{"a": "b"},
}, },

View File

@ -50,7 +50,7 @@ func TestReplicaSetStrategy(t *testing.T) {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault}, ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: api.NamespaceDefault},
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Selector: &unversioned.LabelSelector{MatchLabels: validSelector},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 1, Replicas: 1,
@ -109,7 +109,7 @@ func TestReplicaSetStatusStrategy(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 3, Replicas: 3,
Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Selector: &unversioned.LabelSelector{MatchLabels: validSelector},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 1, Replicas: 1,
@ -121,7 +121,7 @@ func TestReplicaSetStatusStrategy(t *testing.T) {
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 1, Replicas: 1,
Selector: &unversioned.LabelSelector{MatchLabels: validSelector}, Selector: &unversioned.LabelSelector{MatchLabels: validSelector},
Template: &validPodTemplate.Template, Template: validPodTemplate.Template,
}, },
Status: extensions.ReplicaSetStatus{ Status: extensions.ReplicaSetStatus{
Replicas: 3, Replicas: 3,

View File

@ -86,7 +86,7 @@ func GetOldReplicaSetsFromLists(deployment *extensions.Deployment, c clientset.I
return nil, nil, fmt.Errorf("invalid label selector: %v", err) return nil, nil, fmt.Errorf("invalid label selector: %v", err)
} }
// Filter out replica set that has the same pod template spec as the deployment - that is the new replica set. // Filter out replica set that has the same pod template spec as the deployment - that is the new replica set.
if api.Semantic.DeepEqual(rs.Spec.Template, &newRSTemplate) { if api.Semantic.DeepEqual(rs.Spec.Template, newRSTemplate) {
continue continue
} }
allOldRSs[rs.ObjectMeta.Name] = rs allOldRSs[rs.ObjectMeta.Name] = rs
@ -131,7 +131,7 @@ func GetNewReplicaSetFromList(deployment *extensions.Deployment, c clientset.Int
newRSTemplate := GetNewReplicaSetTemplate(deployment) newRSTemplate := GetNewReplicaSetTemplate(deployment)
for i := range rsList { for i := range rsList {
if api.Semantic.DeepEqual(rsList[i].Spec.Template, &newRSTemplate) { if api.Semantic.DeepEqual(rsList[i].Spec.Template, newRSTemplate) {
// This is the new ReplicaSet. // This is the new ReplicaSet.
return &rsList[i], nil return &rsList[i], nil
} }

View File

@ -167,7 +167,7 @@ func generateRSWithLabel(labels map[string]string, image string) extensions.Repl
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: 1, Replicas: 1,
Selector: &unversioned.LabelSelector{MatchLabels: labels}, Selector: &unversioned.LabelSelector{MatchLabels: labels},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
Spec: api.PodSpec{ Spec: api.PodSpec{
Containers: []api.Container{ Containers: []api.Container{
{ {
@ -192,7 +192,7 @@ func generateRS(deployment extensions.Deployment) extensions.ReplicaSet {
Labels: template.Labels, Labels: template.Labels,
}, },
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Template: &template, Template: template,
Selector: &unversioned.LabelSelector{MatchLabels: template.Labels}, Selector: &unversioned.LabelSelector{MatchLabels: template.Labels},
}, },
} }

View File

@ -80,7 +80,7 @@ func newRS(rsName string, replicas int, rsPodLabels map[string]string, imageName
Spec: extensions.ReplicaSetSpec{ Spec: extensions.ReplicaSetSpec{
Replicas: replicas, Replicas: replicas,
Selector: &unversioned.LabelSelector{MatchLabels: rsPodLabels}, Selector: &unversioned.LabelSelector{MatchLabels: rsPodLabels},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: rsPodLabels, Labels: rsPodLabels,
}, },

View File

@ -65,7 +65,7 @@ func ReplicaSetServeImageOrFail(f *Framework, test string, image string) {
Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{
"name": name, "name": name,
}}, }},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: map[string]string{"name": name}, Labels: map[string]string{"name": name},
}, },

View File

@ -1817,7 +1817,7 @@ func (config *ReplicaSetConfig) create() error {
"name": config.Name, "name": config.Name,
}, },
}, },
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: map[string]string{"name": config.Name}, Labels: map[string]string{"name": config.Name},
}, },
@ -1835,7 +1835,7 @@ func (config *ReplicaSetConfig) create() error {
}, },
} }
config.applyTo(rs.Spec.Template) config.applyTo(&rs.Spec.Template)
_, err := config.Client.ReplicaSets(config.Namespace).Create(rs) _, err := config.Client.ReplicaSets(config.Namespace).Create(rs)
if err != nil { if err != nil {