forked from t04glovern/gke-istio-bootstrap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeploy.sh
executable file
·140 lines (134 loc) · 5.17 KB
/
deploy.sh
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/bin/sh
PROJECT_ID="$1"
PROJECT_REGION="australia-southeast1"
# Set Project
gcloud config set project $PROJECT_ID
case "$3" in
"create" )
DEPLOY_ACTION="create"
;;
"delete" )
DEPLOY_ACTION="delete"
;;
* )
echo "Script requires an action. E.g. create, delete"
exit 1
;;
esac
case "$2" in
"iam" )
PROJECT_NUM=$(gcloud projects list \
--filter=PROJECT_ID=$PROJECT_ID \
--format="value(PROJECT_NUMBER)")
if [ "$DEPLOY_ACTION" = "create" ]; then
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:[email protected] \
--role roles/owner
else
echo "Deleting $PROJECT_ID-iam"
gcloud projects remove-iam-policy-binding $PROJECT_ID \
--member serviceAccount:[email protected] \
--role roles/owner
fi
;;
"network" )
if [ "$DEPLOY_ACTION" = "create" ]; then
gcloud deployment-manager deployments create $PROJECT_ID-network \
--config resources/network.yaml
else
echo "Deleting $PROJECT_ID-network"
gcloud deployment-manager deployments delete $PROJECT_ID-network -q
fi
;;
"cloud-router" )
if [ "$DEPLOY_ACTION" = "create" ]; then
gcloud deployment-manager deployments create $PROJECT_ID-cloud-router \
--config resources/cloud_router.yaml
gcloud compute routers nats create $PROJECT_ID-nat \
--router=$PROJECT_ID-cloud-router \
--router-region=$PROJECT_REGION \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges
else
echo "Deleting $PROJECT_ID-nat"
gcloud compute routers nats delete $PROJECT_ID-nat \
--router=$PROJECT_ID-cloud-router \
--router-region=$PROJECT_REGION -q
echo "Deleting $PROJECT_ID-cloud-router"
gcloud deployment-manager deployments delete $PROJECT_ID-cloud-router -q
fi
;;
"gke" )
if [ "$DEPLOY_ACTION" = "create" ]; then
gcloud deployment-manager deployments create $PROJECT_ID-gke \
--config resources/gke.yaml
else
echo "Deleting $PROJECT_ID-gke"
gcloud deployment-manager deployments delete $PROJECT_ID-gke -q
fi
;;
"bastion" )
if [ "$DEPLOY_ACTION" = "create" ]; then
gcloud deployment-manager deployments create $PROJECT_ID-bastion \
--config resources/bastion.yaml
else
echo "Deleting $PROJECT_ID-bastion"
gcloud deployment-manager deployments delete $PROJECT_ID-bastion -q
fi
;;
"dns" )
if [ "$DEPLOY_ACTION" = "create" ]; then
aws cloudformation create-stack \
--stack-name $PROJECT_ID-route53-user \
--template-body file://cloudformation/route53.yaml \
--parameters ParameterKey=Password,ParameterValue=$(openssl rand -base64 30) \
--capabilities CAPABILITY_IAM
aws cloudformation wait stack-create-complete --stack-name $PROJECT_ID-route53-user
ACCESS_KEY=$(aws cloudformation describe-stacks --stack-name $PROJECT_ID-route53-user \
--query 'Stacks[0].Outputs[?OutputKey==`AccessKey`].OutputValue' \
--output text)
SECRET_KEY=$(aws cloudformation describe-stacks --stack-name $PROJECT_ID-route53-user \
--query 'Stacks[0].Outputs[?OutputKey==`SecretKey`].OutputValue' \
--output text)
tee <<EOF >./k8s/external-dns.yaml
provider: aws
aws:
secretKey: '$SECRET_KEY'
accessKey: '$ACCESS_KEY'
rbac:
create: true
sources:
- service
- ingress
- istio-gateway
EOF
else
echo "Deleting $PROJECT_ID-route53-user stack"
aws cloudformation delete-stack --stack-name $PROJECT_ID-route53-user
rm k8s/external-dns.yaml
fi
;;
"all" )
if [ "$DEPLOY_ACTION" = "create" ]; then
echo "Creating all in $PROJECT_ID"
./deploy.sh $PROJECT_ID iam create
./deploy.sh $PROJECT_ID network create
./deploy.sh $PROJECT_ID cloud-router create
./deploy.sh $PROJECT_ID gke create
./deploy.sh $PROJECT_ID bastion create
./deploy.sh $PROJECT_ID dns create
else
echo "Deleting all in $PROJECT_ID"
./deploy.sh $PROJECT_ID dns delete
./deploy.sh $PROJECT_ID bastion delete
./deploy.sh $PROJECT_ID gke delete
./deploy.sh $PROJECT_ID cloud-router delete
./deploy.sh $PROJECT_ID network delete
./deploy.sh $PROJECT_ID iam delete
fi
;;
* )
echo "Script requires a resource. E.g. iam, network, cloud-router, gke, bastion, dns or all"
exit 1
;;
esac