@@ -7,17 +7,102 @@ here="$(dirname "$(readlink -f "$0")")"
77source " ${here} /common.bash"
88
99usage () {
10- echo " Usage: kubeconfig <user|admin <wc|sc> [cluster_name]>" >&2
10+ echo " Usage: kubeconfig <user| dev <serviceaccount> | admin <wc|sc> [cluster_name]>" >&2
1111 exit 1
1212}
1313
14+ get_user_server () {
15+ (
16+ with_kubeconfig " ${kubeconfig} " \
17+ kubectl config view -o jsonpath=" {.clusters[0].cluster.server}"
18+ )
19+ }
20+
21+ set_cluster () {
22+
23+ user_kubeconfig=$1
24+
25+ user_server=$( get_user_server)
26+ user_certificate_authority=/tmp/user-authority.pem
27+ append_trap " rm ${user_certificate_authority} " EXIT
28+ (
29+ with_kubeconfig " ${kubeconfig} " \
30+ kubectl config view --raw \
31+ -o jsonpath=" {.clusters[0].cluster.certificate-authority-data}" \
32+ | base64 --decode > ${user_certificate_authority}
33+ )
34+
35+ kubectl --kubeconfig=" ${user_kubeconfig} " config set-cluster " ${cluster_name} " \
36+ --server=" ${user_server} " \
37+ --certificate-authority=" ${user_certificate_authority} " --embed-certs=true
38+ }
39+
40+ set_dex_credentials () {
41+ user_kubeconfig=$1
42+ name=$2
43+ cluster_name=$3
44+
45+ base_domain=$( yq4 ' .global.baseDomain' " ${cluster_config} " )
46+
47+ kubectl --kubeconfig=" ${user_kubeconfig} " config set-credentials " ${name} @${cluster_name} " \
48+ --exec-command=kubectl \
49+ --exec-api-version=client.authentication.k8s.io/v1beta1 \
50+ --exec-arg=oidc-login \
51+ --exec-arg=get-token \
52+ --exec-arg=--oidc-issuer-url=" https://dex.${base_domain} " \
53+ --exec-arg=--oidc-client-id=kubelogin \
54+ --exec-arg=--oidc-client-secret=" $( sops -d --extract ' ["dex"]["kubeloginClientSecret"]' " ${secrets[secrets_file]} " ) " \
55+ --exec-arg=--oidc-extra-scope=email \
56+ --exec-arg=--oidc-extra-scope=groups
57+ }
58+
59+ set_context () {
60+
61+ user_kubeconfig=$1
62+ cluster_name=$2
63+ context_name=$3
64+ user_name=$4
65+ context_namespace=$5
66+
67+ kubectl --kubeconfig=" ${user_kubeconfig} " config set-context \
68+ " ${context_name} " \
69+ --user " ${user_name} @${cluster_name} " --cluster=" ${cluster_name} " --namespace=" ${context_namespace} "
70+ }
71+
72+ use_context () {
73+
74+ user_kubeconfig=$1
75+ cluster_name=$2
76+
77+ kubectl --kubeconfig=" ${user_kubeconfig} " config use-context \
78+ " ${cluster_name} "
79+ }
80+
1481case " ${1} " in
1582 user)
1683 config_load wc
1784 cluster_config=" ${config[config_file_wc]} "
1885 kubeconfig=" ${config[kube_config_wc]} "
1986 user_kubeconfig=${CK8S_CONFIG_PATH} /user/secret/kubeconfig.yaml
2087 ;;
88+ dev)
89+ log_info " Adding dev ${2} context to wc-config"
90+
91+ config_load wc
92+ cluster_config=" ${config[config_file_wc]} "
93+ kubeconfig=" ${config[kube_config_wc]} "
94+
95+ token=$( with_kubeconfig " ${kubeconfig} " kubectl get secrets secret-" ${2} " -ojsonpath=" {.data.token}" | base64 -d)
96+ cluster_name=$( yq4 ' .global.clusterName' " ${cluster_config} " )
97+
98+ kubectl --kubeconfig=" ${kubeconfig} " config set-credentials " ${2} @${cluster_name} " \
99+ --token=" ${token} "
100+
101+ set_context " ${kubeconfig} " " ${cluster_name} " " ${2} " " ${2} " " default"
102+
103+ log_info " Dev context finished"
104+ exit
105+ ;;
21106 admin)
22107 case " ${2} " in
23108 sc)
@@ -47,42 +132,12 @@ if [[ ! -f "${kubeconfig}" ]]; then
47132 usage
48133fi
49134
50- get_user_server () {
51- (
52- with_kubeconfig " ${kubeconfig} " \
53- kubectl config view -o jsonpath=" {.clusters[0].cluster.server}"
54- )
55- }
56-
57135log_info " Creating kubeconfig for the ${1} "
58136
59137cluster_name=$( yq4 ' .global.clusterName' " ${cluster_config} " )
60- base_domain=$( yq4 ' .global.baseDomain' " ${cluster_config} " )
61-
62- # Get server and certificate from the admin kubeconfig
63- user_server=$( get_user_server)
64- user_certificate_authority=/tmp/user-authority.pem
65- append_trap " rm ${user_certificate_authority} " EXIT
66- (
67- with_kubeconfig " ${kubeconfig} " \
68- kubectl config view --raw \
69- -o jsonpath=" {.clusters[0].cluster.certificate-authority-data}" \
70- | base64 --decode > ${user_certificate_authority}
71- )
72-
73- kubectl --kubeconfig=" ${user_kubeconfig} " config set-cluster " ${cluster_name} " \
74- --server=" ${user_server} " \
75- --certificate-authority=" ${user_certificate_authority} " --embed-certs=true
76- kubectl --kubeconfig=" ${user_kubeconfig} " config set-credentials " ${1} @${cluster_name} " \
77- --exec-command=kubectl \
78- --exec-api-version=client.authentication.k8s.io/v1beta1 \
79- --exec-arg=oidc-login \
80- --exec-arg=get-token \
81- --exec-arg=--oidc-issuer-url=" https://dex.${base_domain} " \
82- --exec-arg=--oidc-client-id=kubelogin \
83- --exec-arg=--oidc-client-secret=" $( sops -d --extract ' ["dex"]["kubeloginClientSecret"]' " ${secrets[secrets_file]} " ) " \
84- --exec-arg=--oidc-extra-scope=email \
85- --exec-arg=--oidc-extra-scope=groups
138+
139+ set_cluster " ${user_kubeconfig} "
140+ set_dex_credentials " ${user_kubeconfig} " " ${1} " " ${cluster_name} "
86141
87142# Create context with relevant namespace
88143# Pick the first namespace
92147 context_namespace=" default"
93148fi
94149
95- kubectl --kubeconfig=" ${user_kubeconfig} " config set-context \
96- " ${cluster_name} " \
97- --user " ${1} @${cluster_name} " --cluster=" ${cluster_name} " --namespace=" ${context_namespace} "
98- kubectl --kubeconfig=" ${user_kubeconfig} " config use-context \
99- " ${cluster_name} "
150+ set_context " ${user_kubeconfig} " " ${cluster_name} " " ${cluster_name} " " ${1} " " ${context_namespace} "
151+ use_context " ${user_kubeconfig} " " ${cluster_name} "
100152
101153log_info " User kubeconfig can now be found at ${user_kubeconfig} ."
0 commit comments