11#! /bin/bash -e
22
3+ # set KUBECONFIG to your datapalane cluster
4+ # or provider workspace for KCP.
5+ # It creates a kubeconfig in $KC for
6+ # a controller working on resources in this
7+ # environment.
8+
39SA=apiexport-serviceaccount-coredns
410SN=kcp-controller-token
511NS=dns-service
612KC=gen/controller.kubeconfig
13+ RT=
14+ TS=
15+ TN=dns-system
16+
17+ error ()
18+ {
19+ echo " error: $* " >&2
20+ exit 1
21+ }
22+
23+ args=( " $@ " )
24+ consume ()
25+ {
26+ local n=$1
27+ if [ $# -eq 0 ]; then
28+ n=1
29+ fi
30+ args=( " ${args[@]: $n } " )
31+ }
32+
33+ getArg ()
34+ {
35+ if [ ${# args[@]} -lt 2 ]; then
36+ error " $1 requires an argument"
37+ fi
38+ local -n target=$1
39+ target=" ${args[1]} "
40+ consume 2
41+ }
42+
43+ help ()
44+ {
45+ echo " create a kubeconfig for a controller using a adataplane to access"
46+ echo " the DNS resources"
47+ echo " --dp <kubeconfig>: dataplane/provider workspace kubeconfig"
48+ echo " --sa <serviceaccount>: service account for created kubeconfig"
49+ echo " --sn <secret name>: service account secret in dataplane and target secret"
50+ echo " --ns <namespace>: namespace in dataplane and target secret"
51+ echo " --kc <target>: file name for target kubeconfig"
52+ echo " --rt <kubeconfig>: target kubeconfig used to create target secret (if set)"
53+ echo " --ts <secret name>: target secret name (defaults to sn)"
54+ echo " --tn <target namespace>: target namespace(defaults to ns)"
55+ exit 0
56+ }
57+
58+ while [ ${# args[@]} -gt 0 ]; do
59+ case " ${args[0]} " in
60+ --dry-run)
61+ D=X
62+ consume;;
63+ --restserver)
64+ TS=controller-manager-restdataplane
65+ consume;;
66+ --kubedns)
67+ TS=controller-manager-dataplane
68+ consume;;
69+ --dp) getArg KUBECONFIG
70+ export KUBECONFIG;;
71+ --sa) getArg SA;;
72+ --sn) getArg SN;;
73+ --ns) getArg NS;;
74+ --kc) getArg KC;;
75+ --rt) getArg RT
76+ KC=;;
77+ --ts) getArg TS;;
78+ --tn) getArg TN;;
79+ --help|-h) help ;;
80+ --* |-* ) error " invalid argument ${args[0]} "
81+ esac
82+ done
83+
84+ echo " kubeconfig: $KUBECONFIG "
85+ echo " service account: $SA "
86+ echo " secret name: $SN "
87+ echo " namespace: $NS "
88+ echo " target file: $KC "
89+ if [ -n " $RT " ]; then
90+ if [ -z " $TS " ]; then
91+ TS=" $SN "
92+ fi
93+ if [ -z " $TN " ]; then
94+ TN=" $NS "
95+ fi
96+ echo " runtime kubeconfig: $RT "
97+ echo " runtime secret: $TS "
98+ echo " runtime namespace: $TN "
99+ fi
100+
101+ if [ -n " $D " ]; then
102+ exit 1
103+ fi
104+
7105
8106SRV=" $( kubectl config view --minify -o jsonpath=' {.clusters[0].cluster.server}' ) "
9107echo " server is $SRV "
10108
11109if ! kubectl -n " $NS " get serviceaccount " $SA " > /dev/null 2>&1 ; then
12110 echo creating serviceaccount $NS /$SA
111+ kubectl apply -f - << EOF
13112apiVersion: v1
14113kind: ServiceAccount
15114metadata:
@@ -48,19 +147,23 @@ while true; do
48147 fi
49148done
50149
150+ C=" $( basename " $KC " ) "
151+ if [ -z " $C " ]; then
152+ C=dataplane
153+ fi
51154
52- cat << EOF > " $KC "
155+ CONFIG= " $( cat << EOF
53156apiVersion: v1
54157kind: Config
55158clusters:
56- - name: $( basename " $KC " )
159+ - name: $C
57160 cluster:
58161 certificate-authority-data: ${cert}
59162 server: ${SRV}
60163contexts:
61164- name: sa-context
62165 context:
63- cluster: $( basename " $KC " )
166+ cluster: $C
64167 user: $A
65168 namespace: $NS
66169current-context: sa-context
@@ -69,23 +172,29 @@ users:
69172 user:
70173 token: ${token}
71174EOF
175+ ) "
176+ if [ -n " $KC " ]; then
177+ echo " $CONFIG " > " $KC "
72178 echo " Generated $KC "
179+ fi
73180
74181if [ -n " $RT " ]; then
182+ echo creating secret in target $TN
75183 SECRET=" $( cat << EOF
76184apiVersion: v1
77185kind: Secret
78186type: Opaque
79187metadata:
80- name: $SN
81- namespace: $NS
188+ name: $TS
189+ namespace: $TN
82190data:
83- kubeconfig: $( base64 -w 0 " $A .kubeconfig " )
191+ kubeconfig: $( base64 -w 0 <<< " $CONFIG " )
84192 token: $( base64 -w 0 <<< " $token" )
85193 ca.crt: $cert
86194EOF
87195) "
88196 echo " $SECRET "
89197 kubectl --kubeconfig " $RT " apply -f - <<< " $SECRET"
198+ echo " Created kubeconfig secret $SN "
90199fi
91200
0 commit comments