diff --git a/pkg/kubelet/config/common.go b/pkg/kubelet/config/common.go index 04cbd899462..e917f89880b 100644 --- a/pkg/kubelet/config/common.go +++ b/pkg/kubelet/config/common.go @@ -123,7 +123,7 @@ func tryDecodePodList(data []byte, source string, isFile bool) (parsed bool, pod return true, *newPods, err } -func tryDecodeSingleManifest(data []byte) (parsed bool, manifest v1beta1.ContainerManifest, pod api.Pod, err error) { +func tryDecodeSingleManifest(data []byte, source string, isFile bool) (parsed bool, manifest v1beta1.ContainerManifest, pod api.Pod, err error) { // TODO: should be api.Scheme.Decode // This is awful. DecodeInto() expects to find an APIObject, which // Manifest is not. We keep reading manifest for now for compat, but @@ -149,11 +149,14 @@ func tryDecodeSingleManifest(data []byte) (parsed bool, manifest v1beta1.Contain if err = api.Scheme.Convert(&newManifest, &pod); err != nil { return true, manifest, pod, err } + if err = applyDefaults(&pod, source, isFile); err != nil { + return true, manifest, pod, err + } // Success. return true, manifest, pod, nil } -func tryDecodeManifestList(data []byte) (parsed bool, manifests []v1beta1.ContainerManifest, pods api.PodList, err error) { +func tryDecodeManifestList(data []byte, source string, isFile bool) (parsed bool, manifests []v1beta1.ContainerManifest, pods api.PodList, err error) { // TODO: should be api.Scheme.Decode // See the comment in tryDecodeSingle(). if err = yaml.Unmarshal(data, &manifests); err != nil { @@ -174,6 +177,12 @@ func tryDecodeManifestList(data []byte) (parsed bool, manifests []v1beta1.Contai if err = api.Scheme.Convert(&list, &pods); err != nil { return true, manifests, pods, err } + for i := range pods.Items { + pod := &pods.Items[i] + if err = applyDefaults(pod, source, isFile); err != nil { + return true, manifests, pods, err + } + } // Success. return true, manifests, pods, nil } diff --git a/pkg/kubelet/config/file.go b/pkg/kubelet/config/file.go index ab8c9423a45..beb536cdd42 100644 --- a/pkg/kubelet/config/file.go +++ b/pkg/kubelet/config/file.go @@ -138,16 +138,12 @@ func extractFromFile(filename string) (pod api.Pod, err error) { return pod, err } - parsed, _, pod, manifestErr := tryDecodeSingleManifest(data) + parsed, _, pod, manifestErr := tryDecodeSingleManifest(data, filename, true) if parsed { if manifestErr != nil { // It parsed but could not be used. return pod, manifestErr } - // It parsed! - if err = applyDefaults(&pod, filename, true); err != nil { - return pod, err - } return pod, nil } diff --git a/pkg/kubelet/config/http.go b/pkg/kubelet/config/http.go index bb9e95f311b..d9638942a00 100644 --- a/pkg/kubelet/config/http.go +++ b/pkg/kubelet/config/http.go @@ -78,22 +78,19 @@ func (s *sourceURL) extractFromURL() error { s.data = data // First try as if it's a single manifest - parsed, manifest, pod, singleErr := tryDecodeSingleManifest(data) + parsed, manifest, pod, singleErr := tryDecodeSingleManifest(data, s.url, false) if parsed { if singleErr != nil { // It parsed but could not be used. return singleErr } // It parsed! - if err = applyDefaults(&pod, s.url, false); err != nil { - return err - } s.updates <- kubelet.PodUpdate{[]api.Pod{pod}, kubelet.SET, kubelet.HTTPSource} return nil } // That didn't work, so try an array of manifests. - parsed, manifests, pods, multiErr := tryDecodeManifestList(data) + parsed, manifests, pods, multiErr := tryDecodeManifestList(data, s.url, false) if parsed { if multiErr != nil { // It parsed but could not be used. @@ -106,13 +103,7 @@ func (s *sourceURL) extractFromURL() error { if len(manifests) == 0 && len(manifest.Version) != 0 { return singleErr } - // Assume it parsed. - for i := range pods.Items { - pod := &pods.Items[i] - if err = applyDefaults(pod, s.url, false); err != nil { - return err - } - } + // It parsed! s.updates <- kubelet.PodUpdate{pods.Items, kubelet.SET, kubelet.HTTPSource} return nil }