mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 15:05:27 +00:00
Merge pull request #6476 from deads2k/deads-fix-kubeconfig-serialization
fix kubeconfig serialization
This commit is contained in:
commit
ca6f1a1bc7
@ -274,7 +274,7 @@ function upload-server-tars() {
|
|||||||
function get-password {
|
function get-password {
|
||||||
# go template to extract the auth-path of the current-context user
|
# go template to extract the auth-path of the current-context user
|
||||||
# Note: we save dot ('.') to $dot because the 'with' action overrides dot
|
# Note: we save dot ('.') to $dot because the 'with' action overrides dot
|
||||||
local template='{{$dot := .}}{{with $ctx := index $dot "current-context"}}{{$user := index $dot "contexts" $ctx "user"}}{{index $dot "users" $user "auth-path"}}{{end}}'
|
local template='{{$dot := .}}{{with $ctx := index $dot "current-context"}}{{range $element := (index $dot "contexts")}}{{ if eq .name $ctx }}{{ with $user := .context.user }}{{range $element := (index $dot "users")}}{{ if eq .name $user }}{{ index . "user" "auth-path" }}{{end}}{{end}}{{end}}{{end}}{{end}}{{end}}'
|
||||||
local file=$("${KUBE_ROOT}/cluster/kubectl.sh" config view -o template --template="${template}")
|
local file=$("${KUBE_ROOT}/cluster/kubectl.sh" config view -o template --template="${template}")
|
||||||
if [[ ! -z "$file" && -r "$file" ]]; then
|
if [[ ! -z "$file" && -r "$file" ]]; then
|
||||||
KUBE_USER=$(cat "$file" | python -c 'import json,sys;print json.load(sys.stdin)["User"]')
|
KUBE_USER=$(cat "$file" | python -c 'import json,sys;print json.load(sys.stdin)["User"]')
|
||||||
|
@ -91,8 +91,8 @@ function get-kubeconfig-basicauth() {
|
|||||||
# is missing.
|
# is missing.
|
||||||
# Note: we save dot ('.') to $root because the 'with' action overrides it.
|
# Note: we save dot ('.') to $root because the 'with' action overrides it.
|
||||||
# See http://golang.org/pkg/text/template/.
|
# See http://golang.org/pkg/text/template/.
|
||||||
local username='{{$root := .}}{{with index $root "current-context"}}{{with index $root "contexts" .}}{{with index . "user"}}{{with index $root "users" .}}{{index . "username"}}{{end}}{{end}}{{end}}{{end}}'
|
local username='{{$dot := .}}{{with $ctx := index $dot "current-context"}}{{range $element := (index $dot "contexts")}}{{ if eq .name $ctx }}{{ with $user := .context.user }}{{range $element := (index $dot "users")}}{{ if eq .name $user }}{{ index . "user" "username" }}{{end}}{{end}}{{end}}{{end}}{{end}}{{end}}'
|
||||||
local password='{{$root := .}}{{with index $root "current-context"}}{{with index $root "contexts" .}}{{with index . "user"}}{{with index $root "users" .}}{{index . "password"}}{{end}}{{end}}{{end}}{{end}}'
|
local password='{{$dot := .}}{{with $ctx := index $dot "current-context"}}{{range $element := (index $dot "contexts")}}{{ if eq .name $ctx }}{{ with $user := .context.user }}{{range $element := (index $dot "users")}}{{ if eq .name $user }}{{ index . "user" "password" }}{{end}}{{end}}{{end}}{{end}}{{end}}{{end}}'
|
||||||
KUBE_USER=$("${KUBE_ROOT}/cluster/kubectl.sh" config view -o template --template="${username}")
|
KUBE_USER=$("${KUBE_ROOT}/cluster/kubectl.sh" config view -o template --template="${username}")
|
||||||
KUBE_PASSWORD=$("${KUBE_ROOT}/cluster/kubectl.sh" config view -o template --template="${password}")
|
KUBE_PASSWORD=$("${KUBE_ROOT}/cluster/kubectl.sh" config view -o template --template="${password}")
|
||||||
# Handle empty/missing username|password
|
# Handle empty/missing username|password
|
||||||
|
@ -23,7 +23,7 @@ $ kubectl config view
|
|||||||
$ kubectl config view --local
|
$ kubectl config view --local
|
||||||
|
|
||||||
// Get the password for the e2e user
|
// Get the password for the e2e user
|
||||||
$ kubectl config view -o template --template='{{ index . "users" "e2e" "password" }}'
|
$ kubectl config view -o template --template='{{range .users}}{{ if eq .name "e2e" }}{{ index .user.password }}{{end}}{{end}}'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
@ -172,7 +172,7 @@ $ kubectl config view
|
|||||||
$ kubectl config view \-\-local
|
$ kubectl config view \-\-local
|
||||||
|
|
||||||
// Get the password for the e2e user
|
// Get the password for the e2e user
|
||||||
$ kubectl config view \-o template \-\-template='\{\{ index . "users" "e2e" "password" \}\}'
|
$ kubectl config view \-o template \-\-template='\{\{range .users\}\}\{\{ if eq .name "e2e" \}\}\{\{ index .user.password \}\}\{\{end\}\}\{\{end\}\}'
|
||||||
|
|
||||||
.fi
|
.fi
|
||||||
.RE
|
.RE
|
||||||
|
@ -41,19 +41,19 @@ fi
|
|||||||
TEMPLATE="--template=\"{{ index . \"current-context\" }}\""
|
TEMPLATE="--template=\"{{ index . \"current-context\" }}\""
|
||||||
CURRENT_CONTEXT=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
CURRENT_CONTEXT=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
||||||
|
|
||||||
TEMPLATE="--template=\"{{ index . \"contexts\" ${CURRENT_CONTEXT} \"cluster\" }}\""
|
TEMPLATE="--template=\"{{range .contexts}}{{ if eq .name ${CURRENT_CONTEXT} }}{{ .context.cluster }}{{end}}{{end}}\""
|
||||||
CURRENT_CLUSTER=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
CURRENT_CLUSTER=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
||||||
|
|
||||||
TEMPLATE="--template=\"{{ index . \"contexts\" ${CURRENT_CONTEXT} \"user\" }}\""
|
TEMPLATE="--template=\"{{range .contexts}}{{ if eq .name ${CURRENT_CONTEXT} }}{{ .context.user }}{{end}}{{end}}\""
|
||||||
CURRENT_USER=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
CURRENT_USER=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
||||||
|
|
||||||
TEMPLATE="--template={{ index . \"clusters\" ${CURRENT_CLUSTER} \"certificate-authority\" }}"
|
TEMPLATE="--template=\"{{range .clusters}}{{ if eq .name ${CURRENT_CLUSTER} }}{{ index . \"cluster\" \"certificate-authority\" }}{{end}}{{end}}\""
|
||||||
CERTIFICATE_AUTHORITY=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
CERTIFICATE_AUTHORITY=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
||||||
|
|
||||||
TEMPLATE="--template={{ index . \"clusters\" ${CURRENT_CLUSTER} \"server\" }}"
|
TEMPLATE="--template=\"{{range .clusters}}{{ if eq .name ${CURRENT_CLUSTER} }}{{ .cluster.server }}{{end}}{{end}}\""
|
||||||
KUBE_MASTER=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
KUBE_MASTER=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
||||||
|
|
||||||
TEMPLATE="--template={{ index . \"users\" ${CURRENT_USER} \"auth-path\" }}"
|
TEMPLATE="--template=\"{{range .users}}{{ if eq .name ${CURRENT_USER} }}{{ index . \"user\" \"auth-path\" }}{{end}}{{end}}\""
|
||||||
AUTH_PATH=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
AUTH_PATH=$( "${kubectl}" "${config[@]:+${config[@]}}" config view -o template "${TEMPLATE}" )
|
||||||
|
|
||||||
# Build an auth_path file to embed as a secret
|
# Build an auth_path file to embed as a secret
|
||||||
|
@ -18,6 +18,7 @@ package config
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -48,6 +49,36 @@ type configCommandTest struct {
|
|||||||
expectedOutputs []string
|
expectedOutputs []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleView() {
|
||||||
|
expectedConfig := newRedFederalCowHammerConfig()
|
||||||
|
test := configCommandTest{
|
||||||
|
args: []string{"view"},
|
||||||
|
startingConfig: newRedFederalCowHammerConfig(),
|
||||||
|
expectedConfig: expectedConfig,
|
||||||
|
}
|
||||||
|
|
||||||
|
output := test.run(nil)
|
||||||
|
fmt.Printf("%v", output)
|
||||||
|
// Output:
|
||||||
|
// apiVersion: v1
|
||||||
|
// clusters:
|
||||||
|
// - cluster:
|
||||||
|
// server: http://cow.org:8080
|
||||||
|
// name: cow-cluster
|
||||||
|
// contexts:
|
||||||
|
// - context:
|
||||||
|
// cluster: cow-cluster
|
||||||
|
// user: red-user
|
||||||
|
// name: federal-context
|
||||||
|
// current-context: ""
|
||||||
|
// kind: Config
|
||||||
|
// preferences: {}
|
||||||
|
// users:
|
||||||
|
// - name: red-user
|
||||||
|
// user:
|
||||||
|
// token: red-token
|
||||||
|
}
|
||||||
|
|
||||||
func TestSetCurrentContext(t *testing.T) {
|
func TestSetCurrentContext(t *testing.T) {
|
||||||
expectedConfig := newRedFederalCowHammerConfig()
|
expectedConfig := newRedFederalCowHammerConfig()
|
||||||
expectedConfig.CurrentContext = "the-new-context"
|
expectedConfig.CurrentContext = "the-new-context"
|
||||||
@ -631,7 +662,7 @@ func testConfigCommand(args []string, startingConfig clientcmdapi.Config) (strin
|
|||||||
return buf.String(), *config
|
return buf.String(), *config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (test configCommandTest) run(t *testing.T) {
|
func (test configCommandTest) run(t *testing.T) string {
|
||||||
out, actualConfig := testConfigCommand(test.args, test.startingConfig)
|
out, actualConfig := testConfigCommand(test.args, test.startingConfig)
|
||||||
|
|
||||||
testSetNilMapsToEmpties(reflect.ValueOf(&test.expectedConfig))
|
testSetNilMapsToEmpties(reflect.ValueOf(&test.expectedConfig))
|
||||||
@ -647,6 +678,8 @@ func (test configCommandTest) run(t *testing.T) {
|
|||||||
t.Errorf("expected '%s' in output, got '%s'", expectedOutput, out)
|
t.Errorf("expected '%s' in output, got '%s'", expectedOutput, out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
}
|
}
|
||||||
func testSetNilMapsToEmpties(curr reflect.Value) {
|
func testSetNilMapsToEmpties(curr reflect.Value) {
|
||||||
actualCurrValue := curr
|
actualCurrValue := curr
|
||||||
|
@ -25,6 +25,8 @@ import (
|
|||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd"
|
||||||
clientcmdapi "github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd/api"
|
clientcmdapi "github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd/api"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd/api/latest"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
|
||||||
cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
)
|
)
|
||||||
@ -45,7 +47,7 @@ $ kubectl config view
|
|||||||
$ kubectl config view --local
|
$ kubectl config view --local
|
||||||
|
|
||||||
// Get the password for the e2e user
|
// Get the password for the e2e user
|
||||||
$ kubectl config view -o template --template='{{ index . "users" "e2e" "password" }}'`
|
$ kubectl config view -o template --template='{{range .users}}{{ if eq .name "e2e" }}{{ index .user.password }}{{end}}{{end}}'`
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdConfigView(out io.Writer, pathOptions *pathOptions) *cobra.Command {
|
func NewCmdConfigView(out io.Writer, pathOptions *pathOptions) *cobra.Command {
|
||||||
@ -63,10 +65,14 @@ func NewCmdConfigView(out io.Writer, pathOptions *pathOptions) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
glog.FatalDepth(1, err)
|
glog.FatalDepth(1, err)
|
||||||
}
|
}
|
||||||
|
version := cmdutil.OutputVersion(cmd, latest.Version)
|
||||||
|
printer = kubectl.NewVersionedPrinter(printer, clientcmdapi.Scheme, version)
|
||||||
|
|
||||||
config, err := options.loadConfig()
|
config, err := options.loadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.FatalDepth(1, err)
|
glog.FatalDepth(1, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = printer.PrintObj(config, out)
|
err = printer.PrintObj(config, out)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.FatalDepth(1, err)
|
glog.FatalDepth(1, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user