MCPcopy Create free account
hub / github.com/containers/image / ensureImageIsResolved

Method ensureImageIsResolved

openshift/openshift_src.go:131–177  ·  view source on GitHub ↗

ensureImageIsResolved sets up s.docker and s.imageStreamImageName

(ctx context.Context)

Source from the content-addressed store, hash-verified

129
130// ensureImageIsResolved sets up s.docker and s.imageStreamImageName
131func (s *openshiftImageSource) ensureImageIsResolved(ctx context.Context) error {
132 if s.docker != nil {
133 return nil
134 }
135
136 // FIXME: validate components per validation.IsValidPathSegmentName?
137 path := fmt.Sprintf("/oapi/v1/namespaces/%s/imagestreams/%s", s.client.ref.namespace, s.client.ref.stream)
138 body, err := s.client.doRequest(ctx, http.MethodGet, path, nil)
139 if err != nil {
140 return err
141 }
142 // Note: This does absolutely no kind/version checking or conversions.
143 var is imageStream
144 if err := json.Unmarshal(body, &is); err != nil {
145 return err
146 }
147 var te *tagEvent
148 for _, tag := range is.Status.Tags {
149 if tag.Tag != s.client.ref.dockerReference.Tag() {
150 continue
151 }
152 if len(tag.Items) > 0 {
153 te = &tag.Items[0]
154 break
155 }
156 }
157 if te == nil {
158 return errors.New("No matching tag found")
159 }
160 logrus.Debugf("tag event %#v", te)
161 dockerRefString, err := s.client.convertDockerImageReference(te.DockerImageReference)
162 if err != nil {
163 return err
164 }
165 logrus.Debugf("Resolved reference %#v", dockerRefString)
166 dockerRef, err := docker.ParseReference("//" + dockerRefString)
167 if err != nil {
168 return err
169 }
170 d, err := dockerRef.NewImageSource(ctx, s.sys)
171 if err != nil {
172 return err
173 }
174 s.docker = d
175 s.imageStreamImageName = te.Image
176 return nil
177}

Callers 3

GetManifestMethod · 0.95
GetBlobMethod · 0.95

Calls 5

ParseReferenceFunction · 0.92
doRequestMethod · 0.80
TagMethod · 0.65
NewImageSourceMethod · 0.65

Tested by

no test coverage detected