// Prepare sets up a pod based on the given config. func Prepare(cfg PrepareConfig, dir string, uuid *types.UUID) error { if err := os.MkdirAll(common.AppsInfoPath(dir), defaultRegularDirPerm); err != nil { return fmt.Errorf("error creating apps info directory: %v", err) } debug("Preparing stage1") if err := prepareStage1Image(cfg, cfg.Stage1Image, dir, cfg.UseOverlay); err != nil { return fmt.Errorf("error preparing stage1: %v", err) } var pmb []byte var err error if len(cfg.PodManifest) > 0 { pmb, err = validatePodManifest(cfg, dir) } else { pmb, err = generatePodManifest(cfg, dir) } if err != nil { return err } cfg.CommonConfig.ManifestData = string(pmb) debug("Writing pod manifest") fn := common.PodManifestPath(dir) if err := ioutil.WriteFile(fn, pmb, defaultRegularFilePerm); err != nil { return fmt.Errorf("error writing pod manifest: %v", err) } if cfg.UseOverlay { // mark the pod as prepared with overlay f, err := os.Create(filepath.Join(dir, common.OverlayPreparedFilename)) if err != nil { return fmt.Errorf("error writing overlay marker file: %v", err) } defer f.Close() } if cfg.PrivateUsers.Shift > 0 { // mark the pod as prepared for user namespaces uidrangeBytes := cfg.PrivateUsers.Serialize() if err := ioutil.WriteFile(filepath.Join(dir, common.PrivateUsersPreparedFilename), uidrangeBytes, defaultRegularFilePerm); err != nil { return fmt.Errorf("error writing userns marker file: %v", err) } } return nil }
// Prepare sets up a pod based on the given config. func Prepare(cfg PrepareConfig, dir string, uuid *types.UUID) error { if err := os.MkdirAll(common.AppsInfoPath(dir), common.DefaultRegularDirPerm); err != nil { return errwrap.Wrap(errors.New("error creating apps info directory"), err) } debug("Preparing stage1") if err := prepareStage1Image(cfg, dir); err != nil { return errwrap.Wrap(errors.New("error preparing stage1"), err) } var pmb []byte var err error if len(cfg.PodManifest) > 0 { pmb, err = validatePodManifest(cfg, dir) } else { pmb, err = generatePodManifest(cfg, dir) } if err != nil { return err } cfg.CommonConfig.ManifestData = string(pmb) // create pod lock file for app add/rm operations. f, err := os.OpenFile(common.PodManifestLockPath(dir), os.O_CREATE|os.O_RDWR, 0600) if err != nil { return err } f.Close() debug("Writing pod manifest") fn := common.PodManifestPath(dir) if err := ioutil.WriteFile(fn, pmb, common.DefaultRegularFilePerm); err != nil { return errwrap.Wrap(errors.New("error writing pod manifest"), err) } f, err = os.OpenFile(common.PodCreatedPath(dir), os.O_CREATE|os.O_RDWR, common.DefaultRegularFilePerm) if err != nil { return err } f.Close() if cfg.UseOverlay { // mark the pod as prepared with overlay f, err := os.Create(filepath.Join(dir, common.OverlayPreparedFilename)) if err != nil { return errwrap.Wrap(errors.New("error writing overlay marker file"), err) } defer f.Close() } if cfg.PrivateUsers.Shift > 0 { // mark the pod as prepared for user namespaces uidrangeBytes := cfg.PrivateUsers.Serialize() if err := ioutil.WriteFile(filepath.Join(dir, common.PrivateUsersPreparedFilename), uidrangeBytes, common.DefaultRegularFilePerm); err != nil { return errwrap.Wrap(errors.New("error writing userns marker file"), err) } } return nil }