func (ctx *CommandContext) restartContainer(c *cobra.Command, args []string) { t := ctx.Transport.Get() if err := ExtractContainerLocatorsFromDeployment(t, ctx.deploymentPath, &args); err != nil { cmd.Fail(1, err.Error()) } if len(args) < 1 { cmd.Fail(1, "Valid arguments: <id> ...") } ids, err := cloc.NewContainerLocators(t, args...) if err != nil { cmd.Fail(1, "You must pass one or more valid service names: %s", err.Error()) } cmd.Executor{ On: ids, Serial: func(on cmd.Locator) cmd.JobRequest { return &cjobs.RestartContainerRequest{ Id: cloc.AsIdentifier(on), } }, Output: os.Stdout, Transport: t, }.StreamAndExit() }
func (ctx *CommandContext) linkContainers(c *cobra.Command, args []string) { if len(args) < 1 { cmd.Fail(1, "Valid arguments: <id> ...") } t := ctx.Transport.Get() ids, err := cloc.NewContainerLocators(t, args...) if err != nil { cmd.Fail(1, "You must pass one or more valid service names: %s", err.Error()) } if ctx.networkLinks.NetworkLinks == nil { ctx.networkLinks.NetworkLinks = &containers.NetworkLinks{} } cmd.Executor{ On: ids, Group: func(on ...cmd.Locator) cmd.JobRequest { links := &containers.ContainerLinks{make([]containers.ContainerLink, 0, len(on))} for i := range on { links.Links = append(links.Links, containers.ContainerLink{cloc.AsIdentifier(on[i]), *ctx.networkLinks.NetworkLinks}) } return &cjobs.LinkContainersRequest{links} }, Output: os.Stdout, OnSuccess: func(r *cmd.CliJobResponse, w io.Writer, job cmd.RequestedJob) { fmt.Fprintf(w, "Links set on %s\n", job.Request.(*cjobs.LinkContainersRequest).ContainerLinks.String()) }, Transport: t, }.StreamAndExit() }
func (ctx *CommandContext) deleteContainer(c *cobra.Command, args []string) { t := ctx.Transport.Get() if err := ExtractContainerLocatorsFromDeployment(t, ctx.deploymentPath, &args); err != nil { cmd.Fail(1, err.Error()) } if len(args) < 1 { cmd.Fail(1, "Valid arguments: <id> ...") } ids, err := cloc.NewContainerLocators(t, args...) if err != nil { cmd.Fail(1, "You must pass one or more valid service names: %s", err.Error()) } cmd.Executor{ On: ids, Serial: func(on cmd.Locator) cmd.JobRequest { return &cjobs.DeleteContainerRequest{ Id: cloc.AsIdentifier(on), } }, Output: os.Stdout, OnSuccess: func(r *cmd.CliJobResponse, w io.Writer, job cmd.RequestedJob) { fmt.Fprintf(w, "Deleted %s", string(job.Request.(*cjobs.DeleteContainerRequest).Id)) }, Transport: t, }.StreamAndExit() }
func (ctx *CommandContext) setEnvironment(c *cobra.Command, args []string) { if err := ctx.environment.ExtractVariablesFrom(&args, false); err != nil { cmd.Fail(1, err.Error()) } if len(args) < 1 { cmd.Fail(1, "Valid arguments: <name>... <key>=<value>...") } t := ctx.Transport.Get() ids, err := cloc.NewContainerLocators(t, args...) if err != nil { cmd.Fail(1, "You must pass one or more valid service names: %s", err.Error()) } cmd.Executor{ On: ids, Serial: func(on cmd.Locator) cmd.JobRequest { ctx.environment.Description.Id = cloc.AsIdentifier(on) if ctx.resetEnv { return &cjobs.PutEnvironmentRequest{ctx.environment.Description} } return &cjobs.PatchEnvironmentRequest{ctx.environment.Description} }, Output: os.Stdout, Transport: t, }.StreamAndExit() }
func (ctx *CommandContext) installImage(c *cobra.Command, args []string) { if err := ctx.environment.ExtractVariablesFrom(&args, true); err != nil { cmd.Fail(1, err.Error()) } if len(args) < 2 { cmd.Fail(1, "Valid arguments: <image_name> <id> ...") } t := ctx.Transport.Get() imageId := args[0] if imageId == "" { cmd.Fail(1, "Argument 1 must be a Docker image to base the service on") } ids, err := cloc.NewContainerLocators(t, args[1:]...) if err != nil { cmd.Fail(1, "You must pass one or more valid service names: %s", err.Error()) } for _, locator := range ids { if imageId == string(cloc.AsIdentifier(locator)) { cmd.Fail(1, "Image name and container id must not be the same: %s", imageId) } } cmd.Executor{ On: ids, Serial: func(on cmd.Locator) cmd.JobRequest { r := cjobs.InstallContainerRequest{ RequestIdentifier: jobs.NewRequestIdentifier(), Id: cloc.AsIdentifier(on), Image: imageId, Started: ctx.start, Isolate: ctx.isolate, SocketActivation: ctx.sockAct, Ports: *ctx.portPairs.Get().(*port.PortPairs), Environment: &ctx.environment.Description, NetworkLinks: ctx.networkLinks.NetworkLinks, VolumeConfig: ctx.volumeConfig.VolumeConfig, SystemdSlice: ctx.systemdSlice, } return &r }, Output: os.Stdout, Transport: t, }.StreamAndExit() }
func (ctx *CommandContext) containerStatus(c *cobra.Command, args []string) { t := ctx.Transport.Get() if err := ExtractContainerLocatorsFromDeployment(t, ctx.deploymentPath, &args); err != nil { cmd.Fail(1, err.Error()) } if len(args) < 1 { cmd.Fail(1, "Valid arguments: <id> ...") } ids, err := cloc.NewContainerLocators(t, args...) if err != nil { cmd.Fail(1, "You must pass one or more valid service names: %s", err.Error()) } data, errors := cmd.Executor{ On: ids, Serial: func(on cmd.Locator) cmd.JobRequest { return &cjobs.ContainerStatusRequest{ Id: cloc.AsIdentifier(on), } }, Output: os.Stdout, Transport: t, }.Gather() for i := range data { if buf, ok := data[i].(*bytes.Buffer); ok { if i > 0 { fmt.Fprintf(os.Stdout, "\n-------------\n") } buf.WriteTo(os.Stdout) } } if len(errors) > 0 { for i := range errors { fmt.Fprintf(os.Stderr, "Error: %s\n", errors[i]) } os.Exit(1) } os.Exit(0) }
func (ctx *CommandContext) showEnvironment(c *cobra.Command, args []string) { if len(args) < 1 { cmd.Fail(1, "Valid arguments: <id> ...") } t := ctx.Transport.Get() ids, err := cloc.NewContainerLocators(t, args[0:]...) if err != nil { cmd.Fail(1, "You must pass one or more valid environment ids: %s", err.Error()) } data, errors := cmd.Executor{ On: ids, Serial: func(on cmd.Locator) cmd.JobRequest { return &cjobs.GetEnvironmentRequest{ Id: cloc.AsIdentifier(on), } }, Output: os.Stdout, Transport: t, }.Gather() for i := range data { if buf, ok := data[i].(*bytes.Buffer); ok { buf.WriteTo(os.Stdout) } } if len(errors) > 0 { for i := range errors { fmt.Fprintf(os.Stderr, "Error: %s\n", errors[i]) } os.Exit(1) } os.Exit(0) }