Skip to content

Commit 703d04f

Browse files
dploegerDennis Ploeger
authored andcommitted
feat: Support multiple project gks
This also features an optimization of the Kubernetes features.
1 parent 5f0a1e7 commit 703d04f

7 files changed

Lines changed: 226 additions & 199 deletions

File tree

feature/kubernetes/feature.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ configuration:
4848
This generates the script `k8s-relogin` which allows you to recreate the Kubernetes credentials.
4949
- |
5050
(gcloud flavor)
51-
* Environment GCLOUD_K8S_CLUSTERS: A comma separated list of zone:cluster-name
51+
* Environment GCLOUD_K8S_CLUSTERS: A comma separated list of zone[@project]:cluster-name
5252
* Environment K8S_USE_GCLOUD_AUTH: Whether to use the new GKE_GCLOUD_AUTH plugin [true]
5353
test:
5454
flavours:

feature/kubernetes/install-aws.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
function installKubernetes() {
2+
waitForMfaCode
3+
for CLUSTER in $(echo "${AWS_K8S_CLUSTERS}" | tr "," "\n")
4+
do
5+
ARN_OPTION=()
6+
K8S_CLUSTER=""
7+
SUDO_OPTION=()
8+
if echo "$CLUSTER" | grep "|.*@" &>/dev/null
9+
then
10+
K8S_CLUSTER=$(echo "$CLUSTER" | cut -d "|" -f 1)
11+
ARN=$(echo "$CLUSTER" | cut -d "|" -f 2 | cut -d "@" -f 1)
12+
SUDO_ARN=$(echo "$CLUSTER" | cut -d "|" -f 2 | cut -d "@" -f 2)
13+
ARN_OPTION=(--role-arn "${ARN}")
14+
SUDO_OPTION=(awsudo "${SUDO_ARN}")
15+
echo "Cluster ${K8S_CLUSTER} with role ${ARN} as role ${SUDO_ARN}"
16+
elif echo "$CLUSTER" | grep "|" &>/dev/null
17+
then
18+
K8S_CLUSTER=$(echo "$CLUSTER" | cut -d "|" -f 1)
19+
ARN=$(echo "$CLUSTER" | cut -d "|" -f 2)
20+
ARN_OPTION=(--role-arn "${ARN}")
21+
echo "Cluster ${K8S_CLUSTER} with role ${ARN}"
22+
else
23+
K8S_CLUSTER="$CLUSTER"
24+
echo "Cluster ${K8S_CLUSTER}"
25+
fi
26+
execHandle "Fetching k8s credentials for ${CLUSTER}" "${SUDO_OPTION[@]}" aws eks update-kubeconfig --name "${K8S_CLUSTER}" --alias "${K8S_CLUSTER}" "${ARN_OPTION[@]}"
27+
done
28+
29+
TEMPFILE=$(mktemp)
30+
GPGCHECK=1
31+
32+
if [ -n "${AWS_SKIP_GPG}" ];
33+
then
34+
GPGCHECK=0
35+
fi
36+
37+
cat <<EOF > "${TEMPFILE}"
38+
[kubernetes]
39+
name=Kubernetes
40+
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$(uname -m)
41+
enabled=1
42+
gpgcheck=${GPGCHECK}
43+
repo_gpgcheck=${GPGCHECK}
44+
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
45+
EOF
46+
47+
execHandle "Configuring package repository for kubectl" sudo mv "${TEMPFILE}" /etc/yum.repos.d/kubernetes.repo
48+
49+
KUBECTL_PACKAGE="kubectl"
50+
if [[ "X${KUBECTL_VERSION}X" != "XX" ]]
51+
then
52+
KUBECTL_VERSION=$(checkAndCleanVersion "${KUBECTL_VERSION}")
53+
KUBECTL_PACKAGE="${KUBECTL_PACKAGE}-${KUBECTL_VERSION}"
54+
fi
55+
56+
execHandle "Installing kubectl..." sudo yum install -y "$KUBECTL_PACKAGE"
57+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
function installKubernetes() {
2+
IFS=' ' read -r -a install_options <<< "${AZ_K8S_INSTALL_OPTIONS:=""}"
3+
execHandle "Installing kubectl" sudo az aks install-cli "${install_options[@]}"
4+
5+
if ${AZ_USE_ARM_SPI:-false}
6+
then
7+
if [ -e ~/.config/fish/conf.d/ ]
8+
then
9+
cat <<EOF >> ~/.config/fish/conf.d/kubernetes-spi.fish
10+
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=${ARM_CLIENT_ID}
11+
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=${ARM_CLIENT_SECRET}
12+
EOF
13+
fi
14+
cat <<EOF >> ~/.bashrc
15+
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=${ARM_CLIENT_ID}
16+
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=${ARM_CLIENT_SECRET}
17+
EOF
18+
fi
19+
20+
echo "#!/bin/sh" > ~/bin/k8s-relogin
21+
# shellcheck disable=SC2088
22+
echo "~/bin/azure-relogin" >> ~/bin/k8s-relogin
23+
24+
AZ_DO_KUBELOGIN_CONVERT="${AZ_USE_ARM_SPI:-false}"
25+
for CLUSTER in $(echo "${AZ_K8S_CLUSTERS}" | tr "," "\n"); do
26+
K8S_RESOURCEGROUP=$(echo "$CLUSTER" | cut -d ":" -f 1)
27+
K8S_CLUSTER=$(echo "$CLUSTER" | cut -d ":" -f 2)
28+
K8S_SUBSCRIPTION=()
29+
30+
if [[ "${K8S_RESOURCEGROUP}" == *"@"* ]]; then
31+
K8S_SUBSCRIPTION=(--subscription)
32+
K8S_SUBSCRIPTION+=("$(echo "${K8S_RESOURCEGROUP}" | cut -d "@" -f 2)")
33+
K8S_RESOURCEGROUP=$(echo "${K8S_RESOURCEGROUP}" | cut -d "@" -f 1)
34+
fi
35+
36+
echo -n "Cluster ${K8S_CLUSTER} in resource group ${K8S_RESOURCEGROUP}"
37+
38+
ADMIN_PARAMETER=""
39+
40+
if [ "X${K8S_CLUSTER:0:1}X" == "X!X" ]; then
41+
ADMIN_PARAMETER="--admin"
42+
K8S_CLUSTER="${K8S_CLUSTER:1}"
43+
echo " as admin"
44+
else
45+
echo ""
46+
fi
47+
48+
echo az aks get-credentials --overwrite-existing --resource-group "${K8S_RESOURCEGROUP}" --name "${K8S_CLUSTER}" ${ADMIN_PARAMETER} "${K8S_SUBSCRIPTION[@]}" >> ~/bin/k8s-relogin
49+
50+
execHandle "Fetching k8s credentials for ${CLUSTER}" az aks get-credentials --resource-group "${K8S_RESOURCEGROUP}" --name "${K8S_CLUSTER}" ${ADMIN_PARAMETER} "${K8S_SUBSCRIPTION[@]}"
51+
52+
# az aks get-credentials since kubernetes version 1.24 puts directly the kubelogin-way into kube config, hence the check here:
53+
if [ "$(az aks show -n "${K8S_CLUSTER}" -g "${K8S_RESOURCEGROUP}" "${K8S_SUBSCRIPTION[@]}" | jq -r .currentKubernetesVersion | cut -d"." -f2)" -le 23 ]; then
54+
AZ_DO_KUBELOGIN_CONVERT=true
55+
fi
56+
57+
done
58+
chmod +x ~/bin/k8s-relogin
59+
60+
if ${AZ_DO_KUBELOGIN_CONVERT}; then
61+
args=()
62+
if ${AZ_USE_ARM_SPI:-false};
63+
then
64+
args+=("-l" "spn")
65+
fi
66+
67+
execHandle "Converting credentials to kubelogin" kubelogin convert-kubeconfig "${args[@]}"
68+
echo kubelogin convert-kubeconfig "${args[@]}" >> ~/bin/k8s-relogin
69+
fi
70+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function installKubernetes() {
2+
KUBECTL_VERSION=$(checkAndCleanVersion "${KUBECTL_VERSION}")
3+
prepare
4+
execHandle "Downloading kubectl" curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION:-$(curl -L -s https://dl.k8s.io/release/stable.txt)}/bin/linux/$(getPlatform)/kubectl"
5+
execHandle "Making kubectl executable" chmod +x kubectl
6+
execHandle "Moving kubectl to bin" mv kubectl /home/cloudcontrol/bin
7+
cleanup
8+
9+
if [ "${K8S_USE_GCLOUD_AUTH:-true}" == "true" ]
10+
then
11+
execHandle "Installing gke-cloud-auth-plugin" sudo gcloud components install gke-gcloud-auth-plugin
12+
export USE_GKE_GCLOUD_AUTH_PLUGIN=True
13+
fi
14+
15+
for ZONEDCLUSTER in $(echo "${GCLOUD_K8S_CLUSTERS}" | tr "," "\n")
16+
do
17+
ZONE=$(echo "${ZONEDCLUSTER}" | cut -d ":" -f 1)
18+
CLUSTER=$(echo "${ZONEDCLUSTER}" | cut -d ":" -f 2)
19+
if [[ $ZONE =~ @ ]]
20+
then
21+
PROJECT=$(echo "$ZONE" | cut -d "@" -f 2)
22+
ZONE=$(echo "$ZONE" | cut -d "@" -f 1)
23+
fi
24+
command=(gcloud container clusters get-credentials "${CLUSTER}" --zone "${ZONE}")
25+
26+
if [[ -n $PROJECT ]]
27+
then
28+
command+=(--project "${PROJECT}")
29+
fi
30+
execHandle "Authenticating against cluster ${CLUSTER} in zone ${ZONE}" "${command[@]}"
31+
echo "${command[@]}" >> ~/bin/k8s-relogin
32+
chmod +x ~/bin/k8s-relogin
33+
done
34+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
function installKubernetes() {
2+
KUBECTL_VERSION=$(checkAndCleanVersion "${KUBECTL_VERSION}")
3+
prepare
4+
execHandle "Downloading kubectl" curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION:-$(curl -L -s https://dl.k8s.io/release/stable.txt)}/bin/linux/$(getPlatform)/kubectl"
5+
execHandle "Making kubectl executable" chmod +x kubectl
6+
execHandle "Moving kubectl to bin" mv kubectl /home/cloudcontrol/bin
7+
cleanup
8+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function installKubernetes() {
2+
prepare
3+
execHandle "Downloading kubectl and kubectl vsphere plugin" curl -k -L -o kubectl.zip "https://${TANZU_HOST}${TANZU_VSPHERE_PLUGIN_PATH:-/wcp/plugin/linux-amd64/vsphere-plugin.zip}"
4+
execHandle "Extracting zip" unzip kubectl.zip
5+
execHandle "Moving kubectl to bin" mv bin/kubectl /home/cloudcontrol/bin
6+
execHandle "Moving kubectl-vsphere to bin" mv bin/kubectl-vsphere /home/cloudcontrol/bin
7+
cleanup
8+
9+
echo "#!/bin/sh" > ~/bin/k8s-relogin
10+
11+
PATH=$PATH:/home/cloudcontrol/bin
12+
13+
loginArgs=("--server" "${TANZU_HOST}" "--vsphere-username" "${TANZU_USERNAME}")
14+
15+
if [ "X${TANZU_SKIP_TLS_VERIFY:-no}X" == "XyesX" ]
16+
then
17+
loginArgs+=("--insecure-skip-tls-verify")
18+
fi
19+
20+
if [ "X${TANZU_ADD_CONTROL_CLUSTER:-no}X" == "XyesX" ]
21+
then
22+
execHandle "Authenticating against control cluster" kubectl vsphere login "${loginArgs[@]}"
23+
echo kubectl vsphere login "${loginArgs[@]}" >> ~/bin/k8s-relogin
24+
fi
25+
26+
for NAMESPACEDCLUSTER in $(echo "${TANZU_CLUSTERS}" | tr "," "\n")
27+
do
28+
NAMESPACE=$(echo "$NAMESPACEDCLUSTER" | cut -d ":" -f 1)
29+
CLUSTER=$(echo "$NAMESPACEDCLUSTER" | cut -d ":" -f 2)
30+
execHandle "Authenticating against cluster ${CLUSTER} in namespace ${NAMESPACE}" kubectl vsphere login "${loginArgs[@]}" --tanzu-kubernetes-cluster-namespace="${NAMESPACE}" --tanzu-kubernetes-cluster-name="${CLUSTER}"
31+
echo kubectl vsphere login "${loginArgs[@]}" --tanzu-kubernetes-cluster-namespace="${NAMESPACE}" --tanzu-kubernetes-cluster-name="${CLUSTER}" >> ~/bin/k8s-relogin
32+
done
33+
chmod +x ~/bin/k8s-relogin
34+
}

0 commit comments

Comments
 (0)