Extend cluster get-kubeconfig cmd functionality
This PS will allow us to retrieve kubeconfig from different kind of sources. Change-Id: I31381cf466c58373efda40d06587e34bef411c68 Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
This commit is contained in:
parent
e2af947337
commit
68e76a9059
@ -17,8 +17,7 @@ package cluster
|
|||||||
import (
|
import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"opendev.org/airship/airshipctl/pkg/clusterctl/client"
|
"opendev.org/airship/airshipctl/pkg/cluster"
|
||||||
clusterctlcmd "opendev.org/airship/airshipctl/pkg/clusterctl/cmd"
|
|
||||||
"opendev.org/airship/airshipctl/pkg/config"
|
"opendev.org/airship/airshipctl/pkg/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -28,55 +27,28 @@ Retrieve cluster kubeconfig and print it to stdout
|
|||||||
`
|
`
|
||||||
getKubeconfigExample = `
|
getKubeconfigExample = `
|
||||||
# Retrieve target-cluster kubeconfig
|
# Retrieve target-cluster kubeconfig
|
||||||
airshipctl cluster get-kubeconfig target-cluster --kubeconfig /tmp/kubeconfig
|
airshipctl cluster get-kubeconfig target-cluster
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewGetKubeconfigCommand creates a command which retrieves cluster kubeconfig
|
// NewGetKubeconfigCommand creates a command which retrieves cluster kubeconfig
|
||||||
func NewGetKubeconfigCommand(cfgFactory config.Factory) *cobra.Command {
|
func NewGetKubeconfigCommand(cfgFactory config.Factory) *cobra.Command {
|
||||||
o := &client.GetKubeconfigOptions{}
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "get-kubeconfig [cluster_name]",
|
Use: "get-kubeconfig [cluster_name]",
|
||||||
Short: "Retrieve kubeconfig for a desired cluster",
|
Short: "Retrieve kubeconfig for a desired cluster",
|
||||||
Long: getKubeconfigLong[1:],
|
Long: getKubeconfigLong[1:],
|
||||||
Example: getKubeconfigExample[1:],
|
Example: getKubeconfigExample[1:],
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: getKubeconfigRunE(cfgFactory, o),
|
RunE: getKubeconfigRunE(cfgFactory),
|
||||||
}
|
}
|
||||||
|
|
||||||
initFlags(o, cmd)
|
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func initFlags(o *client.GetKubeconfigOptions, cmd *cobra.Command) {
|
|
||||||
flags := cmd.Flags()
|
|
||||||
|
|
||||||
flags.StringVar(
|
|
||||||
&o.ParentKubeconfigPath,
|
|
||||||
"kubeconfig",
|
|
||||||
"",
|
|
||||||
"path to kubeconfig associated with parental cluster")
|
|
||||||
|
|
||||||
flags.StringVarP(
|
|
||||||
&o.ManagedClusterNamespace,
|
|
||||||
"namespace",
|
|
||||||
"n",
|
|
||||||
"default",
|
|
||||||
"namespace where cluster is located, if not specified default one will be used")
|
|
||||||
|
|
||||||
flags.StringVar(
|
|
||||||
&o.ParentKubeconfigContext,
|
|
||||||
"context",
|
|
||||||
"",
|
|
||||||
"specify context within the kubeconfig file")
|
|
||||||
}
|
|
||||||
|
|
||||||
// getKubeconfigRunE returns a function to cobra command to be executed in runtime
|
// getKubeconfigRunE returns a function to cobra command to be executed in runtime
|
||||||
func getKubeconfigRunE(cfgFactory config.Factory, o *client.GetKubeconfigOptions) func(
|
func getKubeconfigRunE(cfgFactory config.Factory) func(
|
||||||
cmd *cobra.Command, args []string) error {
|
cmd *cobra.Command, args []string) error {
|
||||||
return func(cmd *cobra.Command, args []string) error {
|
return func(cmd *cobra.Command, args []string) error {
|
||||||
o.ManagedClusterName = args[0]
|
return cluster.GetKubeconfig(cfgFactory, args[0], cmd.OutOrStdout())
|
||||||
return clusterctlcmd.GetKubeconfig(cfgFactory, o, cmd.OutOrStdout())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,8 @@ Usage:
|
|||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
# Retrieve target-cluster kubeconfig
|
# Retrieve target-cluster kubeconfig
|
||||||
airshipctl cluster get-kubeconfig target-cluster --kubeconfig /tmp/kubeconfig
|
airshipctl cluster get-kubeconfig target-cluster
|
||||||
|
|
||||||
|
|
||||||
Flags:
|
Flags:
|
||||||
--context string specify context within the kubeconfig file
|
-h, --help help for get-kubeconfig
|
||||||
-h, --help help for get-kubeconfig
|
|
||||||
--kubeconfig string path to kubeconfig associated with parental cluster
|
|
||||||
-n, --namespace string namespace where cluster is located, if not specified default one will be used (default "default")
|
|
||||||
|
@ -15,17 +15,14 @@ airshipctl cluster get-kubeconfig [cluster_name] [flags]
|
|||||||
|
|
||||||
```
|
```
|
||||||
# Retrieve target-cluster kubeconfig
|
# Retrieve target-cluster kubeconfig
|
||||||
airshipctl cluster get-kubeconfig target-cluster --kubeconfig /tmp/kubeconfig
|
airshipctl cluster get-kubeconfig target-cluster
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
```
|
```
|
||||||
--context string specify context within the kubeconfig file
|
-h, --help help for get-kubeconfig
|
||||||
-h, --help help for get-kubeconfig
|
|
||||||
--kubeconfig string path to kubeconfig associated with parental cluster
|
|
||||||
-n, --namespace string namespace where cluster is located, if not specified default one will be used (default "default")
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options inherited from parent commands
|
### Options inherited from parent commands
|
||||||
|
@ -18,7 +18,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
airshipv1 "opendev.org/airship/airshipctl/pkg/api/v1alpha1"
|
||||||
|
"opendev.org/airship/airshipctl/pkg/clusterctl/client"
|
||||||
|
"opendev.org/airship/airshipctl/pkg/config"
|
||||||
|
"opendev.org/airship/airshipctl/pkg/k8s/kubeconfig"
|
||||||
"opendev.org/airship/airshipctl/pkg/log"
|
"opendev.org/airship/airshipctl/pkg/log"
|
||||||
|
"opendev.org/airship/airshipctl/pkg/phase"
|
||||||
"opendev.org/airship/airshipctl/pkg/util"
|
"opendev.org/airship/airshipctl/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -50,3 +55,41 @@ func StatusRunner(o StatusOptions, w io.Writer) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetKubeconfig creates new kubeconfig interface object from secret and prints its content to writer
|
||||||
|
func GetKubeconfig(cfgFactory config.Factory, clusterName string, writer io.Writer) error {
|
||||||
|
cfg, err := cfgFactory()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
helper, err := phase.NewHelper(cfg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cMap, err := helper.ClusterMap()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
wd, err := helper.WorkDir()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
client, err := client.NewClient(helper.TargetPath(), log.DebugEnabled(), airshipv1.DefaultClusterctl())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
kubeconf := kubeconfig.NewBuilder().
|
||||||
|
WithBundle(helper.PhaseBundleRoot()).
|
||||||
|
WithClusterctClient(client).
|
||||||
|
WithClusterMap(cMap).
|
||||||
|
WithClusterName(clusterName).
|
||||||
|
WithTempRoot(wd).
|
||||||
|
Build()
|
||||||
|
|
||||||
|
return kubeconf.Write(writer)
|
||||||
|
}
|
||||||
|
@ -15,13 +15,10 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
|
|
||||||
airshipv1 "opendev.org/airship/airshipctl/pkg/api/v1alpha1"
|
airshipv1 "opendev.org/airship/airshipctl/pkg/api/v1alpha1"
|
||||||
"opendev.org/airship/airshipctl/pkg/clusterctl/client"
|
"opendev.org/airship/airshipctl/pkg/clusterctl/client"
|
||||||
"opendev.org/airship/airshipctl/pkg/config"
|
"opendev.org/airship/airshipctl/pkg/config"
|
||||||
"opendev.org/airship/airshipctl/pkg/document"
|
"opendev.org/airship/airshipctl/pkg/document"
|
||||||
"opendev.org/airship/airshipctl/pkg/k8s/kubeconfig"
|
|
||||||
"opendev.org/airship/airshipctl/pkg/log"
|
"opendev.org/airship/airshipctl/pkg/log"
|
||||||
"opendev.org/airship/airshipctl/pkg/phase"
|
"opendev.org/airship/airshipctl/pkg/phase"
|
||||||
)
|
)
|
||||||
@ -108,22 +105,3 @@ func (c *Command) Move(toKubeconfigContext string) error {
|
|||||||
}
|
}
|
||||||
return c.client.Move(c.kubeconfigPath, c.kubeconfigContext, c.kubeconfigPath, toKubeconfigContext, "")
|
return c.client.Move(c.kubeconfigPath, c.kubeconfigContext, c.kubeconfigPath, toKubeconfigContext, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetKubeconfig creates new kubeconfig interface object from secret and prints its content to writer
|
|
||||||
func GetKubeconfig(cfgFactory config.Factory, options *client.GetKubeconfigOptions, writer io.Writer) error {
|
|
||||||
cfg, err := cfgFactory()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
targetPath, err := cfg.CurrentContextTargetPath()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
client, err := client.NewClient(targetPath, log.DebugEnabled(), &airshipv1.Clusterctl{})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return kubeconfig.NewKubeConfig(kubeconfig.FromSecret(client, options)).Write(writer)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user