ensureImageIsResolved sets up s.docker and s.imageStreamImageName
(ctx context.Context)
| 129 | |
| 130 | // ensureImageIsResolved sets up s.docker and s.imageStreamImageName |
| 131 | func (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 | } |
no test coverage detected