forked from msa-school/model-for-ops
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcsi-efs-setup.sh
More file actions
executable file
·128 lines (110 loc) · 5.79 KB
/
csi-efs-setup.sh
File metadata and controls
executable file
·128 lines (110 loc) · 5.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
# Define the mapping list of AWS Region names and corresponding Image Repository names
declare -A region_repository_mapping
region_repository_mapping["af-south-1"]="877085696533.dkr.ecr.af-south-1.amazonaws.com"
region_repository_mapping["ap-east-1"]="800184023465.dkr.ecr.ap-east-1.amazonaws.com"
region_repository_mapping["ap-northeast-1"]="602401143452.dkr.ecr.ap-northeast-1.amazonaws.com"
region_repository_mapping["ap-northeast-2"]="602401143452.dkr.ecr.ap-northeast-2.amazonaws.com"
region_repository_mapping["ap-northeast-3"]="602401143452.dkr.ecr.ap-northeast-3.amazonaws.com"
region_repository_mapping["ap-south-1"]="602401143452.dkr.ecr.ap-south-1.amazonaws.com"
region_repository_mapping["ap-south-2"]="900889452093.dkr.ecr.ap-south-2.amazonaws.com"
region_repository_mapping["ap-southeast-1"]="602401143452.dkr.ecr.ap-southeast-1.amazonaws.com"
region_repository_mapping["ap-southeast-2"]="602401143452.dkr.ecr.ap-southeast-2.amazonaws.com"
region_repository_mapping["ap-southeast-3"]="296578399912.dkr.ecr.ap-southeast-3.amazonaws.com"
region_repository_mapping["ap-southeast-4"]="491585149902.dkr.ecr.ap-southeast-4.amazonaws.com"
region_repository_mapping["ca-central-1"]="602401143452.dkr.ecr.ca-central-1.amazonaws.com"
region_repository_mapping["cn-north-1"]="918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn"
region_repository_mapping["cn-northwest-1"]="961992271922.dkr.ecr.cn-northwest-1.amazonaws.com.cn"
region_repository_mapping["eu-central-1"]="602401143452.dkr.ecr.eu-central-1.amazonaws.com"
region_repository_mapping["eu-central-2"]="900612956339.dkr.ecr.eu-central-2.amazonaws.com"
region_repository_mapping["eu-north-1"]="602401143452.dkr.ecr.eu-north-1.amazonaws.com"
region_repository_mapping["eu-south-1"]="590381155156.dkr.ecr.eu-south-1.amazonaws.com"
region_repository_mapping["eu-south-2"]="455263428931.dkr.ecr.eu-south-2.amazonaws.com"
region_repository_mapping["eu-west-1"]="602401143452.dkr.ecr.eu-west-1.amazonaws.com"
region_repository_mapping["eu-west-2"]="602401143452.dkr.ecr.eu-west-2.amazonaws.com"
region_repository_mapping["eu-west-3"]="602401143452.dkr.ecr.eu-west-3.amazonaws.com"
region_repository_mapping["me-south-1"]="558608220178.dkr.ecr.me-south-1.amazonaws.com"
region_repository_mapping["me-central-1"]="759879836304.dkr.ecr.me-central-1.amazonaws.com"
region_repository_mapping["sa-east-1"]="602401143452.dkr.ecr.sa-east-1.amazonaws.com"
region_repository_mapping["us-east-1"]="602401143452.dkr.ecr.us-east-1.amazonaws.com"
region_repository_mapping["us-east-2"]="602401143452.dkr.ecr.us-east-2.amazonaws.com"
region_repository_mapping["us-gov-east-1"]="151742754352.dkr.ecr.us-gov-east-1.amazonaws.com"
region_repository_mapping["us-gov-west-1"]="013241004608.dkr.ecr.us-gov-west-1.amazonaws.com"
region_repository_mapping["us-west-1"]="602401143452.dkr.ecr.us-west-1.amazonaws.com"
region_repository_mapping["us-west-2"]="602401143452.dkr.ecr.us-west-2.amazonaws.com"
# Add more region-repository pairs as needed
# Function to prompt user for input with validation
function get_input() {
local var
while [[ -z "$var" ]]; do
read -p "$1: " var
done
echo "$var"
}
# Function to ask for confirmation before executing commands
function confirm_execution() {
read -p "Do you want to execute the AWS EFS Configuration commands? (y/n): " choice
case "$choice" in
y|Y ) return 0;;
n|N ) return 1;;
* ) echo "Invalid choice. Please enter 'y' or 'n'."; confirm_execution;;
esac
}
# Get inputs from user
REGION_CODE=$(get_input "Enter AWS Region Code (e.g., us-west-2)")
CLUSTER_NAME=$(get_input "Enter Cluster Name")
FILE_SYSTEM_ID=$(get_input "Enter File System ID")
# Check if the input region exists in the mapping list
if [ -n "${region_repository_mapping[$REGION_CODE]}" ]; then
echo " "
else
echo " "
echo "Error: Image Repository not found for region $REGION_CODE"
exit 1 # Exit the script with a non-zero status code to indicate an error
fi
# Fetch Root UID from AWS CLI command
ROOT_UID=$(aws sts get-caller-identity --query Account --output text)
echo " "
echo "REGION_CODE : " $REGION_CODE
echo "CLUSTER_NAME : " $CLUSTER_NAME
echo "ROOT_UID : " $ROOT_UID
echo "FILE_SYSTEM_ID : " $FILE_SYSTEM_ID
echo "Image Repository for $REGION_CODE : " ${region_repository_mapping[$REGION_CODE]}
echo " "
# Validate inputs (requires not null)
if [[ -z "$REGION_CODE" || -z "$CLUSTER_NAME" || -z "$ROOT_UID" || -z "$FILE_SYSTEM_ID" ]]; then
echo " "
echo "Error: All parameters must have non-null values."
exit 1
fi
# Confirm before executing AWS commands
confirm_execution || exit 0
# Create IAM ServiceAccount and Attach AmazonEBSCSIDriver Policy to Cluster
echo "."
echo "Creating IAM ServiceAccount..."
eksctl create iamserviceaccount \
--override-existing-serviceaccounts \
--region $REGION_CODE \
--name efs-csi-controller-sa \
--namespace kube-system \
--cluster $CLUSTER_NAME \
--attach-policy-arn arn:aws:iam::$ROOT_UID:policy/EFSCSIControllerIAMPolicy \
--approve &&
# Create aws-efs-csi-driver and upgrade with Helm
echo "."
echo "Create aws-efs-csi-driver and upgrade with Helm..."
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver &&
helm repo update aws-efs-csi-driver &&
helm upgrade --install aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver \
--namespace kube-system \
--set image.repository=${region_repository_mapping[$REGION_CODE]}/eks/aws-efs-csi-driver \
--set controller.serviceAccount.create=false \
--set controller.serviceAccount.name=efs-csi-controller-sa &&
echo "."
echo "Register EFS CSI driver as StorageClass..."
curl -o efs-sc.yaml https://raw.githubusercontent.com/msa-school/Lab-required-Materials/main/Ops/efs-storage-class.yaml &&
sed -i "s/FILE_SYSTEM_ID/$FILE_SYSTEM_ID/g" efs-sc.yaml &&
kubectl apply -f efs-sc.yaml
echo "."
echo "."
echo "All AWS commands executed successfully."