From 4d834140d02a11f98c0577aba1c21d210b68c82f Mon Sep 17 00:00:00 2001 From: hailong Date: Wed, 2 Jan 2019 02:56:27 +0000 Subject: [PATCH] Add docker Bash completion for other consoles --- cmd/control/console_init.go | 6 ++++++ cmd/control/docker_init.go | 14 +++++++++++--- cmd/control/user_docker.go | 11 +++++++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/cmd/control/console_init.go b/cmd/control/console_init.go index 584d54d7..07247f04 100644 --- a/cmd/control/console_init.go +++ b/cmd/control/console_init.go @@ -144,6 +144,12 @@ func consoleInitFunc() error { {"/usr/share/ros/os-release", "/etc/os-release"}, } + if _, err := os.Stat(dockerCompletionFile); err == nil { + baseSymlink = append(baseSymlink, symlink{ + dockerCompletionFile, dockerCompletionLinkFile, + }) + } + if cfg.Rancher.Console == "default" { // add iptables symlinks for default console baseSymlink = append(baseSymlink, []symlink{ diff --git a/cmd/control/docker_init.go b/cmd/control/docker_init.go index 6b3176b7..e0f127c8 100644 --- a/cmd/control/docker_init.go +++ b/cmd/control/docker_init.go @@ -16,9 +16,11 @@ import ( ) const ( - 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" + dockerCompletionLinkFile = "/usr/share/bash-completion/completions/docker" + dockerCompletionFile = "/var/lib/rancher/engine/completion" ) func dockerInitAction(c *cli.Context) error { @@ -30,6 +32,12 @@ func dockerInitAction(c *cli.Context) error { time.Sleep(200 * time.Millisecond) } + if _, err := os.Stat(dockerCompletionFile); err != nil { + if _, err := os.Readlink(dockerCompletionLinkFile); err == nil { + syscall.Unlink(dockerCompletionLinkFile) + } + } + dockerBin := "" dockerPaths := []string{ "/usr/bin", diff --git a/cmd/control/user_docker.go b/cmd/control/user_docker.go index 0df850cc..d7ecf7ec 100644 --- a/cmd/control/user_docker.go +++ b/cmd/control/user_docker.go @@ -26,6 +26,7 @@ const ( dockerPidFile = "/var/run/docker.pid" sourceDirectory = "/engine" destDirectory = "/var/lib/rancher/engine" + dockerCompletionFName = "completion" ) var ( @@ -94,8 +95,14 @@ func copyBinaries(source, dest string) error { if err = out.Close(); err != nil { return err } - if err := os.Chmod(destFile, 0751); err != nil { - return err + if file.Name() == dockerCompletionFName { + if err := os.Chmod(destFile, 0644); err != nil { + return err + } + } else { + if err := os.Chmod(destFile, 0751); err != nil { + return err + } } }