func (lb *FileBackend) BuildACI(layerNumber int, layerID string, dockerURL *types.ParsedDockerURL, outputDir string, tmpBaseDir string, curPwl []string, compression common.Compression) (string, *schema.ImageManifest, error) { tmpDir, err := ioutil.TempDir(tmpBaseDir, "docker2aci-") if err != nil { return "", nil, fmt.Errorf("error creating dir: %v", err) } defer os.RemoveAll(tmpDir) j, err := getJson(lb.file, layerID) if err != nil { return "", nil, fmt.Errorf("error getting image json: %v", err) } layerData := types.DockerImageData{} if err := json.Unmarshal(j, &layerData); err != nil { return "", nil, fmt.Errorf("error unmarshaling layer data: %v", err) } tmpLayerPath := path.Join(tmpDir, layerID) tmpLayerPath += ".tar" layerFile, err := extractEmbeddedLayer(lb.file, layerID, tmpLayerPath) if err != nil { return "", nil, fmt.Errorf("error getting layer from file: %v", err) } defer layerFile.Close() util.Debug("Generating layer ACI...") aciPath, manifest, err := common.GenerateACI(layerNumber, layerData, dockerURL, outputDir, layerFile, curPwl, compression) if err != nil { return "", nil, fmt.Errorf("error generating ACI: %v", err) } return aciPath, manifest, nil }
func (rb *RepositoryBackend) buildACIV1(layerNumber int, layerID string, dockerURL *types.ParsedDockerURL, outputDir string, tmpBaseDir string, curPwl []string, compression common.Compression) (string, *schema.ImageManifest, error) { tmpDir, err := ioutil.TempDir(tmpBaseDir, "docker2aci-") if err != nil { return "", nil, fmt.Errorf("error creating dir: %v", err) } defer os.RemoveAll(tmpDir) j, size, err := rb.getJsonV1(layerID, rb.repoData.Endpoints[0], rb.repoData) if err != nil { return "", nil, fmt.Errorf("error getting image json: %v", err) } layerData := types.DockerImageData{} if err := json.Unmarshal(j, &layerData); err != nil { return "", nil, fmt.Errorf("error unmarshaling layer data: %v", err) } layerFile, err := rb.getLayerV1(layerID, rb.repoData.Endpoints[0], rb.repoData, size, tmpDir) if err != nil { return "", nil, fmt.Errorf("error getting the remote layer: %v", err) } defer layerFile.Close() util.Debug("Generating layer ACI...") aciPath, manifest, err := common.GenerateACI(layerNumber, layerData, dockerURL, outputDir, layerFile, curPwl, compression) if err != nil { return "", nil, fmt.Errorf("error generating ACI: %v", err) } return aciPath, manifest, nil }
func (rb *RepositoryBackend) buildACIV2(layerNumber int, layerID string, dockerURL *types.ParsedDockerURL, outputDir string, tmpBaseDir string, curPwl []string, compression common.Compression) (string, *schema.ImageManifest, error) { manifest := rb.imageManifests[*dockerURL] layerIndex, err := getLayerIndex(layerID, manifest) if err != nil { return "", nil, err } if len(manifest.History) <= layerIndex { return "", nil, fmt.Errorf("history not found for layer %s", layerID) } layerData := types.DockerImageData{} if err := json.Unmarshal([]byte(manifest.History[layerIndex].V1Compatibility), &layerData); err != nil { return "", nil, fmt.Errorf("error unmarshaling layer data: %v", err) } tmpDir, err := ioutil.TempDir(tmpBaseDir, "docker2aci-") if err != nil { return "", nil, fmt.Errorf("error creating dir: %v", err) } defer os.RemoveAll(tmpDir) layerFile, err := rb.getLayerV2(layerID, dockerURL, tmpDir) if err != nil { return "", nil, fmt.Errorf("error getting the remote layer: %v", err) } defer layerFile.Close() util.Debug("Generating layer ACI...") aciPath, aciManifest, err := common.GenerateACI(layerNumber, layerData, dockerURL, outputDir, layerFile, curPwl, compression) if err != nil { return "", nil, fmt.Errorf("error generating ACI: %v", err) } return aciPath, aciManifest, nil }