func runRunPrepared(cmd *cobra.Command, args []string) (exit int) { if len(args) != 1 { cmd.Usage() return 254 } p, err := pkgPod.PodFromUUIDString(getDataDir(), args[0]) if err != nil { stderr.PrintE("problem retrieving pod", err) return 254 } defer p.Close() s, err := imagestore.NewStore(storeDir()) if err != nil { stderr.PrintE("cannot open store", err) return 254 } ts, err := treestore.NewStore(treeStoreDir(), s) if err != nil { stderr.PrintE("cannot open treestore", err) return 254 } if p.State() != pkgPod.Prepared { stderr.Printf("pod %q is not prepared", p.UUID) return 254 } _, manifest, err := p.PodManifest() if err != nil { stderr.PrintE("cannot read pod manifest", err) return 254 } if flagInteractive { if len(manifest.Apps) > 1 { stderr.Print("interactive option only supports pods with one app") return 254 } } // Make sure we have a metadata service available before we move to // run state so that the user can rerun the command without needing // to prepare the image again. if flagMDSRegister { if err := stage0.CheckMdsAvailability(); err != nil { stderr.Error(err) return 254 } } if err := p.ToRun(); err != nil { stderr.PrintE("cannot transition to run", err) return 254 } lfd, err := p.Fd() if err != nil { stderr.PrintE("unable to get lock fd", err) return 254 } rktgid, err := common.LookupGid(common.RktGroup) if err != nil { stderr.Printf("group %q not found, will use default gid when rendering images", common.RktGroup) rktgid = -1 } ovlOk := true if err := common.PathSupportsOverlay(getDataDir()); err != nil { if oerr, ok := err.(common.ErrOverlayUnsupported); ok { stderr.Printf("disabling overlay support: %q", oerr.Error()) ovlOk = false } else { stderr.PrintE("error determining overlay support", err) return 254 } } ovlPrep := p.UsesOverlay() // should not happen, maybe the data directory moved from an overlay-enabled fs to another location // between prepare and run-prepared if ovlPrep && !ovlOk { stderr.Print("unable to run prepared overlay-enabled pod: overlay not supported") return 254 } DNSConfMode, DNSConfig, HostsEntries, err := parseDNSFlags(flagHostsEntries, flagDNS, flagDNSSearch, flagDNSOpt, flagDNSDomain) if err != nil { stderr.PrintE("error with dns flags", err) return 254 } rcfg := stage0.RunConfig{ CommonConfig: &stage0.CommonConfig{ DataDir: getDataDir(), Store: s, TreeStore: ts, UUID: p.UUID, Debug: globalFlags.Debug, }, Net: flagNet, LockFd: lfd, Interactive: flagInteractive, DNSConfMode: DNSConfMode, DNSConfig: DNSConfig, HostsEntries: *HostsEntries, MDSRegister: flagMDSRegister, Apps: manifest.Apps, RktGid: rktgid, Hostname: flagHostname, InsecureCapabilities: globalFlags.InsecureFlags.SkipCapabilities(), InsecurePaths: globalFlags.InsecureFlags.SkipPaths(), InsecureSeccomp: globalFlags.InsecureFlags.SkipSeccomp(), UseOverlay: ovlPrep && ovlOk, } if globalFlags.Debug { stage0.InitDebug() } stage0.Run(rcfg, p.Path(), getDataDir()) // execs, never returns return 254 }
func runRunPrepared(cmd *cobra.Command, args []string) (exit int) { if len(args) != 1 { cmd.Usage() return 1 } p, err := getPodFromUUIDString(args[0]) if err != nil { stderr("prepared-run: problem retrieving pod: %v", err) return 1 } defer p.Close() s, err := store.NewStore(globalFlags.Dir) if err != nil { stderr("prepared-run: cannot open store: %v", err) return 1 } if !p.isPrepared { stderr("prepared-run: pod %q is not prepared", p.uuid) return 1 } if flagInteractive { ac, err := p.getAppCount() if err != nil { stderr("prepared-run: cannot get pod's app count: %v", err) return 1 } if ac > 1 { stderr("prepared-run: interactive option only supports pods with one app") return 1 } } // Make sure we have a metadata service available before we move to // run state so that the user can rerun the command without needing // to prepare the image again. if flagMDSRegister { if err := stage0.CheckMdsAvailability(); err != nil { stderr("prepare-run: %v", err) return 1 } } if err := p.xToRun(); err != nil { stderr("prepared-run: cannot transition to run: %v", err) return 1 } lfd, err := p.Fd() if err != nil { stderr("prepared-run: unable to get lock fd: %v", err) return 1 } apps, err := p.getApps() if err != nil { stderr("prepared-run: unable to get app list: %v", err) return 1 } rktgid, err := common.LookupGid(common.RktGroup) if err != nil { stderr("prepared-run: group %q not found, will use default gid when rendering images", common.RktGroup) rktgid = -1 } rcfg := stage0.RunConfig{ CommonConfig: stage0.CommonConfig{ Store: s, UUID: p.uuid, Debug: globalFlags.Debug, }, Net: flagNet, LockFd: lfd, Interactive: flagInteractive, MDSRegister: flagMDSRegister, Apps: apps, RktGid: rktgid, } if globalFlags.Debug { stage0.InitDebug() } stage0.Run(rcfg, p.path(), globalFlags.Dir) // execs, never returns return 1 }
func runRunPrepared(cmd *cobra.Command, args []string) (exit int) { if len(args) != 1 { cmd.Usage() return 1 } podUUID, err := resolveUUID(args[0]) if err != nil { stderr("Unable to resolve UUID: %v", err) return 1 } if globalFlags.Dir == "" { log.Printf("dir unset - using temporary directory") var err error globalFlags.Dir, err = ioutil.TempDir("", "rkt") if err != nil { stderr("error creating temporary directory: %v", err) return 1 } } s, err := store.NewStore(globalFlags.Dir) if err != nil { stderr("prepared-run: cannot open store: %v", err) return 1 } p, err := getPod(podUUID) if err != nil { stderr("prepared-run: cannot get pod: %v", err) return 1 } if !p.isPrepared { stderr("prepared-run: pod %q is not prepared", podUUID.String()) return 1 } if flagInteractive { ac, err := p.getAppCount() if err != nil { stderr("prepared-run: cannot get pod's app count: %v", err) return 1 } if ac > 1 { stderr("prepared-run: interactive option only supports pods with one app") return 1 } } // Make sure we have a metadata service available before we move to // run state so that the user can rerun the command without needing // to prepare the image again. if flagMDSRegister { if err := stage0.CheckMdsAvailability(); err != nil { stderr("prepare-run: %v", err) return 1 } } if err := p.xToRun(); err != nil { stderr("prepared-run: cannot transition to run: %v", err) return 1 } lfd, err := p.Fd() if err != nil { stderr("prepared-run: unable to get lock fd: %v", err) return 1 } apps, err := p.getApps() if err != nil { stderr("prepared-run: unable to get app list: %v", err) return 1 } rcfg := stage0.RunConfig{ CommonConfig: stage0.CommonConfig{ Store: s, UUID: p.uuid, Debug: globalFlags.Debug, }, PrivateNet: flagPrivateNet, LockFd: lfd, Interactive: flagInteractive, MDSRegister: flagMDSRegister, Apps: apps, } stage0.Run(rcfg, p.path(), globalFlags.Dir) // execs, never returns return 1 }