mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 09:59:14 +00:00 
			
		
		
		
	Replace riddler with code that constructs config.json directly
Generated largely from the specified config; small parts taken from `docker image inspect`, such as the command line. Renamed some of the yaml keys to match the OCI spec rather than Docker Compose as we decided they are more readable, no more underscores. Add some extra functionality - tmpfs specification - fully general mount specification - no new privileges can be specified now For nostalgic reasons, using engine-api to talk to the docker cli as we only need an old API version, and it is nice and easy to vendor... Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
		
							
								
								
									
										119
									
								
								vendor/github.com/docker/engine-api/client/image_build.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								vendor/github.com/docker/engine-api/client/image_build.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| package client | ||||
|  | ||||
| import ( | ||||
| 	"encoding/base64" | ||||
| 	"encoding/json" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"golang.org/x/net/context" | ||||
|  | ||||
| 	"github.com/docker/engine-api/types" | ||||
| 	"github.com/docker/engine-api/types/container" | ||||
| ) | ||||
|  | ||||
| var headerRegexp = regexp.MustCompile(`\ADocker/.+\s\((.+)\)\z`) | ||||
|  | ||||
| // ImageBuild sends request to the daemon to build images. | ||||
| // The Body in the response implement an io.ReadCloser and it's up to the caller to | ||||
| // close it. | ||||
| func (cli *Client) ImageBuild(ctx context.Context, buildContext io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error) { | ||||
| 	query, err := imageBuildOptionsToQuery(options) | ||||
| 	if err != nil { | ||||
| 		return types.ImageBuildResponse{}, err | ||||
| 	} | ||||
|  | ||||
| 	headers := http.Header(make(map[string][]string)) | ||||
| 	buf, err := json.Marshal(options.AuthConfigs) | ||||
| 	if err != nil { | ||||
| 		return types.ImageBuildResponse{}, err | ||||
| 	} | ||||
| 	headers.Add("X-Registry-Config", base64.URLEncoding.EncodeToString(buf)) | ||||
| 	headers.Set("Content-Type", "application/tar") | ||||
|  | ||||
| 	serverResp, err := cli.postRaw(ctx, "/build", query, buildContext, headers) | ||||
| 	if err != nil { | ||||
| 		return types.ImageBuildResponse{}, err | ||||
| 	} | ||||
|  | ||||
| 	osType := getDockerOS(serverResp.header.Get("Server")) | ||||
|  | ||||
| 	return types.ImageBuildResponse{ | ||||
| 		Body:   serverResp.body, | ||||
| 		OSType: osType, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func imageBuildOptionsToQuery(options types.ImageBuildOptions) (url.Values, error) { | ||||
| 	query := url.Values{ | ||||
| 		"t": options.Tags, | ||||
| 	} | ||||
| 	if options.SuppressOutput { | ||||
| 		query.Set("q", "1") | ||||
| 	} | ||||
| 	if options.RemoteContext != "" { | ||||
| 		query.Set("remote", options.RemoteContext) | ||||
| 	} | ||||
| 	if options.NoCache { | ||||
| 		query.Set("nocache", "1") | ||||
| 	} | ||||
| 	if options.Remove { | ||||
| 		query.Set("rm", "1") | ||||
| 	} else { | ||||
| 		query.Set("rm", "0") | ||||
| 	} | ||||
|  | ||||
| 	if options.ForceRemove { | ||||
| 		query.Set("forcerm", "1") | ||||
| 	} | ||||
|  | ||||
| 	if options.PullParent { | ||||
| 		query.Set("pull", "1") | ||||
| 	} | ||||
|  | ||||
| 	if !container.Isolation.IsDefault(options.Isolation) { | ||||
| 		query.Set("isolation", string(options.Isolation)) | ||||
| 	} | ||||
|  | ||||
| 	query.Set("cpusetcpus", options.CPUSetCPUs) | ||||
| 	query.Set("cpusetmems", options.CPUSetMems) | ||||
| 	query.Set("cpushares", strconv.FormatInt(options.CPUShares, 10)) | ||||
| 	query.Set("cpuquota", strconv.FormatInt(options.CPUQuota, 10)) | ||||
| 	query.Set("cpuperiod", strconv.FormatInt(options.CPUPeriod, 10)) | ||||
| 	query.Set("memory", strconv.FormatInt(options.Memory, 10)) | ||||
| 	query.Set("memswap", strconv.FormatInt(options.MemorySwap, 10)) | ||||
| 	query.Set("cgroupparent", options.CgroupParent) | ||||
| 	query.Set("shmsize", strconv.FormatInt(options.ShmSize, 10)) | ||||
| 	query.Set("dockerfile", options.Dockerfile) | ||||
|  | ||||
| 	ulimitsJSON, err := json.Marshal(options.Ulimits) | ||||
| 	if err != nil { | ||||
| 		return query, err | ||||
| 	} | ||||
| 	query.Set("ulimits", string(ulimitsJSON)) | ||||
|  | ||||
| 	buildArgsJSON, err := json.Marshal(options.BuildArgs) | ||||
| 	if err != nil { | ||||
| 		return query, err | ||||
| 	} | ||||
| 	query.Set("buildargs", string(buildArgsJSON)) | ||||
|  | ||||
| 	labelsJSON, err := json.Marshal(options.Labels) | ||||
| 	if err != nil { | ||||
| 		return query, err | ||||
| 	} | ||||
| 	query.Set("labels", string(labelsJSON)) | ||||
| 	return query, nil | ||||
| } | ||||
|  | ||||
| func getDockerOS(serverHeader string) string { | ||||
| 	var osType string | ||||
| 	matches := headerRegexp.FindStringSubmatch(serverHeader) | ||||
| 	if len(matches) > 0 { | ||||
| 		osType = matches[1] | ||||
| 	} | ||||
| 	return osType | ||||
| } | ||||
		Reference in New Issue
	
	Block a user