func (aci *Aci) prepareBuildAci() (string, error) { logs.WithFields(aci.fields).Debug("Preparing builder") if err := os.MkdirAll(aci.target+pathBuilder+common.PathRootfs, 0777); err != nil { return "", errs.WithEF(err, aci.fields.WithField("path", aci.target+pathBuilder), "Failed to create builder aci path") } if err := ioutil.WriteFile(aci.target+pathBuilder+common.PathRootfs+"/.keep", []byte(""), 0644); err != nil { return "", errs.WithEF(err, aci.fields.WithField("file", aci.target+pathBuilder+common.PathRootfs+"/.keep"), "Failed to write keep file") } capa, err := types.NewLinuxCapabilitiesRetainSet("all") if err != nil { return "", errs.WithEF(err, aci.fields, "Failed to create all capability retain Set") } allIsolator, err := capa.AsIsolator() if err != nil { return "", errs.WithEF(err, aci.fields, "Failed to prepare all retain set isolator") } aci.manifest.Aci.App.Isolators = types.Isolators([]types.Isolator{*allIsolator}) if err := common.WriteAciManifest(aci.manifest, aci.target+pathBuilder+common.PathManifest, common.PrefixBuilder+aci.manifest.NameAndVersion.Name(), BuildVersion); err != nil { return "", err } if err := aci.tarAci(aci.target + pathBuilder); err != nil { return "", err } logs.WithF(aci.fields.WithField("path", aci.target+pathBuilder+pathImageAci)).Info("Importing build to rkt") hash, err := Home.Rkt.FetchInsecure(aci.target + pathBuilder + pathImageAci) if err != nil { return "", errs.WithEF(err, aci.fields, "fetch of builder aci failed") } return hash, nil }
func (b *Builder) writeManifest() error { upperId, err := b.upperTreeStoreId() if err != nil { return err } attrMerger, err := merger.NewAttributesMerger(b.stage1Rootfs + PATH_DGR + PATH_BUILDER + PATH_ATTRIBUTES) if err != nil { logs.WithE(err).Warn("Failed to prepare attributes") } attributes := attrMerger.Merge() logs.WithFields(b.fields).WithField("attributes", attributes).Debug("Merged attributes for manifest templating") content, err := ioutil.ReadFile(b.aciTargetPath + common.PathManifestYmlTmpl) if err != nil { return errs.WithEF(err, b.fields.WithField("file", b.aciTargetPath+common.PathManifestYmlTmpl), "Failed to read manifest template") } aciManifest, err := common.ProcessManifestTemplate(string(content), attributes, true) if err != nil { return errs.WithEF(err, b.fields.WithField("content", string(content)), "Failed to process manifest template") } target := b.pod.Root + PATH_OVERLAY + "/" + upperId + PATH_UPPER + common.PathManifest dgrVersion, ok := manifestApp(b.pod).App.Environment.Get(common.EnvDgrVersion) if !ok { return errs.WithF(b.fields, "Cannot find dgr version") } if aciManifest.NameAndVersion.Version() == "" { aciManifest.NameAndVersion = *common.NewACFullName(aciManifest.NameAndVersion.Name() + ":" + common.GenerateVersion(b.aciTargetPath)) } if err := common.WriteAciManifest(aciManifest, target, aciManifest.NameAndVersion.Name(), dgrVersion); err != nil { return errs.WithEF(err, b.fields.WithField("file", target), "Failed to write manifest") } return nil }