Refactor registry Push
							parent
							
								
									1b23cb09da
								
							
						
					
					
						commit
						a2e94b289c
					
				|  | @ -290,9 +290,8 @@ func (r *Registry) GetRepositoryData(remote string) (*RepositoryData, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Push a local image to the registry
 | // Push a local image to the registry
 | ||||||
| func (r *Registry) PushImage(imgData *ImgData, jsonRaw []byte, layer io.Reader, registry string, token []string) error { | func (r *Registry) PushImageJsonRegistry(imgData *ImgData, jsonRaw []byte, registry string, token []string) error { | ||||||
| 	registry = "https://" + registry + "/v1" | 	registry = "https://" + registry + "/v1" | ||||||
| 
 |  | ||||||
| 	client := r.getHttpClient() | 	client := r.getHttpClient() | ||||||
| 
 | 
 | ||||||
| 	// FIXME: try json with UTF8
 | 	// FIXME: try json with UTF8
 | ||||||
|  | @ -302,8 +301,8 @@ func (r *Registry) PushImage(imgData *ImgData, jsonRaw []byte, layer io.Reader, | ||||||
| 	} | 	} | ||||||
| 	req.Header.Add("Content-type", "application/json") | 	req.Header.Add("Content-type", "application/json") | ||||||
| 	req.Header.Set("Authorization", "Token "+strings.Join(token, ",")) | 	req.Header.Set("Authorization", "Token "+strings.Join(token, ",")) | ||||||
| 
 |  | ||||||
| 	req.Header.Set("X-Docker-Checksum", imgData.Checksum) | 	req.Header.Set("X-Docker-Checksum", imgData.Checksum) | ||||||
|  | 
 | ||||||
| 	utils.Debugf("Setting checksum for %s: %s", imgData.Id, imgData.Checksum) | 	utils.Debugf("Setting checksum for %s: %s", imgData.Id, imgData.Checksum) | ||||||
| 	res, err := doWithCookies(client, req) | 	res, err := doWithCookies(client, req) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -328,35 +327,39 @@ func (r *Registry) PushImage(imgData *ImgData, jsonRaw []byte, layer io.Reader, | ||||||
| 		} | 		} | ||||||
| 		return fmt.Errorf("HTTP code %d while uploading metadata: %s", res.StatusCode, errBody) | 		return fmt.Errorf("HTTP code %d while uploading metadata: %s", res.StatusCode, errBody) | ||||||
| 	} | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| 	req3, err := http.NewRequest("PUT", registry+"/images/"+imgData.Id+"/layer", layer) | func (r *Registry) PushImageLayerRegistry(imgId string, layer io.Reader, registry string, token []string) error { | ||||||
|  | 	registry = "https://" + registry + "/v1" | ||||||
|  | 	client := r.getHttpClient() | ||||||
|  | 
 | ||||||
|  | 	req, err := http.NewRequest("PUT", registry+"/images/"+imgId+"/layer", layer) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 	req.ContentLength = -1 | ||||||
| 	req3.ContentLength = -1 | 	req.TransferEncoding = []string{"chunked"} | ||||||
| 	req3.TransferEncoding = []string{"chunked"} | 	req.Header.Set("Authorization", "Token "+strings.Join(token, ",")) | ||||||
| 	req3.Header.Set("Authorization", "Token "+strings.Join(token, ",")) | 	res, err := doWithCookies(client, req) | ||||||
| 	res3, err := doWithCookies(client, req3) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("Failed to upload layer: %s", err) | 		return fmt.Errorf("Failed to upload layer: %s", err) | ||||||
| 	} | 	} | ||||||
| 	defer res3.Body.Close() | 	defer res.Body.Close() | ||||||
| 
 | 
 | ||||||
| 	if res3.StatusCode != 200 { | 	if res.StatusCode != 200 { | ||||||
| 		errBody, err := ioutil.ReadAll(res3.Body) | 		errBody, err := ioutil.ReadAll(res.Body) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return fmt.Errorf("HTTP code %d while uploading metadata and error when"+ | 			return fmt.Errorf("HTTP code %d while uploading metadata and error when trying to parse response body: %s", res.StatusCode, err) | ||||||
| 				" trying to parse response body: %v", res.StatusCode, err) |  | ||||||
| 		} | 		} | ||||||
| 		return fmt.Errorf("Received HTTP code %d while uploading layer: %s", res3.StatusCode, errBody) | 		return fmt.Errorf("Received HTTP code %d while uploading layer: %s", res.StatusCode, errBody) | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // push a tag on the registry.
 | // push a tag on the registry.
 | ||||||
| // Remote has the format '<user>/<repo>
 | // Remote has the format '<user>/<repo>
 | ||||||
| func (r *Registry) pushTag(remote, revision, tag, registry string, token []string) error { | func (r *Registry) PushRegistryTag(remote, revision, tag, registry string, token []string) error { | ||||||
| 	// "jsonify" the string
 | 	// "jsonify" the string
 | ||||||
| 	revision = "\"" + revision + "\"" | 	revision = "\"" + revision + "\"" | ||||||
| 	registry = "https://" + registry + "/v1" | 	registry = "https://" + registry + "/v1" | ||||||
|  | @ -382,28 +385,7 @@ func (r *Registry) pushTag(remote, revision, tag, registry string, token []strin | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // FIXME: this should really be PushTag
 | func (r *Registry) PushImageJsonIndex(remote string, imgList []*ImgData, validate bool) (*RepositoryData, error) { | ||||||
| func (r *Registry) PushLayer(remote, tag, imgId, registry string, token []string) error { |  | ||||||
| 	// Check if the local impage exists
 |  | ||||||
| 	img, err := graph.Get(imgId) |  | ||||||
| 	if err != nil { |  | ||||||
| 		fmt.Fprintf(stdout, "Skipping tag %s:%s: %s does not exist\r\n", remote, tag, imgId) |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	fmt.Fprintf(stdout, "Pushing image %s:%s\r\n", remote, tag) |  | ||||||
| 	// Push the image
 |  | ||||||
| 	if err = graph.PushImage(stdout, img, registry, token); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	fmt.Fprintf(stdout, "Registering tag %s:%s\r\n", remote, tag) |  | ||||||
| 	// And then the tag
 |  | ||||||
| 	if err = graph.pushTag(remote, imgId, tag, registry, token); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (r *Registry) PushJsonIndex(remote string, imgList []*ImgData, validate bool) (*RepositoryData, error) { |  | ||||||
| 	client := r.getHttpClient() | 	client := r.getHttpClient() | ||||||
| 
 | 
 | ||||||
| 	imgListJson, err := json.Marshal(imgList) | 	imgListJson, err := json.Marshal(imgList) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue