Merge pull request #5784 from wojtek-t/applyDefaultsInTryDecode

Hide applyDefaults method under pkg/kubelet/config
pull/6/head
Victor Marmol 2015-03-23 07:32:00 -07:00
commit 4e3c07543e
3 changed files with 15 additions and 19 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}