@@ -17,6 +17,7 @@ SHARED_PROPERTY_FILENAME=""
17
17
# AWS_REGION=""
18
18
TAG=" "
19
19
SEC_LIST=" "
20
+ SECPS_LIST=" "
20
21
# COUNTER_LIMIT=12
21
22
22
23
if [ -z " $COUNTER_LIMIT " ]; then
@@ -36,6 +37,7 @@ task_def=""
36
37
CONTAINER_LOG_DRIVER=" awslogs"
37
38
portcount=0
38
39
envcount=0
40
+ psenvcount=0
39
41
volcount=0
40
42
template=" "
41
43
TEMPLATE_SKELETON_FILE=" base_template_v2.json"
@@ -136,6 +138,22 @@ ECS_push_ecr_image() {
136
138
docker tag $APP_IMAGE_NAME :$ECS_TAG $AWS_ACCOUNT_ID .dkr.ecr.$AWS_REGION .amazonaws.com/$AWS_REPOSITORY :$CIRCLE_BUILD_NUM
137
139
ECS_TAG=$CIRCLE_BUILD_NUM
138
140
fi
141
+
142
+ CHECK_ECR_EXIST=" "
143
+ CHECK_ECR_EXIST=$( aws ecr describe-repositories --repository-names ${AWS_REPOSITORY} 2>&1 )
144
+ if [ $? -ne 0 ]; then
145
+ if echo ${CHECK_ECR_EXIST} | grep -q RepositoryNotFoundException; then
146
+ echo " repo does not exist and creating repo"
147
+ aws ecr create-repository --repository-name $AWS_REPOSITORY
148
+ track_error $? " ECS ECR repo creation"
149
+ log " Repo created successfully."
150
+ else
151
+ echo ${CHECK_ECR_EXIST}
152
+ fi
153
+ else
154
+ echo " $AWS_REPOSITORY repository already exist"
155
+ fi
156
+
139
157
log " Pushing Docker Image..."
140
158
eval $( aws ecr get-login --region $AWS_REGION --no-include-email)
141
159
docker push $AWS_ACCOUNT_ID .dkr.ecr.$AWS_REGION .amazonaws.com/$AWS_REPOSITORY :$ECS_TAG
@@ -207,6 +225,21 @@ let envcount=envcount+1
207
225
# echo "envcount after ---------" $envcount
208
226
# echo "envvalue after ---------" $envvalue
209
227
}
228
+ # =========================
229
+ psenvaddition () {
230
+ # echo "psenvcount before " $psenvcount
231
+
232
+ envname=$1
233
+ envvalue=$2
234
+ # echo "env value before" $envvalue
235
+ set -f
236
+ template=$( echo $template | jq --arg name " $envname " --arg value " $envvalue " --arg psenvcount $psenvcount ' .containerDefinitions[0].secrets[$psenvcount |tonumber] |= .+ { name: $name, valueFrom: $value }' )
237
+ set +f
238
+ let psenvcount=psenvcount+1
239
+ # echo "psenvcount after ---------" $psenvcount
240
+ # echo "envvalue after ---------" $envvalue
241
+ }
242
+
210
243
# =========================
211
244
logconfiguration () {
212
245
template=$( echo $template | jq --arg logDriver $CONTAINER_LOG_DRIVER ' .containerDefinitions[0].logConfiguration.logDriver=$logDriver' )
@@ -259,12 +292,16 @@ log "Family updated"
259
292
# taskrole and excution role has updated
260
293
if [ -z $AWS_ECS_TASK_ROLE_ARN ];
261
294
then
262
- log " No Execution Role defined"
295
+ log " No Task Role defined"
263
296
else
264
297
template=$( echo $template | jq --arg taskRoleArn arn:aws:iam::$AWS_ACCOUNT_ID :role/$AWS_ECS_TASK_ROLE_ARN ' .taskRoleArn=$taskRoleArn' )
265
298
fi
266
- # template=$(echo $template | jq --arg executionRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/ecsTaskExecutionRole '.executionRoleArn=$executionRoleArn')
267
-
299
+ if [ -z $AWS_ECS_TASK_EXECUTION_ROLE_ARN ];
300
+ then
301
+ log " No Task Execution Role defined"
302
+ else
303
+ template=$( echo $template | jq --arg executionRoleArn arn:aws:iam::$AWS_ACCOUNT_ID :role/$AWS_ECS_TASK_EXECUTION_ROLE_ARN ' .executionRoleArn=$executionRoleArn' )
304
+ fi
268
305
# Container Name update
269
306
template=$( echo $template | jq --arg name $AWS_ECS_CONTAINER_NAME ' .containerDefinitions[0].name=$name' )
270
307
log " Container Name updated"
321
358
done
322
359
IFS=$o
323
360
done
324
-
361
+ if [ -z $SECPS_LIST ];
362
+ then
363
+ log " No ps file provided"
364
+ else
365
+ Buffer_seclist=$( echo $SECPS_LIST | sed ' s/,/ /g' )
366
+ for listname in $Buffer_seclist ;
367
+ do
368
+ local o=$IFS
369
+ IFS=$( echo -en " \n\b" )
370
+ varpath=$( cat $listname .json | jq -r ' .ParmeterPathList[] ' )
371
+ # log "vars are fetched"
372
+ for k in $varpath ;
373
+ do
374
+ echo $k
375
+ aws ssm get-parameters-by-path --path $k --query " Parameters[*].{Name:Name}" > paramnames.json
376
+ # ##paramnames=$(cat paramnames.json | jq -r .[].Name | rev | cut -d / -f 1 | rev)
377
+ for s in $( cat paramnames.json | jq -r .[].Name )
378
+ do
379
+ varname=$( echo $s | rev | cut -d / -f 1 | rev)
380
+ varvalue=" arn:aws:ssm:$AWS_REGION :$AWS_ACCOUNT_ID :parameter$s "
381
+ psenvaddition " $varname " " $varvalue "
382
+ # echo "$varname" "$varvalue"
383
+ done
384
+ done
385
+ IFS=$o
386
+ done
387
+ fi
325
388
log " environment has updated"
326
389
# Log Configuration
327
390
logconfiguration
413
476
ECS_deploy_cluster () {
414
477
415
478
AWS_ECS_SERVICE=$1
416
- update_result=$( aws ecs update-service --cluster $AWS_ECS_CLUSTER --service $AWS_ECS_SERVICE --task-definition $REVISION )
417
- result=$( echo $update_result | $JQ ' .service.taskDefinition' )
418
- log $result
419
- if [[ $result != $REVISION ]]; then
420
- # echo "Error updating service."
421
- track_error 1 " ECS updating service."
422
- return 1
479
+ # checking cluster exist
480
+ CHECK_CLUSTER_EXIST=" "
481
+ CHECK_CLUSTER_EXIST=$( aws ecs describe-clusters --cluster $AWS_ECS_CLUSTER | jq --raw-output ' select(.clusters[].clusterName != null ) | .clusters[].clusterName' )
482
+ if [ -z $CHECK_CLUSTER_EXIST ];
483
+ then
484
+ echo " $AWS_ECS_CLUSTER cluster does not exist. Kindly check with admin team"
485
+ exit 1
486
+ else
487
+ echo " $AWS_ECS_CLUSTER Cluster exist"
488
+ fi
489
+ # checking service exist
490
+ CHECK_SERVICE_EXIST=" "
491
+ CHECK_SERVICE_EXIST=$( aws ecs describe-services --service $AWS_ECS_SERVICE --cluster $AWS_ECS_CLUSTER | jq --raw-output ' select(.services[].status != null ) | .services[].status' )
492
+ if [ -z $CHECK_SERVICE_EXIST ];
493
+ then
494
+ if [ " $ECS_TEMPLATE_TYPE " == " FARGATE" ];
495
+ then
496
+ echo " Fargate Service does not exist. Kindly check with admin team"
497
+ exit 1
498
+ else
499
+ echo " service does not exist. Creating service"
500
+ aws ecs create-service --cluster $AWS_ECS_CLUSTER --service-name $AWS_ECS_SERVICE --task-definition $REVISION --desired-count 1
501
+ echo " Kindly work with admin team for routing"
502
+ fi
503
+ else
504
+ echo " service exist.Application updates the service"
505
+ update_result=$( aws ecs update-service --cluster $AWS_ECS_CLUSTER --service $AWS_ECS_SERVICE --task-definition $REVISION )
506
+ result=$( echo $update_result | $JQ ' .service.taskDefinition' )
507
+ log $result
508
+ if [[ $result != $REVISION ]]; then
509
+ # echo "Error updating service."
510
+ track_error 1 " ECS updating service."
511
+ return 1
512
+ fi
513
+
514
+ echo " Update service intialised successfully for deployment"
423
515
fi
424
516
425
- echo " Update service intialised successfully for deployment"
426
517
return 0
427
518
}
428
519
@@ -613,6 +704,17 @@ download_envfile()
613
704
# openssl enc -aes-256-cbc -d -md MD5 -in $listname.json.enc -out $listname.json -k $SECPASSWD
614
705
done
615
706
}
707
+ download_psfile ()
708
+ {
709
+ Buffer_seclist=$( echo $SECPS_LIST | sed ' s/,/ /g' )
710
+ for listname in $Buffer_seclist ;
711
+ do
712
+ aws s3 cp s3://tc-platform-${ENV_CONFIG} /securitymanager/$listname .json .
713
+ track_error $? " $listname .json download"
714
+ jq ' keys[]' $listname .json
715
+ track_error $? " $listname .json"
716
+ done
717
+ }
616
718
decrypt_fileenc ()
617
719
{
618
720
Buffer_seclist=$( echo $SEC_LIST | sed ' s/,/ /g' )
@@ -696,7 +798,7 @@ deploy_lambda_package()
696
798
# Input Collection and validation
697
799
input_parsing_validation ()
698
800
{
699
- while getopts .d:h:i:e:t:v:s:p:g:c:m:. OPTION
801
+ while getopts .d:h:i:e:l: t:v:s:p:g:c:m:. OPTION
700
802
do
701
803
case $OPTION in
702
804
d)
712
814
e)
713
815
ENV=$OPTARG
714
816
;;
817
+ l)
818
+ SECPS_LIST=$OPTARG
819
+ ;;
715
820
t)
716
821
TAG=$OPTARG
717
822
;;
@@ -773,6 +878,13 @@ ENV_CONFIG=`echo "$ENV" | tr '[:upper:]' '[:lower:]'`
773
878
# fi
774
879
775
880
download_envfile
881
+ if [ -z $SECPS_LIST ];
882
+ then
883
+ log " No secret parameter file list provided"
884
+
885
+ else
886
+ download_psfile
887
+ fi
776
888
# decrypt_fileenc
777
889
# uploading_envvar
778
890
@@ -974,7 +1086,7 @@ then
974
1086
echo " ${# AWS_ECS_SERVICES[@]} service are going to be updated"
975
1087
for AWS_ECS_SERVICE_NAME in " ${AWS_ECS_SERVICES[@]} "
976
1088
do
977
- echo " updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME "
1089
+ echo " creating/ updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME "
978
1090
ECS_deploy_cluster " $AWS_ECS_SERVICE_NAME "
979
1091
check_service_status " $AWS_ECS_SERVICE_NAME "
980
1092
# echo $REVISION
0 commit comments