@@ -121,9 +121,10 @@ func NewImageLayerIndex(lw ImageListWatch) ImageLayerIndex {
121
121
return imageLayerIndex {informer : informer }
122
122
}
123
123
124
- // manifestFromImage attempts to find a manifest blob description from
125
- // an image. Images older than schema2 in Docker do not have a manifest blob.
126
- func manifestFromImage (image * imagev1.Image ) * imagev1.ImageLayer {
124
+ // configFromImage attempts to find a config blob description from
125
+ // an image. Images older than schema2 in Docker do not have a config blob - the manifest
126
+ // has that data embedded.
127
+ func configFromImage (image * imagev1.Image ) * imagev1.ImageLayer {
127
128
if image .DockerImageManifestMediaType != "application/vnd.docker.distribution.manifest.v2+json" {
128
129
return nil
129
130
}
@@ -134,7 +135,7 @@ func manifestFromImage(image *imagev1.Image) *imagev1.ImageLayer {
134
135
}
135
136
return & imagev1.ImageLayer {
136
137
Name : meta .ID ,
137
- MediaType : image .DockerImageManifestMediaType ,
138
+ MediaType : "application/vnd.docker.container. image.v1+json" ,
138
139
}
139
140
}
140
141
@@ -145,16 +146,22 @@ func manifestFromImage(image *imagev1.Image) *imagev1.ImageLayer {
145
146
type ImageLayers struct {
146
147
Name string
147
148
ResourceVersion string
148
- Manifest * imagev1.ImageLayer
149
+ MediaType string
150
+ Config * imagev1.ImageLayer
149
151
Layers []imagev1.ImageLayer
150
152
}
151
153
152
154
func imageLayersForImage (image * imagev1.Image ) * ImageLayers {
155
+ mediaType := image .DockerImageManifestMediaType
156
+ if len (mediaType ) == 0 {
157
+ mediaType = "application/vnd.docker.distribution.manifest.v2+json"
158
+ }
153
159
return & ImageLayers {
154
160
Name : image .Name ,
155
161
ResourceVersion : image .ResourceVersion ,
162
+ MediaType : mediaType ,
163
+ Config : configFromImage (image ),
156
164
Layers : image .DockerImageLayers ,
157
- Manifest : manifestFromImage (image ),
158
165
}
159
166
}
160
167
@@ -170,15 +177,16 @@ func (l *ImageLayers) DeepCopyObject() runtime.Object {
170
177
layers = make ([]imagev1.ImageLayer , len (l .Layers ))
171
178
copy (layers , l .Layers )
172
179
}
173
- var manifest * imagev1.ImageLayer
174
- if l .Manifest != nil {
175
- copied := * l .Manifest
176
- manifest = & copied
180
+ var config * imagev1.ImageLayer
181
+ if l .Config != nil {
182
+ copied := * l .Config
183
+ config = & copied
177
184
}
178
185
return & ImageLayers {
179
186
Name : l .Name ,
180
187
ResourceVersion : l .ResourceVersion ,
181
- Manifest : manifest ,
188
+ MediaType : l .MediaType ,
189
+ Config : config ,
182
190
Layers : layers ,
183
191
}
184
192
}
0 commit comments