From 21fb3ebfa9bee3a063e837d0cf686b858085e96e Mon Sep 17 00:00:00 2001 From: Josh Curl Date: Thu, 20 Oct 2016 11:58:34 -0700 Subject: [PATCH] Move more commands to subcommands of ros --- cmd/control/cli.go | 28 +++++++++++++++ cmd/control/console.go | 2 +- .../console.go => control/console_init.go} | 9 ++--- .../main.go => control/docker_init.go} | 18 +++++----- cmd/control/engine.go | 4 --- .../switch_console.go | 21 ++++++----- .../main.go => control/user_docker.go} | 36 +++++++++++-------- images/02-console/Dockerfile | 1 - main.go | 9 ----- os-config.tpl.yml | 9 ++--- 10 files changed, 78 insertions(+), 59 deletions(-) rename cmd/{console/console.go => control/console_init.go} (97%) rename cmd/{dockerinit/main.go => control/docker_init.go} (82%) rename cmd/{switchconsole => control}/switch_console.go (73%) rename cmd/{userdocker/main.go => control/user_docker.go} (88%) diff --git a/cmd/control/cli.go b/cmd/control/cli.go index d2d17fdb..1419f0ca 100644 --- a/cmd/control/cli.go +++ b/cmd/control/cli.go @@ -44,6 +44,13 @@ func Main() { HideHelp: true, Subcommands: consoleSubcommands(), }, + { + Name: "console-init", + Hidden: true, + HideHelp: true, + SkipFlagParsing: true, + Action: consoleInitAction, + }, { Name: "dev", Hidden: true, @@ -51,6 +58,13 @@ func Main() { SkipFlagParsing: true, Action: devAction, }, + { + Name: "docker-init", + Hidden: true, + HideHelp: true, + SkipFlagParsing: true, + Action: dockerInitAction, + }, { Name: "engine", Usage: "manage which Docker engine is used", @@ -85,6 +99,13 @@ func Main() { SkipFlagParsing: true, Action: preloadImagesAction, }, + { + Name: "switch-console", + Hidden: true, + HideHelp: true, + SkipFlagParsing: true, + Action: switchConsoleAction, + }, { Name: "tls", Usage: "setup tls configuration", @@ -98,6 +119,13 @@ func Main() { SkipFlagParsing: true, Action: udevSettleAction, }, + { + Name: "user-docker", + Hidden: true, + HideHelp: true, + SkipFlagParsing: true, + Action: userDockerAction, + }, installCommand, selinuxCommand(), } diff --git a/cmd/control/console.go b/cmd/control/console.go index 088eff84..f8f84094 100644 --- a/cmd/control/console.go +++ b/cmd/control/console.go @@ -83,7 +83,7 @@ func consoleSwitch(c *cli.Context) error { Labels: map[string]string{ config.SCOPE: config.SYSTEM, }, - Command: []string{"/usr/bin/switch-console", newConsole}, + Command: []string{"/usr/bin/ros", "switch-console", newConsole}, VolumesFrom: []string{"all-volumes"}, }) if err != nil { diff --git a/cmd/console/console.go b/cmd/control/console_init.go similarity index 97% rename from cmd/console/console.go rename to cmd/control/console_init.go index 76153c03..a68680c5 100644 --- a/cmd/console/console.go +++ b/cmd/control/console_init.go @@ -1,4 +1,4 @@ -package console +package control import ( "bytes" @@ -12,6 +12,7 @@ import ( "syscall" log "github.com/Sirupsen/logrus" + "github.com/codegangsta/cli" "github.com/rancher/os/cmd/cloudinitexecute" "github.com/rancher/os/config" "github.com/rancher/os/util" @@ -29,7 +30,7 @@ type symlink struct { oldname, newname string } -func Main() { +func consoleInitAction(c *cli.Context) error { cfg := config.LoadConfig() if _, err := os.Stat(rancherHome); os.IsNotExist(err) { @@ -124,10 +125,10 @@ func Main() { respawnBinPath, err := exec.LookPath("respawn") if err != nil { - log.Fatal(err) + return err } - log.Fatal(syscall.Exec(respawnBinPath, []string{"respawn", "-f", "/etc/respawn.conf"}, os.Environ())) + return syscall.Exec(respawnBinPath, []string{"respawn", "-f", "/etc/respawn.conf"}, os.Environ()) } func generateRespawnConf(cmdline string) string { diff --git a/cmd/dockerinit/main.go b/cmd/control/docker_init.go similarity index 82% rename from cmd/dockerinit/main.go rename to cmd/control/docker_init.go index 47ae56ac..b0adcaeb 100644 --- a/cmd/dockerinit/main.go +++ b/cmd/control/docker_init.go @@ -1,4 +1,4 @@ -package dockerinit +package control import ( "fmt" @@ -10,18 +10,18 @@ import ( "time" log "github.com/Sirupsen/logrus" + "github.com/codegangsta/cli" "github.com/rancher/os/config" "github.com/rancher/os/util" ) const ( - consoleDone = "/run/console-done" - dockerConf = "/var/lib/rancher/conf/docker" - dockerDone = "/run/docker-done" - dockerLog = "/var/log/docker.log" + dockerConf = "/var/lib/rancher/conf/docker" + dockerDone = "/run/docker-done" + dockerLog = "/var/log/docker.log" ) -func Main() { +func dockerInitAction(c *cli.Context) error { for { if _, err := os.Stat(consoleDone); err == nil { break @@ -54,7 +54,7 @@ func Main() { mountInfo, err := ioutil.ReadFile("/proc/self/mountinfo") if err != nil { - log.Fatal(err) + return err } for _, mount := range strings.Split(string(mountInfo), "\n") { @@ -66,7 +66,7 @@ func Main() { args := []string{ "bash", "-c", - fmt.Sprintf(`[ -e %s ] && source %s; exec /usr/bin/dockerlaunch %s %s $DOCKER_OPTS >> %s 2>&1`, dockerConf, dockerConf, dockerBin, strings.Join(os.Args[1:], " "), dockerLog), + fmt.Sprintf(`[ -e %s ] && source %s; exec /usr/bin/dockerlaunch %s %s $DOCKER_OPTS >> %s 2>&1`, dockerConf, dockerConf, dockerBin, strings.Join(c.Args(), " "), dockerLog), } cfg := config.LoadConfig() @@ -75,5 +75,5 @@ func Main() { log.Error(err) } - log.Fatal(syscall.Exec("/bin/bash", args, os.Environ())) + return syscall.Exec("/bin/bash", args, os.Environ()) } diff --git a/cmd/control/engine.go b/cmd/control/engine.go index 7e100afc..5d03897a 100644 --- a/cmd/control/engine.go +++ b/cmd/control/engine.go @@ -16,10 +16,6 @@ import ( "github.com/rancher/os/util/network" ) -const ( - dockerDone = "/run/docker-done" -) - func engineSubcommands() []cli.Command { return []cli.Command{ { diff --git a/cmd/switchconsole/switch_console.go b/cmd/control/switch_console.go similarity index 73% rename from cmd/switchconsole/switch_console.go rename to cmd/control/switch_console.go index 71a45f0c..e8eb3877 100644 --- a/cmd/switchconsole/switch_console.go +++ b/cmd/control/switch_console.go @@ -1,31 +1,32 @@ -package switchconsole +package control import ( - "os" + "errors" log "github.com/Sirupsen/logrus" + "github.com/codegangsta/cli" "github.com/docker/libcompose/project/options" "github.com/rancher/os/compose" "github.com/rancher/os/config" "golang.org/x/net/context" ) -func Main() { - if len(os.Args) != 2 { - log.Fatal("Must specify exactly one existing container") +func switchConsoleAction(c *cli.Context) error { + if len(c.Args()) != 1 { + return errors.New("Must specify exactly one existing container") } - newConsole := os.Args[1] + newConsole := c.Args()[0] cfg := config.LoadConfig() project, err := compose.GetProject(cfg, true, false) if err != nil { - log.Fatal(err) + return err } if newConsole != "default" { if err = compose.LoadSpecialService(project, cfg, "console", newConsole); err != nil { - log.Fatal(err) + return err } } @@ -36,10 +37,12 @@ func Main() { if err = project.Up(context.Background(), options.Up{ Log: true, }, "console"); err != nil { - log.Fatal(err) + return err } if err = project.Restart(context.Background(), 10, "docker"); err != nil { log.Errorf("Failed to restart Docker: %v", err) } + + return nil } diff --git a/cmd/userdocker/main.go b/cmd/control/user_docker.go similarity index 88% rename from cmd/userdocker/main.go rename to cmd/control/user_docker.go index f97b128c..56581995 100644 --- a/cmd/userdocker/main.go +++ b/cmd/control/user_docker.go @@ -1,4 +1,4 @@ -package userdocker +package control import ( "io" @@ -13,9 +13,9 @@ import ( "path/filepath" log "github.com/Sirupsen/logrus" + "github.com/codegangsta/cli" composeClient "github.com/docker/libcompose/docker/client" "github.com/docker/libcompose/project" - "github.com/rancher/os/cmd/control" "github.com/rancher/os/compose" "github.com/rancher/os/config" rosDocker "github.com/rancher/os/docker" @@ -25,24 +25,30 @@ import ( const ( DEFAULT_STORAGE_CONTEXT = "console" DOCKER_PID_FILE = "/var/run/docker.pid" - DOCKER_COMMAND = "docker-init" userDocker = "user-docker" sourceDirectory = "/engine" destDirectory = "/var/lib/rancher/engine" ) -func Main() { +var ( + DOCKER_COMMAND = []string{ + "ros", + "docker-init", + } +) + +func userDockerAction(c *cli.Context) error { if err := copyBinaries(sourceDirectory, destDirectory); err != nil { - log.Fatal(err) + return err } if err := syscall.Mount("/host/sys", "/sys", "", syscall.MS_BIND|syscall.MS_REC, ""); err != nil { - log.Fatal(err) + return err } cfg := config.LoadConfig() - log.Fatal(startDocker(cfg)) + return startDocker(cfg) } func copyBinaries(source, dest string) error { @@ -98,15 +104,15 @@ func copyBinaries(source, dest string) error { return nil } -func writeCerts(cfg *config.CloudConfig) error { - outDir := control.ServerTlsPath +func writeConfigCerts(cfg *config.CloudConfig) error { + outDir := ServerTlsPath if err := os.MkdirAll(outDir, 0700); err != nil { return err } - caCertPath := filepath.Join(outDir, control.CaCert) - caKeyPath := filepath.Join(outDir, control.CaKey) - serverCertPath := filepath.Join(outDir, control.ServerCert) - serverKeyPath := filepath.Join(outDir, control.ServerKey) + caCertPath := filepath.Join(outDir, CaCert) + caKeyPath := filepath.Join(outDir, CaKey) + serverCertPath := filepath.Join(outDir, ServerCert) + serverKeyPath := filepath.Join(outDir, ServerKey) if cfg.Rancher.Docker.CACert != "" { if err := util.WriteFileAtomic(caCertPath, []byte(cfg.Rancher.Docker.CACert), 0400); err != nil { return err @@ -160,7 +166,7 @@ func startDocker(cfg *config.CloudConfig) error { log.Debugf("User Docker args: %v", args) if dockerCfg.TLS { - if err := writeCerts(cfg); err != nil { + if err := writeConfigCerts(cfg); err != nil { return err } } @@ -173,7 +179,7 @@ func startDocker(cfg *config.CloudConfig) error { cmd := []string{"docker-runc", "exec", "--", info.ID, "env"} log.Info(dockerCfg.AppendEnv()) cmd = append(cmd, dockerCfg.AppendEnv()...) - cmd = append(cmd, DOCKER_COMMAND) + cmd = append(cmd, DOCKER_COMMAND...) cmd = append(cmd, args...) log.Infof("Running %v", cmd) diff --git a/images/02-console/Dockerfile b/images/02-console/Dockerfile index 37265454..bd114aac 100644 --- a/images/02-console/Dockerfile +++ b/images/02-console/Dockerfile @@ -9,4 +9,3 @@ RUN sed -i 's/rancher:!/rancher:*/g' /etc/shadow && \ echo '## allow password less for docker user' >> /etc/sudoers && \ echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers COPY prompt.sh /etc/profile.d/ -CMD ["/usr/sbin/console.sh"] diff --git a/main.go b/main.go index b7fd0cd2..890cb2c0 100644 --- a/main.go +++ b/main.go @@ -8,16 +8,12 @@ import ( "github.com/rancher/cniglue" "github.com/rancher/os/cmd/cloudinitexecute" "github.com/rancher/os/cmd/cloudinitsave" - "github.com/rancher/os/cmd/console" "github.com/rancher/os/cmd/control" - "github.com/rancher/os/cmd/dockerinit" "github.com/rancher/os/cmd/network" "github.com/rancher/os/cmd/power" "github.com/rancher/os/cmd/respawn" - "github.com/rancher/os/cmd/switchconsole" "github.com/rancher/os/cmd/sysinit" "github.com/rancher/os/cmd/systemdocker" - "github.com/rancher/os/cmd/userdocker" "github.com/rancher/os/cmd/wait" "github.com/rancher/os/dfs" osInit "github.com/rancher/os/init" @@ -26,10 +22,7 @@ import ( var entrypoints = map[string]func(){ "cloud-init-execute": cloudinitexecute.Main, "cloud-init-save": cloudinitsave.Main, - "console": console.Main, - "console.sh": console.Main, "docker": docker.Main, - "docker-init": dockerinit.Main, "dockerlaunch": dfs.Main, "halt": power.Halt, "init": osInit.MainInit, @@ -39,9 +32,7 @@ var entrypoints = map[string]func(){ "respawn": respawn.Main, "ros-sysinit": sysinit.Main, "shutdown": power.Main, - "switch-console": switchconsole.Main, "system-docker": systemdocker.Main, - "user-docker": userdocker.Main, "wait-for-docker": wait.Main, "cni-glue": glue.Main, "bridge": bridge.Main, diff --git a/os-config.tpl.yml b/os-config.tpl.yml index 7109f299..ca0e72e9 100644 --- a/os-config.tpl.yml +++ b/os-config.tpl.yml @@ -135,7 +135,6 @@ rancher: read_only: true volumes: - /usr/bin/ros:/usr/bin/dockerlaunch:ro - - /usr/bin/ros:/usr/bin/user-docker:ro - /usr/bin/ros:/usr/bin/system-docker:ro - /usr/bin/ros:/sbin/poweroff:ro - /usr/bin/ros:/sbin/reboot:ro @@ -147,13 +146,9 @@ rancher: - /usr/bin/ros:/usr/bin/cloud-init-save:ro - /usr/bin/ros:/usr/sbin/netconf:ro - /usr/bin/ros:/usr/sbin/wait-for-docker:ro - - /usr/bin/ros:/usr/bin/switch-console:ro - - /usr/bin/ros:/usr/bin/console:ro - - /usr/bin/ros:/usr/sbin/console.sh:ro - - /usr/bin/ros:/usr/sbin/docker-init:ro console: image: {{.OS_REPO}}/os-console:{{.VERSION}}{{.SUFFIX}} - command: console + command: ros console-init labels: io.rancher.os.scope: system io.rancher.os.after: network @@ -316,7 +311,7 @@ rancher: {{else -}} image: {{.OS_REPO}}/os-docker:1.11.2{{.SUFFIX}} {{end -}} - command: /usr/bin/user-docker + command: ros user-docker environment: - HTTP_PROXY - HTTPS_PROXY