Documentation ¶
Index ¶
Constants ¶
View Source
const ( // GOARCH os architecture GOARCH = runtime.GOARCH // GOOS os type GOOS = runtime.GOOS )
Variables ¶
View Source
var ( UserHome string KcvmPath string )
View Source
var Commands = []*cli.Command{ &InitCmd, &InstallCmd, &ListCmd, &UseCmd, }
Commands declare each command
View Source
var InitCmd = cli.Command{ Name: "init", Usage: "Initialize kcvm", Action: func(c *cli.Context) error { _, err := os.Stat(path.Join(KcvmPath, "bin")) if os.IsNotExist(err) { err = os.MkdirAll(path.Join(KcvmPath, "bin"), 0755) if err != nil { return err } log.Info("Path " + KcvmPath + " Created") return nil } log.Info("Path " + KcvmPath + " Exists") return nil }, }
InitCmd creates kcvm main directory under ~/.kcvm
View Source
var InstallCmd = cli.Command{ Name: "install", Usage: "Install kubectl version", Action: func(c *cli.Context) error { if c.NArg() == 0 { return errors.New("You must provide a version from kcvm list") } kubectlVersion := c.Args().Get(0) kubectlBinPath := path.Join(path.Join(KcvmPath, "bin"), fmt.Sprintf("kubectl-%s", kubectlVersion)) kubectlTempPath := path.Join(path.Join(os.TempDir(), "kcvm"), fmt.Sprintf("kubectl-%s", kubectlVersion)) kubectlSymPath := path.Join(KcvmPath, "kubectl") client := resty.New() resp, err := client.R(). SetOutput(kubectlTempPath). Get(fmt.Sprintf("https://storage.googleapis.com/kubernetes-release/release/%s/bin/%s/%s/kubectl", kubectlVersion, GOOS, GOARCH)) if err != nil { return err } if resp.RawResponse.StatusCode != 200 { return errors.New("This kubectl version does not exist") } err = os.Chmod(kubectlTempPath, 0775) if err != nil { return err } err = os.Rename(kubectlTempPath, kubectlBinPath) if err != nil { return err } _, err = os.Stat(kubectlSymPath) if !os.IsNotExist(err) { err = os.Remove(kubectlSymPath) if err != nil { return err } } err = os.Symlink(kubectlBinPath, kubectlSymPath) if err != nil { return err } return nil }, }
InstallCmd declares install command
View Source
var ListCmd = cli.Command{ Name: "list", Usage: "List kubectl version", Subcommands: []*cli.Command{ { Name: "remote", Usage: "List upstream kubectl versions", Action: func(c *cli.Context) error { client := resty.New() var githubPages = []int{1, 2, 3} var respTags GithubTags for _, i := range githubPages { resp, err := client.R(). SetHeader("Accept", "application/json"). SetResult(GithubTags{}). Get(fmt.Sprintf("https://api.github.com/repos/kubernetes/kubernetes/tags?per_page=100&page=%d", i)) if err != nil { return err } tags := resp.Result().(*GithubTags) for _, tag := range *tags { respTags = append(respTags, tag) } } for i := range respTags { switch { case strings.Contains(respTags[i].Name, "beta"): fallthrough case strings.Contains(respTags[i].Name, "alpha"): fallthrough case strings.Contains(respTags[i].Name, "rc"): default: fmt.Println(respTags[i].Name) } } return nil }, }, { Name: "local", Usage: "List locally installed kubectl version", Action: func(c *cli.Context) error { files, err := ioutil.ReadDir(path.Join(KcvmPath, "bin")) if err != nil { return err } sort.SliceStable(files, func(i, j int) bool { vi, _ := version.NewVersion(strings.TrimPrefix(files[i].Name(), "kubectl-")) vj, _ := version.NewVersion(strings.TrimPrefix(files[j].Name(), "kubectl-")) return vi.GreaterThan(vj) }) for _, file := range files { switch file.Name() { case "kubectl": break default: fmt.Println(strings.TrimPrefix(file.Name(), "kubectl-")) } } return nil }, }, }, }
ListCmd lists remote or locally installed kubectl versions
View Source
var UseCmd = cli.Command{ Name: "use", Usage: "Specify kubectl version to use", Action: func(c *cli.Context) error { if c.NArg() == 0 { return errors.New("You must provide a version from kcvm list local") } kubectlVersion := c.Args().Get(0) kubectlBinPath := path.Join(path.Join(KcvmPath, "bin"), fmt.Sprintf("kubectl-%s", kubectlVersion)) kubectlSymPath := path.Join(KcvmPath, "kubectl") _, err := os.Stat(kubectlBinPath) if os.IsNotExist(err) { if err != nil { return errors.New("This kubectl version does not exist") } } _, err = os.Stat(kubectlSymPath) if !os.IsNotExist(err) { err = os.Remove(kubectlSymPath) if err != nil { return err } } err = os.Symlink(kubectlBinPath, kubectlSymPath) if err != nil { return err } return nil }, }
UseCmd declares list command
Functions ¶
Types ¶
type GithubTags ¶
type GithubTags []*GithubTag
Click to show internal directories.
Click to hide internal directories.