| package main |
|
|
| import ( |
| "log" |
| "os" |
| "time" |
|
|
| "github.com/play-with-docker/play-with-docker/config" |
| "github.com/play-with-docker/play-with-docker/docker" |
| "github.com/play-with-docker/play-with-docker/event" |
| "github.com/play-with-docker/play-with-docker/handlers" |
| "github.com/play-with-docker/play-with-docker/id" |
| "github.com/play-with-docker/play-with-docker/k8s" |
| "github.com/play-with-docker/play-with-docker/provisioner" |
| "github.com/play-with-docker/play-with-docker/pwd" |
| "github.com/play-with-docker/play-with-docker/pwd/types" |
| "github.com/play-with-docker/play-with-docker/scheduler" |
| "github.com/play-with-docker/play-with-docker/scheduler/task" |
| "github.com/play-with-docker/play-with-docker/storage" |
| ) |
|
|
| func main() { |
| config.ParseFlags() |
|
|
| e := initEvent() |
| s := initStorage() |
| df := initDockerFactory(s) |
| kf := initK8sFactory(s) |
|
|
| ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(df, s), provisioner.NewDinD(id.XIDGenerator{}, df, s)) |
| sp := provisioner.NewOverlaySessionProvisioner(df) |
|
|
| core := pwd.NewPWD(df, e, s, sp, ipf) |
|
|
| tasks := []scheduler.Task{ |
| task.NewCheckPorts(e, df), |
| task.NewCheckSwarmPorts(e, df), |
| task.NewCheckSwarmStatus(e, df), |
| task.NewCollectStats(e, df, s), |
| task.NewCheckK8sClusterStatus(e, kf), |
| task.NewCheckK8sClusterExposedPorts(e, kf), |
| } |
| sch, err := scheduler.NewScheduler(tasks, s, e, core) |
| if err != nil { |
| log.Fatal("Error initializing the scheduler: ", err) |
| } |
|
|
| sch.Start() |
|
|
| d, err := time.ParseDuration("2h") |
| if err != nil { |
| log.Fatalf("Cannot parse duration Got: %v", err) |
| } |
|
|
| playground := types.Playground{Domain: config.PlaygroundDomain, DefaultDinDInstanceImage: "franela/dind", AvailableDinDInstanceImages: []string{"franela/dind"}, AllowWindowsInstances: config.NoWindows, DefaultSessionDuration: d, Extras: map[string]interface{}{"LoginRedirect": "http://localhost:3000"}, Privileged: true} |
| if _, err := core.PlaygroundNew(playground); err != nil { |
| log.Fatalf("Cannot create default playground. Got: %v", err) |
| } |
|
|
| handlers.Bootstrap(core, e) |
| handlers.Register(nil) |
| } |
|
|
| func initStorage() storage.StorageApi { |
| s, err := storage.NewFileStorage(config.SessionsFile) |
| if err != nil && !os.IsNotExist(err) { |
| log.Fatal("Error initializing StorageAPI: ", err) |
| } |
| return s |
| } |
|
|
| func initEvent() event.EventApi { |
| return event.NewLocalBroker() |
| } |
|
|
| func initDockerFactory(s storage.StorageApi) docker.FactoryApi { |
| return docker.NewLocalCachedFactory(s) |
| } |
|
|
| func initK8sFactory(s storage.StorageApi) k8s.FactoryApi { |
| return k8s.NewLocalCachedFactory(s) |
| } |
|
|