Skip to content

Commit ea2feb5

Browse files
committed
MicroShift: merge kubeconfig to user defined KUBECONFIG or ~/.kube/config
With this patch, the kubeconfig file which is part of microshift is merged with kubeconfig file which user provided as part of `KUBECONFIG` env or default path (~/.kube/config) and set the default context to microshift. This will allow user to start microshift and consume directly without export the kubconfig path. ``` $ oc config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE default/api-192-168-130-11-nip-io:6443/kubeadmin api-192-168-130-11-nip-io:6443 kubeadmin/api-192-168-130-11-nip-io:6443 default default/api-35-199-20-126-nip-io:6443/kubeadmin api-35-199-20-126-nip-io:6443 kubeadmin/api-35-199-20-126-nip-io:6443 default demo/api-192-168-130-11-nip-io:6443/kubeadmin api-192-168-130-11-nip-io:6443 kubeadmin/api-192-168-130-11-nip-io:6443 demo * microshift microshift user default test/api-192-168-130-11-nip-io:6443/kubeadmin api-192-168-130-11-nip-io:6443 kubeadmin/api-192-168-130-11-nip-io:6443 test $ oc config current-context microshift ```
1 parent f2dd97e commit ea2feb5

File tree

2 files changed

+49
-10
lines changed

2 files changed

+49
-10
lines changed

pkg/crc/machine/kubeconfig.go

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,10 @@ func updateClientCrtAndKeyToKubeconfig(clientKey, clientCrt []byte, srcKubeconfi
4747
}
4848

4949
func writeKubeconfig(ip string, clusterConfig *types.ClusterConfig) error {
50-
kubeconfig := getGlobalKubeConfigPath()
51-
dir := filepath.Dir(kubeconfig)
52-
if err := os.MkdirAll(dir, 0755); err != nil {
50+
kubeconfig, cfg, err := getGlobalKubeConfig()
51+
if err != nil {
5352
return err
5453
}
55-
// Make sure .kube/config exist if not then this will create
56-
_, _ = os.OpenFile(kubeconfig, os.O_RDONLY|os.O_CREATE, 0600)
57-
5854
ca, err := certificateAuthority(clusterConfig.KubeConfig)
5955
if err != nil {
6056
return err
@@ -64,10 +60,6 @@ func writeKubeconfig(ip string, clusterConfig *types.ClusterConfig) error {
6460
return err
6561
}
6662

67-
cfg, err := clientcmd.LoadFromFile(kubeconfig)
68-
if err != nil {
69-
return err
70-
}
7163
cfg.Clusters[host] = &api.Cluster{
7264
Server: clusterConfig.ClusterAPI,
7365
CertificateAuthorityData: ca,
@@ -87,6 +79,18 @@ func writeKubeconfig(ip string, clusterConfig *types.ClusterConfig) error {
8779
return clientcmd.WriteToFile(*cfg, kubeconfig)
8880
}
8981

82+
func getGlobalKubeConfig() (string, *api.Config, error) {
83+
kubeconfig := getGlobalKubeConfigPath()
84+
config, err := clientcmd.LoadFromFile(kubeconfig)
85+
if err != nil && !os.IsNotExist(err) {
86+
return "", nil, err
87+
}
88+
if config == nil {
89+
config = api.NewConfig()
90+
}
91+
return kubeconfig, config, nil
92+
}
93+
9094
func certificateAuthority(kubeconfigFile string) ([]byte, error) {
9195
builtin, err := clientcmd.LoadFromFile(kubeconfigFile)
9296
if err != nil {
@@ -240,3 +244,34 @@ func updateServerDetailsToKubeConfig(input, output string) error {
240244
}
241245
return clientcmd.WriteToFile(*cfg, output)
242246
}
247+
248+
func mergeKubeConfigFile(kubeConfigFile string) error {
249+
globalConfigPath, kubeConf1, err := getGlobalKubeConfig()
250+
if err != nil {
251+
return err
252+
}
253+
kubeConf2, err := clientcmd.LoadFromFile(kubeConfigFile)
254+
if err != nil {
255+
return err
256+
}
257+
// Merge the kubeConf2 to globalConfig
258+
mergedConfig, err := clientcmd.NewDefaultClientConfig(*kubeConf1, &clientcmd.ConfigOverrides{}).ConfigAccess().GetStartingConfig()
259+
if err != nil {
260+
return err
261+
}
262+
263+
for name, cluster := range kubeConf2.Clusters {
264+
mergedConfig.Clusters[name] = cluster
265+
}
266+
267+
for name, authInfo := range kubeConf2.AuthInfos {
268+
mergedConfig.AuthInfos[name] = authInfo
269+
}
270+
271+
for name, context := range kubeConf2.Contexts {
272+
mergedConfig.Contexts[name] = context
273+
}
274+
275+
mergedConfig.CurrentContext = kubeConf2.CurrentContext
276+
return clientcmd.WriteToFile(*mergedConfig, globalConfigPath)
277+
}

pkg/crc/machine/start.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,10 @@ func (client *client) Start(ctx context.Context, startConfig types.StartConfig)
499499
return nil, err
500500
}
501501
}
502+
logging.Info("Adding microshift context to kubeconfig...")
503+
if err := mergeKubeConfigFile(constants.KubeconfigFilePath); err != nil {
504+
return nil, err
505+
}
502506

503507
return &types.StartResult{
504508
ClusterConfig: types.ClusterConfig{ClusterType: startConfig.Preset},

0 commit comments

Comments
 (0)