primo
This commit is contained in:
118
add-on/create_ns.sh
Normal file
118
add-on/create_ns.sh
Normal file
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env bash
|
||||
###########################################################
|
||||
#./kube-provisioning.sh dev cicd-user kubeconfig-dev.yaml
|
||||
#arg1 = namespace
|
||||
#arg2 = env (dev|qa|prod)
|
||||
###########################################################
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
############################################
|
||||
# CONFIG
|
||||
############################################
|
||||
|
||||
NAMESPACE=${1:-dev}-$2
|
||||
SERVICE_ACCOUNT="deployer"
|
||||
KUBECONFIG_FILE=${NAMESPACE}.yaml
|
||||
|
||||
echo "Namespace: $NAMESPACE"
|
||||
echo "ServiceAccount: $SERVICE_ACCOUNT"
|
||||
echo "Output kubeconfig: $KUBECONFIG_FILE"
|
||||
|
||||
############################################
|
||||
# CHECK REQUIREMENTS
|
||||
############################################
|
||||
|
||||
if ! command -v kubectl >/dev/null 2>&1; then
|
||||
echo "kubectl not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
############################################
|
||||
# CREATE NAMESPACE
|
||||
############################################
|
||||
|
||||
kubectl get ns "$NAMESPACE" >/dev/null 2>&1 || kubectl create namespace "$NAMESPACE"
|
||||
|
||||
############################################
|
||||
# CREATE SERVICE ACCOUNT
|
||||
############################################
|
||||
|
||||
kubectl -n "$NAMESPACE" get sa "$SERVICE_ACCOUNT" >/dev/null 2>&1 || \
|
||||
kubectl -n "$NAMESPACE" create serviceaccount "$SERVICE_ACCOUNT"
|
||||
|
||||
############################################
|
||||
# CREATE ROLE
|
||||
############################################
|
||||
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: namespace-deployer
|
||||
namespace: $NAMESPACE
|
||||
rules:
|
||||
- apiGroups: ["", "apps", "batch", "networking.k8s.io"]
|
||||
resources: ["*"]
|
||||
verbs: ["*"]
|
||||
EOF
|
||||
|
||||
############################################
|
||||
# CREATE ROLE BINDING
|
||||
############################################
|
||||
|
||||
kubectl -n "$NAMESPACE" get rolebinding namespace-deployer-binding >/dev/null 2>&1 || \
|
||||
kubectl create rolebinding namespace-deployer-binding \
|
||||
--role=namespace-deployer \
|
||||
--serviceaccount=${NAMESPACE}:${SERVICE_ACCOUNT} \
|
||||
-n "$NAMESPACE"
|
||||
|
||||
############################################
|
||||
# GENERATE TOKEN
|
||||
############################################
|
||||
|
||||
TOKEN=$(kubectl create token "$SERVICE_ACCOUNT" -n "$NAMESPACE")
|
||||
|
||||
############################################
|
||||
# CLUSTER INFO
|
||||
############################################
|
||||
|
||||
CLUSTER_NAME=$(kubectl config view --minify -o jsonpath='{.clusters[0].name}')
|
||||
CLUSTER_SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
|
||||
CLUSTER_CA=$(kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')
|
||||
|
||||
############################################
|
||||
# GENERATE KUBECONFIG
|
||||
############################################
|
||||
|
||||
cat <<EOF > "$KUBECONFIG_FILE"
|
||||
apiVersion: v1
|
||||
kind: Config
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: ${CLUSTER_CA}
|
||||
server: ${CLUSTER_SERVER}
|
||||
name: ${CLUSTER_NAME}
|
||||
|
||||
contexts:
|
||||
- context:
|
||||
cluster: ${CLUSTER_NAME}
|
||||
namespace: ${NAMESPACE}
|
||||
user: ${SERVICE_ACCOUNT}
|
||||
name: ${SERVICE_ACCOUNT}-${CLUSTER_NAME}
|
||||
|
||||
current-context: ${SERVICE_ACCOUNT}-${CLUSTER_NAME}
|
||||
|
||||
users:
|
||||
- name: ${SERVICE_ACCOUNT}
|
||||
user:
|
||||
token: ${TOKEN}
|
||||
EOF
|
||||
|
||||
echo
|
||||
echo "Kubeconfig generated:"
|
||||
echo "$KUBECONFIG_FILE"
|
||||
|
||||
echo
|
||||
echo "Test command:"
|
||||
echo "kubectl --kubeconfig=$KUBECONFIG_FILE get pods"
|
||||
Reference in New Issue
Block a user