// Unmarshal a bytearray containing a list of resources of the specified types into // a slice of concrete structures for those resource types. // // Return as a slice of Resource interfaces, containing an element that is each of // the unmarshalled resources. func unmarshalSliceOfResources(tml []unversioned.TypeMetadata, b []byte) ([]unversioned.Resource, error) { log.Infof("Processing list of resources") unpacked := make([]unversioned.Resource, len(tml)) for i, tm := range tml { log.Infof(" - processing type %s", tm.Kind) r, err := newResource(tm) if err != nil { return nil, err } unpacked[i] = r } if err := yaml.Unmarshal(b, &unpacked); err != nil { return nil, err } // Validate the data in the structures. The validator does not handle slices, so // validate each resource separately. for _, r := range unpacked { if err := validator.Validate(r); err != nil { return nil, err } } log.Infof("Unpacked: %+v", unpacked) return unpacked, nil }
// Unmarshal a bytearray containing a single resource of the specified type into // a concrete structure for that resource type. // // Return as a slice of Resource interfaces, containing a single element that is // the unmarshalled resource. func unmarshalResource(tm unversioned.TypeMetadata, b []byte) ([]unversioned.Resource, error) { log.Infof("Processing type %s", tm.Kind) unpacked, err := newResource(tm) if err != nil { return nil, err } if err = yaml.Unmarshal(b, unpacked); err != nil { return nil, err } log.Infof("Type of unpacked data: %v", reflect.TypeOf(unpacked)) if err = validator.Validate(unpacked); err != nil { return nil, err } log.Infof("Unpacked: %+v", unpacked) return []unversioned.Resource{unpacked}, nil }