Move kubecfg utils from minikube to util.

We'll need to also write a kubecfg inside the VM going forward as we
remove the InsecureServing path.
pull/1678/head
dlorenc 2017-06-29 10:26:36 -07:00 committed by dlorenc
parent b031728afa
commit 11ce2369d2
10 changed files with 59 additions and 57 deletions

View File

@ -37,7 +37,7 @@ func NewLocalkubeServer() *localkube.LocalkubeServer {
LocalkubeDirectory: util.DefaultLocalkubeDirectory,
ServiceClusterIPRange: *defaultServiceClusterIPRange,
APIServerAddress: net.ParseIP("0.0.0.0"),
APIServerPort: constants.APIServerPort,
APIServerPort: util.APIServerPort,
APIServerInsecureAddress: net.ParseIP("127.0.0.1"),
APIServerInsecurePort: 8080,
APIServerName: constants.APIServerName,

View File

@ -35,11 +35,11 @@ import (
"k8s.io/minikube/pkg/minikube/cluster"
cfg "k8s.io/minikube/pkg/minikube/config"
"k8s.io/minikube/pkg/minikube/constants"
"k8s.io/minikube/pkg/minikube/kubeconfig"
"k8s.io/minikube/pkg/minikube/kubernetes_versions"
"k8s.io/minikube/pkg/minikube/machine"
"k8s.io/minikube/pkg/util"
pkgutil "k8s.io/minikube/pkg/util"
"k8s.io/minikube/pkg/util/kubeconfig"
)
const (
@ -177,7 +177,7 @@ func runStart(cmd *cobra.Command, args []string) {
glog.Errorln("Error connecting to cluster: ", err)
}
kubeHost = strings.Replace(kubeHost, "tcp://", "https://", -1)
kubeHost = strings.Replace(kubeHost, ":2376", ":"+strconv.Itoa(constants.APIServerPort), -1)
kubeHost = strings.Replace(kubeHost, ":2376", ":"+strconv.Itoa(pkgutil.APIServerPort), -1)
fmt.Println("Setting up kubeconfig...")
// setup kubeconfig
@ -257,7 +257,7 @@ You will need to move the files to the appropriate location and then set the cor
sudo chgrp -R $USER $HOME/.minikube
This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true`)
}
if err := cmdUtil.MaybeChownDirRecursiveToMinikubeUser(constants.GetMinipath()); err != nil {
if err := util.MaybeChownDirRecursiveToMinikubeUser(constants.GetMinipath()); err != nil {
glog.Errorf("Error recursively changing ownership of directory %s: %s",
constants.GetMinipath(), err)
cmdUtil.MaybeReportErrorAndExit(err)

View File

@ -26,9 +26,10 @@ import (
"github.com/spf13/cobra"
cmdUtil "k8s.io/minikube/cmd/util"
"k8s.io/minikube/pkg/minikube/cluster"
"k8s.io/minikube/pkg/minikube/config"
"k8s.io/minikube/pkg/minikube/constants"
kcfg "k8s.io/minikube/pkg/minikube/kubeconfig"
"k8s.io/minikube/pkg/minikube/machine"
"k8s.io/minikube/pkg/util/kubeconfig"
)
var statusFormat string
@ -71,7 +72,7 @@ var statusCmd = &cobra.Command{
glog.Errorln("Error host driver ip status:", err)
cmdUtil.MaybeReportErrorAndExit(err)
}
kstatus, err := kcfg.GetKubeConfigStatus(ip, constants.KubeconfigPath)
kstatus, err := kubeconfig.GetKubeConfigStatus(ip, constants.KubeconfigPath, config.GetMachineName())
if err != nil {
glog.Errorln("Error kubeconfig status:", err)
cmdUtil.MaybeReportErrorAndExit(err)

View File

@ -24,9 +24,10 @@ import (
"github.com/spf13/cobra"
cmdUtil "k8s.io/minikube/cmd/util"
"k8s.io/minikube/pkg/minikube/cluster"
"k8s.io/minikube/pkg/minikube/config"
"k8s.io/minikube/pkg/minikube/constants"
kcfg "k8s.io/minikube/pkg/minikube/kubeconfig"
"k8s.io/minikube/pkg/minikube/machine"
kcfg "k8s.io/minikube/pkg/util/kubeconfig"
)
// updateContextCmd represents the update-context command
@ -47,7 +48,7 @@ var updateContextCmd = &cobra.Command{
glog.Errorln("Error host driver ip status:", err)
cmdUtil.MaybeReportErrorAndExit(err)
}
kstatus, err := kcfg.UpdateKubeconfigIP(ip, constants.KubeconfigPath)
kstatus, err := kcfg.UpdateKubeconfigIP(ip, constants.KubeconfigPath, config.GetMachineName())
if err != nil {
glog.Errorln("Error kubeconfig status:", err)
cmdUtil.MaybeReportErrorAndExit(err)

View File

@ -27,7 +27,6 @@ import (
"net/http"
"os"
"os/exec"
"os/user"
"path/filepath"
"runtime"
"strings"
@ -247,34 +246,3 @@ func KillMountProcess() error {
}
return mountProc.Kill()
}
func MaybeChownDirRecursiveToMinikubeUser(dir string) error {
if os.Getenv("CHANGE_MINIKUBE_NONE_USER") != "" && os.Getenv("SUDO_USER") != "" {
username := os.Getenv("SUDO_USER")
usr, err := user.Lookup(username)
if err != nil {
return errors.Wrap(err, "Error looking up user")
}
uid, err := strconv.Atoi(usr.Uid)
if err != nil {
return errors.Wrapf(err, "Error parsing uid for user: %s", username)
}
gid, err := strconv.Atoi(usr.Gid)
if err != nil {
return errors.Wrapf(err, "Error parsing gid for user: %s", username)
}
if err := ChownR(dir, uid, gid); err != nil {
return errors.Wrapf(err, "Error changing ownership for: %s", dir)
}
}
return nil
}
func ChownR(path string, uid, gid int) error {
return filepath.Walk(path, func(name string, info os.FileInfo, err error) error {
if err == nil {
err = os.Chown(name, uid, gid)
}
return err
})
}

View File

@ -29,7 +29,6 @@ import (
// APIServerPort is the port that the API server should listen on.
const (
APIServerPort = 8443
APIServerName = "minikubeCA"
ClusterDNSDomain = "cluster.local"
)

View File

@ -18,6 +18,7 @@ package util
// These constants are used by both minikube and localkube
const (
APIServerPort = 8443
DefaultLocalkubeDirectory = "/var/lib/localkube"
DefaultCertPath = DefaultLocalkubeDirectory + "/certs/"
DefaultServiceClusterIP = "10.0.0.1"

View File

@ -31,9 +31,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/clientcmd/api"
"k8s.io/client-go/tools/clientcmd/api/latest"
cmdUtil "k8s.io/minikube/cmd/util"
cfg "k8s.io/minikube/pkg/minikube/config"
"k8s.io/minikube/pkg/minikube/constants"
"k8s.io/minikube/pkg/util"
)
type KubeConfigSetup struct {
@ -167,7 +165,7 @@ func WriteConfig(config *api.Config, filename string) error {
if err := ioutil.WriteFile(filename, data, 0600); err != nil {
return errors.Wrapf(err, "Error writing file %s", filename)
}
if err := cmdUtil.MaybeChownDirRecursiveToMinikubeUser(dir); err != nil {
if err := util.MaybeChownDirRecursiveToMinikubeUser(dir); err != nil {
return errors.Wrapf(err, "Error recursively changing ownership for dir: %s", dir)
}
@ -191,11 +189,11 @@ func decode(data []byte) (*api.Config, error) {
}
// GetKubeConfigStatus verifys the ip stored in kubeconfig.
func GetKubeConfigStatus(ip net.IP, filename string) (bool, error) {
func GetKubeConfigStatus(ip net.IP, filename string, machineName string) (bool, error) {
if ip == nil {
return false, fmt.Errorf("Error, empty ip passed")
}
kip, err := getIPFromKubeConfig(filename)
kip, err := getIPFromKubeConfig(filename, machineName)
if err != nil {
return false, err
}
@ -208,11 +206,11 @@ func GetKubeConfigStatus(ip net.IP, filename string) (bool, error) {
}
// UpdateKubeconfigIP overwrites the IP stored in kubeconfig with the provided IP.
func UpdateKubeconfigIP(ip net.IP, filename string) (bool, error) {
func UpdateKubeconfigIP(ip net.IP, filename string, machineName string) (bool, error) {
if ip == nil {
return false, fmt.Errorf("Error, empty ip passed")
}
kip, err := getIPFromKubeConfig(filename)
kip, err := getIPFromKubeConfig(filename, machineName)
if err != nil {
return false, err
}
@ -224,7 +222,7 @@ func UpdateKubeconfigIP(ip net.IP, filename string) (bool, error) {
return false, errors.Wrap(err, "Error getting kubeconfig status")
}
// Safe to lookup server because if field non-existent getIPFromKubeconfig would have given an error
con.Clusters[cfg.GetMachineName()].Server = "https://" + ip.String() + ":" + strconv.Itoa(constants.APIServerPort)
con.Clusters[machineName].Server = "https://" + ip.String() + ":" + strconv.Itoa(util.APIServerPort)
err = WriteConfig(con, filename)
if err != nil {
return false, err
@ -234,12 +232,12 @@ func UpdateKubeconfigIP(ip net.IP, filename string) (bool, error) {
}
// getIPFromKubeConfig returns the IP address stored for minikube in the kubeconfig specified
func getIPFromKubeConfig(filename string) (net.IP, error) {
func getIPFromKubeConfig(filename, machineName string) (net.IP, error) {
con, err := ReadConfigOrNew(filename)
if err != nil {
return nil, errors.Wrap(err, "Error getting kubeconfig status")
}
cluster, ok := con.Clusters[cfg.GetMachineName()]
cluster, ok := con.Clusters[machineName]
if !ok {
return nil, errors.Errorf("Kubeconfig does not have a record of the machine cluster")
}

View File

@ -25,7 +25,7 @@ import (
"testing"
"k8s.io/client-go/tools/clientcmd/api"
"k8s.io/minikube/pkg/minikube/constants"
"k8s.io/minikube/pkg/util"
)
var fakeKubeCfg = []byte(`
@ -211,7 +211,7 @@ func TestGetKubeConfigStatus(t *testing.T) {
t.Run(test.description, func(t *testing.T) {
t.Parallel()
configFilename := tempFile(t, test.existing)
statusActual, err := GetKubeConfigStatus(test.ip, configFilename)
statusActual, err := GetKubeConfigStatus(test.ip, configFilename, "minikube")
if err != nil && !test.err {
t.Errorf("Got unexpected error: %s", err)
}
@ -268,7 +268,7 @@ func TestUpdateKubeconfigIP(t *testing.T) {
t.Run(test.description, func(t *testing.T) {
t.Parallel()
configFilename := tempFile(t, test.existing)
statusActual, err := UpdateKubeconfigIP(test.ip, configFilename)
statusActual, err := UpdateKubeconfigIP(test.ip, configFilename, "minikube")
if err != nil && !test.err {
t.Errorf("Got unexpected error: %s", err)
}
@ -355,7 +355,7 @@ func TestGetIPFromKubeConfig(t *testing.T) {
for _, test := range tests {
t.Run(test.description, func(t *testing.T) {
configFilename := tempFile(t, test.cfg)
ip, err := getIPFromKubeConfig(configFilename)
ip, err := getIPFromKubeConfig(configFilename, "minikube")
if err != nil && !test.err {
t.Errorf("Got unexpected error: %s", err)
}
@ -395,7 +395,7 @@ func minikubeConfig(config *api.Config) {
// cluster
clusterName := "minikube"
cluster := api.NewCluster()
cluster.Server = "https://192.168.99.100:" + strconv.Itoa(constants.APIServerPort)
cluster.Server = "https://192.168.99.100:" + strconv.Itoa(util.APIServerPort)
cluster.CertificateAuthority = "/home/tux/.minikube/apiserver.crt"
config.Clusters[clusterName] = cluster

View File

@ -23,6 +23,9 @@ import (
"net/http"
"net/url"
"os"
"os/user"
"path/filepath"
"strconv"
"strings"
"time"
@ -171,3 +174,34 @@ func IsDirectory(path string) (bool, error) {
}
return fileInfo.IsDir(), nil
}
func ChownR(path string, uid, gid int) error {
return filepath.Walk(path, func(name string, info os.FileInfo, err error) error {
if err == nil {
err = os.Chown(name, uid, gid)
}
return err
})
}
func MaybeChownDirRecursiveToMinikubeUser(dir string) error {
if os.Getenv("CHANGE_MINIKUBE_NONE_USER") != "" && os.Getenv("SUDO_USER") != "" {
username := os.Getenv("SUDO_USER")
usr, err := user.Lookup(username)
if err != nil {
return errors.Wrap(err, "Error looking up user")
}
uid, err := strconv.Atoi(usr.Uid)
if err != nil {
return errors.Wrapf(err, "Error parsing uid for user: %s", username)
}
gid, err := strconv.Atoi(usr.Gid)
if err != nil {
return errors.Wrapf(err, "Error parsing gid for user: %s", username)
}
if err := ChownR(dir, uid, gid); err != nil {
return errors.Wrapf(err, "Error changing ownership for: %s", dir)
}
}
return nil
}