start implementing getkubeconfig

pull/227/head
iwilltry42 5 years ago
parent acebc511ef
commit 8450604182
  1. 17
      cmd/get/getKubeconfig.go
  2. 1
      pkg/cluster/kubeconfig.go
  3. 36
      pkg/runtimes/docker/container.go
  4. 15
      pkg/runtimes/docker/kubeconfig.go
  5. 38
      pkg/runtimes/docker/node.go

@ -22,7 +22,9 @@ THE SOFTWARE.
package get
import (
"github.com/rancher/k3d/pkg/runtimes"
"github.com/spf13/cobra"
"github.com/rancher/k3d/pkg/cluster"
log "github.com/sirupsen/logrus"
)
@ -37,6 +39,8 @@ func NewCmdGetKubeconfig() *cobra.Command {
Long: `Get kubeconfig.`,
Run: func(cmd *cobra.Command, args []string) {
log.Debugln("get kubeconfig called")
rt := parseGetKubeconfigCmd(cmd, args)
cluster.GetKubeConfig()
},
}
@ -45,3 +49,16 @@ func NewCmdGetKubeconfig() *cobra.Command {
// done
return cmd
}
func parseGetKubeconfigCmd(cmd *cobra.Command, args []string) runtimes.Runtime {
// --runtime
rt, err := cmd.Flags().GetString("runtime")
if err != nil {
log.Fatalln("No runtime specified")
}
runtime, err := runtimes.GetRuntime(rt)
if err != nil {
log.Fatalln(err)
}
return runtime
}

@ -27,6 +27,7 @@ import (
log "github.com/sirupsen/logrus"
)
// GetKubeconfig grabs the kubeconfig file from /output from a master node container and puts it into a local directory
func GetKubeconfig(runtime runtimes.Runtime, cluster *k3d.Cluster) error {
masterNodes, err := runtime.GetNodesByLabel(map[string]string{"k3d.cluster": cluster.Name, "k3d.role": string(k3d.MasterRole)})
if err != nil {

@ -24,12 +24,15 @@ package docker
import (
"context"
"fmt"
"io"
"io/ioutil"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
k3d "github.com/rancher/k3d/pkg/types"
log "github.com/sirupsen/logrus"
)
@ -125,3 +128,36 @@ func pullImage(ctx *context.Context, docker *client.Client, image string) error
return nil
}
func getNodeContainer(node *k3d.Node) (*types.Container, error) {
// (0) create docker client
ctx := context.Background()
docker, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
log.Errorln("Failed to create docker client")
return nil, err
}
// (1) list containers which have the default k3d labels attached
filters := filters.NewArgs()
for k, v := range node.Labels {
filters.Add("label", fmt.Sprintf("%s=%s", k, v))
}
filters.Add("name", node.Name)
containers, err := docker.ContainerList(ctx, types.ContainerListOptions{
Filters: filters,
})
if err != nil {
log.Errorln("Failed to list containers")
return nil, err
}
if len(containers) > 1 {
log.Errorln("Failed to get a single container")
return nil, err
}
return &containers[0], nil
}

@ -24,9 +24,24 @@ package docker
import (
k3d "github.com/rancher/k3d/pkg/types"
log "github.com/sirupsen/logrus"
)
// GetKubeconfig grabs the kubeconfig from inside a k3d node
func (d Docker) GetKubeconfig(node *k3d.Node) error {
/*ctx := context.Background
docker, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
log.Errorln("Failed to create docker client")
return err
}*/
container, err := getNodeContainer(node)
if err != nil {
return err
}
log.Debugf("Container: %+v", container)
return nil
}

@ -26,9 +26,8 @@ import (
"context"
"fmt"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
k3d "github.com/rancher/k3d/pkg/types"
log "github.com/sirupsen/logrus"
@ -63,6 +62,27 @@ func (d Docker) DeleteNode(nodeSpec *k3d.Node) error {
// GetNodesByLabel returns a list of existing nodes
func (d Docker) GetNodesByLabel(labels map[string]string) ([]*k3d.Node, error) {
// (0) get containers
containers, err := getContainersByLabel(labels)
if err != nil {
return nil, err
}
// (1) convert them to node structs
nodes := []*k3d.Node{}
for _, container := range containers {
node, err := TranslateContainerToNode(&container)
if err != nil {
return nil, err
}
nodes = append(nodes, node)
}
return nodes, nil
}
func getContainersByLabel(labels map[string]string) ([]types.Container, error) {
// (0) create docker client
ctx := context.Background()
docker, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
@ -87,17 +107,5 @@ func (d Docker) GetNodesByLabel(labels map[string]string) ([]*k3d.Node, error) {
log.Errorln("Failed to list containers")
return nil, err
}
// (2) convert them to node structs
nodes := []*k3d.Node{}
for _, container := range containers {
node, err := TranslateContainerToNode(&container)
if err != nil {
return nil, err
}
nodes = append(nodes, node)
}
return nodes, nil
return containers, nil
}

Loading…
Cancel
Save