Commit 8b66e931 authored by k8s-merge-robot's avatar k8s-merge-robot

Merge pull request #19510 from madhusudancs/daemonset-nonpointer-template

Auto commit by PR queue bot
parents da108827 c2fd8bd7
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -374,7 +374,7 @@ type DaemonSetSpec struct { ...@@ -374,7 +374,7 @@ type DaemonSetSpec struct {
// that matches the template's node selector (or on every node if no node // that matches the template's node selector (or on every node if no node
// selector is specified). // selector is specified).
// 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 *api.PodTemplateSpec `json:"template,omitempty"` Template api.PodTemplateSpec `json:"template"`
// Update strategy to replace existing DaemonSet pods with new pods. // Update strategy to replace existing DaemonSet pods with new pods.
UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"` UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"`
......
...@@ -443,14 +443,8 @@ func Convert_extensions_DaemonSetSpec_To_v1beta1_DaemonSetSpec(in *extensions.Da ...@@ -443,14 +443,8 @@ func Convert_extensions_DaemonSetSpec_To_v1beta1_DaemonSetSpec(in *extensions.Da
} else { } else {
out.Selector = nil out.Selector = nil
} }
// unable to generate simple pointer conversion for api.PodTemplateSpec -> v1.PodTemplateSpec if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
if in.Template != nil { return err
out.Template = new(v1.PodTemplateSpec)
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_DaemonSetUpdateStrategy_To_v1beta1_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil { if err := Convert_extensions_DaemonSetUpdateStrategy_To_v1beta1_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
return err return err
...@@ -473,14 +467,8 @@ func Convert_v1beta1_DaemonSetSpec_To_extensions_DaemonSetSpec(in *DaemonSetSpec ...@@ -473,14 +467,8 @@ func Convert_v1beta1_DaemonSetSpec_To_extensions_DaemonSetSpec(in *DaemonSetSpec
} else { } else {
out.Selector = nil out.Selector = nil
} }
// unable to generate simple pointer conversion for v1.PodTemplateSpec -> api.PodTemplateSpec if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
if in.Template != nil { return err
out.Template = new(api.PodTemplateSpec)
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_DaemonSetUpdateStrategy_To_extensions_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil { if err := Convert_v1beta1_DaemonSetUpdateStrategy_To_extensions_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
return err return err
......
...@@ -2585,14 +2585,8 @@ func autoConvert_extensions_DaemonSetSpec_To_v1beta1_DaemonSetSpec(in *extension ...@@ -2585,14 +2585,8 @@ func autoConvert_extensions_DaemonSetSpec_To_v1beta1_DaemonSetSpec(in *extension
} else { } else {
out.Selector = nil out.Selector = nil
} }
// unable to generate simple pointer conversion for api.PodTemplateSpec -> v1.PodTemplateSpec if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
if in.Template != nil { return err
out.Template = new(v1.PodTemplateSpec)
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_DaemonSetUpdateStrategy_To_v1beta1_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil { if err := Convert_extensions_DaemonSetUpdateStrategy_To_v1beta1_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
return err return err
...@@ -3715,14 +3709,8 @@ func autoConvert_v1beta1_DaemonSetSpec_To_extensions_DaemonSetSpec(in *DaemonSet ...@@ -3715,14 +3709,8 @@ func autoConvert_v1beta1_DaemonSetSpec_To_extensions_DaemonSetSpec(in *DaemonSet
} else { } else {
out.Selector = nil out.Selector = nil
} }
// unable to generate simple pointer conversion for v1.PodTemplateSpec -> api.PodTemplateSpec if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
if in.Template != nil { return err
out.Template = new(api.PodTemplateSpec)
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_DaemonSetUpdateStrategy_To_extensions_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil { if err := Convert_v1beta1_DaemonSetUpdateStrategy_To_extensions_DaemonSetUpdateStrategy(&in.UpdateStrategy, &out.UpdateStrategy, s); err != nil {
return err return err
......
...@@ -1055,13 +1055,8 @@ func deepCopy_v1beta1_DaemonSetSpec(in DaemonSetSpec, out *DaemonSetSpec, c *con ...@@ -1055,13 +1055,8 @@ func deepCopy_v1beta1_DaemonSetSpec(in DaemonSetSpec, out *DaemonSetSpec, c *con
} else { } else {
out.Selector = nil out.Selector = nil
} }
if in.Template != nil { if err := deepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil {
out.Template = new(v1.PodTemplateSpec) return err
if err := deepCopy_v1_PodTemplateSpec(*in.Template, out.Template, c); err != nil {
return err
}
} else {
out.Template = nil
} }
if err := deepCopy_v1beta1_DaemonSetUpdateStrategy(in.UpdateStrategy, &out.UpdateStrategy, c); err != nil { if err := deepCopy_v1beta1_DaemonSetUpdateStrategy(in.UpdateStrategy, &out.UpdateStrategy, c); err != nil {
return err return err
......
...@@ -29,10 +29,8 @@ func addDefaultingFuncs(scheme *runtime.Scheme) { ...@@ -29,10 +29,8 @@ func addDefaultingFuncs(scheme *runtime.Scheme) {
} }
}, },
func(obj *DaemonSet) { func(obj *DaemonSet) {
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 {
......
...@@ -34,7 +34,7 @@ func TestSetDefaultDaemonSet(t *testing.T) { ...@@ -34,7 +34,7 @@ func TestSetDefaultDaemonSet(t *testing.T) {
defaultIntOrString := intstr.FromInt(1) defaultIntOrString := intstr.FromInt(1)
defaultLabels := map[string]string{"foo": "bar"} defaultLabels := map[string]string{"foo": "bar"}
period := int64(v1.DefaultTerminationGracePeriodSeconds) period := int64(v1.DefaultTerminationGracePeriodSeconds)
defaultTemplate := &v1.PodTemplateSpec{ defaultTemplate := v1.PodTemplateSpec{
Spec: v1.PodSpec{ Spec: v1.PodSpec{
DNSPolicy: v1.DNSClusterFirst, DNSPolicy: v1.DNSClusterFirst,
RestartPolicy: v1.RestartPolicyAlways, RestartPolicy: v1.RestartPolicyAlways,
...@@ -45,6 +45,14 @@ func TestSetDefaultDaemonSet(t *testing.T) { ...@@ -45,6 +45,14 @@ func TestSetDefaultDaemonSet(t *testing.T) {
Labels: defaultLabels, Labels: defaultLabels,
}, },
} }
templateNoLabel := v1.PodTemplateSpec{
Spec: v1.PodSpec{
DNSPolicy: v1.DNSClusterFirst,
RestartPolicy: v1.RestartPolicyAlways,
SecurityContext: &v1.PodSecurityContext{},
TerminationGracePeriodSeconds: &period,
},
}
tests := []struct { tests := []struct {
original *DaemonSet original *DaemonSet
expected *DaemonSet expected *DaemonSet
...@@ -116,6 +124,7 @@ func TestSetDefaultDaemonSet(t *testing.T) { ...@@ -116,6 +124,7 @@ func TestSetDefaultDaemonSet(t *testing.T) {
original: &DaemonSet{}, original: &DaemonSet{},
expected: &DaemonSet{ expected: &DaemonSet{
Spec: DaemonSetSpec{ Spec: DaemonSetSpec{
Template: templateNoLabel,
UpdateStrategy: DaemonSetUpdateStrategy{ UpdateStrategy: DaemonSetUpdateStrategy{
Type: RollingUpdateDaemonSetStrategyType, Type: RollingUpdateDaemonSetStrategyType,
RollingUpdate: &RollingUpdateDaemonSet{ RollingUpdate: &RollingUpdateDaemonSet{
...@@ -136,6 +145,7 @@ func TestSetDefaultDaemonSet(t *testing.T) { ...@@ -136,6 +145,7 @@ func TestSetDefaultDaemonSet(t *testing.T) {
}, },
expected: &DaemonSet{ expected: &DaemonSet{
Spec: DaemonSetSpec{ Spec: DaemonSetSpec{
Template: templateNoLabel,
UpdateStrategy: DaemonSetUpdateStrategy{ UpdateStrategy: DaemonSetUpdateStrategy{
Type: RollingUpdateDaemonSetStrategyType, Type: RollingUpdateDaemonSetStrategyType,
RollingUpdate: &RollingUpdateDaemonSet{ RollingUpdate: &RollingUpdateDaemonSet{
...@@ -157,6 +167,7 @@ func TestSetDefaultDaemonSet(t *testing.T) { ...@@ -157,6 +167,7 @@ func TestSetDefaultDaemonSet(t *testing.T) {
}, },
expected: &DaemonSet{ expected: &DaemonSet{
Spec: DaemonSetSpec{ Spec: DaemonSetSpec{
Template: templateNoLabel,
UpdateStrategy: DaemonSetUpdateStrategy{ UpdateStrategy: DaemonSetUpdateStrategy{
Type: RollingUpdateDaemonSetStrategyType, Type: RollingUpdateDaemonSetStrategyType,
RollingUpdate: &RollingUpdateDaemonSet{ RollingUpdate: &RollingUpdateDaemonSet{
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -364,7 +364,7 @@ type DaemonSetSpec struct { ...@@ -364,7 +364,7 @@ type DaemonSetSpec struct {
// that matches the template's node selector (or on every node if no node // that matches the template's node selector (or on every node if no node
// selector is specified). // selector is specified).
// 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"`
// Update strategy to replace existing DaemonSet pods with new pods. // Update strategy to replace existing DaemonSet pods with new pods.
UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"` UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"`
......
...@@ -164,7 +164,7 @@ func ValidateDaemonSetStatusUpdate(controller, oldController *extensions.DaemonS ...@@ -164,7 +164,7 @@ func ValidateDaemonSetStatusUpdate(controller, oldController *extensions.DaemonS
} }
// ValidateDaemonSetTemplateUpdate tests that certain fields in the daemon set's pod template are not updated. // ValidateDaemonSetTemplateUpdate tests that certain fields in the daemon set's pod template are not updated.
func ValidateDaemonSetTemplateUpdate(podTemplate, oldPodTemplate *api.PodTemplateSpec, fldPath *field.Path) field.ErrorList { func ValidateDaemonSetTemplateUpdate(podTemplate, oldPodTemplate api.PodTemplateSpec, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
podSpec := podTemplate.Spec podSpec := podTemplate.Spec
// podTemplate.Spec is not a pointer, so we can modify NodeSelector and NodeName directly. // podTemplate.Spec is not a pointer, so we can modify NodeSelector and NodeName directly.
...@@ -210,20 +210,14 @@ func ValidateDaemonSetUpdateStrategy(strategy *extensions.DaemonSetUpdateStrateg ...@@ -210,20 +210,14 @@ func ValidateDaemonSetUpdateStrategy(strategy *extensions.DaemonSetUpdateStrateg
func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) field.ErrorList { func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
// The order of these checks is important because spec.Template is tested for nil value here
// before accessing its labels in the following check.
if spec.Template == nil {
allErrs = append(allErrs, field.Required(fldPath.Child("template"), ""))
return allErrs
}
allErrs = append(allErrs, ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) allErrs = append(allErrs, ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...)
selector, err := extensions.LabelSelectorAsSelector(spec.Selector) selector, err := extensions.LabelSelectorAsSelector(spec.Selector)
if err == nil && !selector.Matches(labels.Set(spec.Template.Labels)) { if err == nil && !selector.Matches(labels.Set(spec.Template.Labels)) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "metadata", "labels"), spec.Template.Labels, "`selector` does not match template `labels`")) allErrs = append(allErrs, field.Invalid(fldPath.Child("template", "metadata", "labels"), spec.Template.Labels, "`selector` does not match template `labels`"))
} }
allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpec(spec.Template, fldPath.Child("template"))...) allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpec(&spec.Template, fldPath.Child("template"))...)
// Daemons typically run on more than one node, so mark Read-Write persistent disks as invalid. // Daemons typically run on more than one node, so mark Read-Write persistent disks as invalid.
allErrs = append(allErrs, apivalidation.ValidateReadOnlyPersistentDisks(spec.Template.Spec.Volumes, fldPath.Child("template", "spec", "volumes"))...) allErrs = append(allErrs, apivalidation.ValidateReadOnlyPersistentDisks(spec.Template.Spec.Volumes, fldPath.Child("template", "spec", "volumes"))...)
// RestartPolicy has already been first-order validated as per ValidatePodTemplateSpec(). // RestartPolicy has already been first-order validated as per ValidatePodTemplateSpec().
......
...@@ -52,7 +52,7 @@ func TestListDaemonSets(t *testing.T) { ...@@ -52,7 +52,7 @@ func TestListDaemonSets(t *testing.T) {
}, },
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
...@@ -80,7 +80,7 @@ func TestGetDaemonSet(t *testing.T) { ...@@ -80,7 +80,7 @@ func TestGetDaemonSet(t *testing.T) {
}, },
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
...@@ -120,7 +120,7 @@ func TestUpdateDaemonSet(t *testing.T) { ...@@ -120,7 +120,7 @@ func TestUpdateDaemonSet(t *testing.T) {
}, },
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
...@@ -148,7 +148,7 @@ func TestUpdateDaemonSetUpdateStatus(t *testing.T) { ...@@ -148,7 +148,7 @@ func TestUpdateDaemonSetUpdateStatus(t *testing.T) {
}, },
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
Status: extensions.DaemonSetStatus{}, Status: extensions.DaemonSetStatus{},
}, },
...@@ -188,7 +188,7 @@ func TestCreateDaemonSet(t *testing.T) { ...@@ -188,7 +188,7 @@ func TestCreateDaemonSet(t *testing.T) {
}, },
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Template: &api.PodTemplateSpec{}, Template: api.PodTemplateSpec{},
}, },
}, },
}, },
......
...@@ -434,7 +434,7 @@ func (dsc *DaemonSetsController) manage(ds *extensions.DaemonSet) { ...@@ -434,7 +434,7 @@ func (dsc *DaemonSetsController) manage(ds *extensions.DaemonSet) {
for i := 0; i < createDiff; i++ { for i := 0; i < createDiff; i++ {
go func(ix int) { go func(ix int) {
defer createWait.Done() defer createWait.Done()
if err := dsc.podControl.CreatePodsOnNode(nodesNeedingDaemonPods[ix], ds.Namespace, ds.Spec.Template, ds); err != nil { if err := dsc.podControl.CreatePodsOnNode(nodesNeedingDaemonPods[ix], ds.Namespace, &ds.Spec.Template, ds); err != nil {
glog.V(2).Infof("Failed creation, decrementing expectations for set %q/%q", ds.Namespace, ds.Name) glog.V(2).Infof("Failed creation, decrementing expectations for set %q/%q", ds.Namespace, ds.Name)
dsc.expectations.CreationObserved(dsKey) dsc.expectations.CreationObserved(dsKey)
util.HandleError(err) util.HandleError(err)
......
...@@ -59,7 +59,7 @@ func newDaemonSet(name string) *extensions.DaemonSet { ...@@ -59,7 +59,7 @@ func newDaemonSet(name string) *extensions.DaemonSet {
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Selector: &extensions.LabelSelector{MatchLabels: simpleDaemonSetLabel}, Selector: &extensions.LabelSelector{MatchLabels: simpleDaemonSetLabel},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: simpleDaemonSetLabel, Labels: simpleDaemonSetLabel,
}, },
......
...@@ -960,11 +960,7 @@ func (d *DaemonSetDescriber) Describe(namespace, name string) (string, error) { ...@@ -960,11 +960,7 @@ func (d *DaemonSetDescriber) Describe(namespace, name string) (string, error) {
func describeDaemonSet(daemon *extensions.DaemonSet, events *api.EventList, running, waiting, succeeded, failed int) (string, error) { func describeDaemonSet(daemon *extensions.DaemonSet, events *api.EventList, running, waiting, succeeded, failed int) (string, error) {
return tabbedString(func(out io.Writer) error { return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", daemon.Name) fmt.Fprintf(out, "Name:\t%s\n", daemon.Name)
if daemon.Spec.Template != nil { fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&daemon.Spec.Template.Spec))
fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&daemon.Spec.Template.Spec))
} else {
fmt.Fprintf(out, "Image(s):\t%s\n", "<no template>")
}
selector, err := extensions.LabelSelectorAsSelector(daemon.Spec.Selector) selector, err := extensions.LabelSelectorAsSelector(daemon.Spec.Selector)
if err != nil { if err != nil {
// this shouldn't happen if LabelSelector passed validation // this shouldn't happen if LabelSelector passed validation
......
...@@ -44,7 +44,7 @@ func newValidDaemonSet() *extensions.DaemonSet { ...@@ -44,7 +44,7 @@ func newValidDaemonSet() *extensions.DaemonSet {
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Selector: &extensions.LabelSelector{MatchLabels: map[string]string{"a": "b"}}, Selector: &extensions.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"},
}, },
......
...@@ -90,7 +90,7 @@ var _ = Describe("Daemon set [Feature:DaemonSet]", func() { ...@@ -90,7 +90,7 @@ var _ = Describe("Daemon set [Feature:DaemonSet]", func() {
Name: dsName, Name: dsName,
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: label, Labels: label,
}, },
...@@ -148,7 +148,7 @@ var _ = Describe("Daemon set [Feature:DaemonSet]", func() { ...@@ -148,7 +148,7 @@ var _ = Describe("Daemon set [Feature:DaemonSet]", func() {
}, },
Spec: extensions.DaemonSetSpec{ Spec: extensions.DaemonSetSpec{
Selector: &extensions.LabelSelector{MatchLabels: complexLabel}, Selector: &extensions.LabelSelector{MatchLabels: complexLabel},
Template: &api.PodTemplateSpec{ Template: api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Labels: complexLabel, Labels: complexLabel,
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment