func main() { cf_debug_server.AddFlags(flag.CommandLine) cf_lager.AddFlags(flag.CommandLine) flag.Parse() l, _ := cf_lager.New("guardian") log.SetLogger(l) if *depotPath == "" { missing("-depot") } if *iodaemonBin == "" { missing("-iodaemonBin") } resolvedRootFSPath, err := filepath.EvalSymlinks(*rootFSPath) if err != nil { panic(err) } backend := &gardener.Gardener{ UidGenerator: wireUidGenerator(), Starter: wireStarter(), Networker: wireNetworker(), Containerizer: wireContainerizer(*depotPath, *iodaemonBin, resolvedRootFSPath), } gardenServer := server.New(*listenNetwork, *listenAddr, *graceTime, backend, log.Session("api")) err = gardenServer.Start() if err != nil { log.Fatal("failed-to-start-server", err) } signals := make(chan os.Signal, 1) go func() { <-signals gardenServer.Stop() os.Exit(0) }() signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) log.Info("started", lager.Data{ "network": *listenNetwork, "addr": *listenAddr, }) select {} }
package depot import ( "errors" "os" "path/filepath" "github.com/cloudfoundry-incubator/guardian/log" "github.com/pivotal-golang/lager" ) var plog = log.Session("depot") var ErrDoesNotExist = errors.New("does not exist") //go:generate counterfeiter . BundleSaver type BundleSaver interface { Save(path string) error } // a depot which stores containers as subdirs of a depot directory type DirectoryDepot struct { dir string } func New(dir string) *DirectoryDepot { return &DirectoryDepot{ dir: dir, } }
func wireStarter() *rundmc.Starter { runner := &log.Runner{CommandRunner: linux_command_runner.New(), Logger: log.Session("runner")} return rundmc.NewStarter(mustOpen("/proc/cgroups"), path.Join(os.TempDir(), fmt.Sprintf("cgroups-%s", *tag)), runner) }
"io" "io/ioutil" "os/exec" "strings" "github.com/cloudfoundry-incubator/garden" "github.com/cloudfoundry-incubator/goci/specs" "github.com/cloudfoundry-incubator/guardian/log" "github.com/cloudfoundry-incubator/guardian/rundmc/process_tracker" "github.com/cloudfoundry/gunk/command_runner" "github.com/pivotal-golang/lager" ) const DefaultPath = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" var plog = log.Session("runrunc") //go:generate counterfeiter . ProcessTracker type ProcessTracker interface { Run(id string, cmd *exec.Cmd, io garden.ProcessIO, tty *garden.TTYSpec, signaller process_tracker.Signaller) (garden.Process, error) } //go:generate counterfeiter . UidGenerator type UidGenerator interface { Generate() string } // da doo type RunRunc struct { tracker ProcessTracker commandRunner command_runner.CommandRunner