func imageWithLayers(id, ref string, configName *string, layers ...string) imageapi.Image { image := imageapi.Image{ ObjectMeta: kapi.ObjectMeta{ Name: id, Annotations: map[string]string{ imageapi.ManagedByOpenShiftAnnotation: "true", }, }, DockerImageReference: ref, } if configName != nil { image.DockerImageMetadata = imageapi.DockerImage{ ID: *configName, } image.DockerImageConfig = fmt.Sprintf("{Digest: %s}", *configName) } image.DockerImageLayers = []imageapi.ImageLayer{} for _, layer := range layers { image.DockerImageLayers = append(image.DockerImageLayers, imageapi.ImageLayer{Name: layer}) } return image }
func Convert_v1beta3_Image_To_api_Image(in *Image, out *newer.Image, s conversion.Scope) error { if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { return err } out.DockerImageReference = in.DockerImageReference out.DockerImageManifest = in.DockerImageManifest out.DockerImageManifestMediaType = in.DockerImageManifestMediaType out.DockerImageConfig = in.DockerImageConfig version := in.DockerImageMetadataVersion if len(version) == 0 { version = "1.0" } if len(in.DockerImageMetadata.Raw) > 0 { // TODO: add a way to default the expected kind and version of an object if not set obj, err := api.Scheme.New(unversioned.GroupVersionKind{Version: version, Kind: "DockerImage"}) if err != nil { return err } if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), in.DockerImageMetadata.Raw, obj); err != nil { return err } if err := s.Convert(obj, &out.DockerImageMetadata, 0); err != nil { return err } } out.DockerImageMetadataVersion = version return nil }
func autoConvert_v1_Image_To_api_Image(in *Image, out *api.Image, s conversion.Scope) error { if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { return err } out.DockerImageReference = in.DockerImageReference // TODO: Inefficient conversion - can we improve it? if err := s.Convert(&in.DockerImageMetadata, &out.DockerImageMetadata, 0); err != nil { return err } out.DockerImageMetadataVersion = in.DockerImageMetadataVersion out.DockerImageManifest = in.DockerImageManifest out.DockerImageLayers = *(*[]api.ImageLayer)(unsafe.Pointer(&in.DockerImageLayers)) if in.Signatures != nil { in, out := &in.Signatures, &out.Signatures *out = make([]api.ImageSignature, len(*in)) for i := range *in { if err := Convert_v1_ImageSignature_To_api_ImageSignature(&(*in)[i], &(*out)[i], s); err != nil { return err } } } else { out.Signatures = nil } out.DockerImageSignatures = *(*[][]byte)(unsafe.Pointer(&in.DockerImageSignatures)) out.DockerImageManifestMediaType = in.DockerImageManifestMediaType out.DockerImageConfig = in.DockerImageConfig return nil }
// deserializedManifestFillImageMetadata fills a given image with metadata. func (r *repository) deserializedManifestFillImageMetadata(manifest *schema2.DeserializedManifest, image *imageapi.Image) error { configBytes, err := r.Blobs(r.ctx).Get(r.ctx, manifest.Config.Digest) if err != nil { context.GetLogger(r.ctx).Errorf("failed to get image config %s: %v", manifest.Config.Digest.String(), err) return err } image.DockerImageConfig = string(configBytes) if err := imageapi.ImageWithMetadata(image); err != nil { return err } return nil }
func (h *manifestSchema2Handler) FillImageMetadata(ctx context.Context, image *imageapi.Image) error { // The manifest.Config references a configuration object for a container by its digest. // It needs to be fetched in order to fill an image object metadata below. configBytes, err := h.repo.Blobs(ctx).Get(ctx, h.manifest.Config.Digest) if err != nil { context.GetLogger(ctx).Errorf("failed to get image config %s: %v", h.manifest.Config.Digest.String(), err) return err } image.DockerImageConfig = string(configBytes) if err := imageapi.ImageWithMetadata(image); err != nil { return err } return nil }
func Convert_v1_Image_To_api_Image(in *Image, out *newer.Image, s conversion.Scope) error { if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { return err } out.DockerImageReference = in.DockerImageReference out.DockerImageManifest = in.DockerImageManifest out.DockerImageManifestMediaType = in.DockerImageManifestMediaType out.DockerImageConfig = in.DockerImageConfig version := in.DockerImageMetadataVersion if len(version) == 0 { version = "1.0" } if len(in.DockerImageMetadata.Raw) > 0 { // TODO: add a way to default the expected kind and version of an object if not set obj, err := api.Scheme.New(unversioned.GroupVersionKind{Version: version, Kind: "DockerImage"}) if err != nil { return err } if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), in.DockerImageMetadata.Raw, obj); err != nil { return err } if err := s.Convert(obj, &out.DockerImageMetadata, 0); err != nil { return err } } out.DockerImageMetadataVersion = version if in.DockerImageLayers != nil { out.DockerImageLayers = make([]newer.ImageLayer, len(in.DockerImageLayers)) for i := range in.DockerImageLayers { out.DockerImageLayers[i].MediaType = in.DockerImageLayers[i].MediaType out.DockerImageLayers[i].Name = in.DockerImageLayers[i].Name out.DockerImageLayers[i].LayerSize = in.DockerImageLayers[i].LayerSize } } else { out.DockerImageLayers = nil } if in.Signatures != nil { out.Signatures = make([]newer.ImageSignature, len(in.Signatures)) for i := range in.Signatures { if err := s.Convert(&in.Signatures[i], &out.Signatures[i], 0); err != nil { return err } } } else { out.Signatures = nil } if in.DockerImageSignatures != nil { out.DockerImageSignatures = nil for _, v := range in.DockerImageSignatures { out.DockerImageSignatures = append(out.DockerImageSignatures, v) } } else { out.DockerImageSignatures = nil } return nil }