From 7bf5981731876cc84cb70d3e81fdbd72b0dc2ce7 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 09:40:21 +0530 Subject: [PATCH 01/22] Update awsconfiguration.sh --- awsconfiguration.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 8d32031..dc81f1e 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -1,6 +1,10 @@ #!/bin/bash AWSENV=$1 AWS_REGION=$2 +CIRCLE_PROJECT_USERNAME=$TC_GIT_AUTHOR +CIRCLE_PROJECT_REPONAME=$TC_REPONAME +CIRCLE_BUILD_NUM=$BUILD_NUMBER +CIRCLE_BRANCH=$BRANCH_NAME BASE64_DECODER="base64 -d" # option -d for Linux base64 tool echo AAAA | base64 -d > /dev/null 2>&1 || BASE64_DECODER="base64 -D" # option -D on MacOS decode_base64_url() { From d63e05ab5b8a0ec9feacaabf2fa36b29ad7fed3e Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 10:06:20 +0530 Subject: [PATCH 02/22] Update awsconfiguration.sh --- awsconfiguration.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index dc81f1e..5831386 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -20,6 +20,7 @@ if [ -z "$AWS_REGION" ]; then AWS_REGION="us-east-1" fi +echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" auth0cmd=$(echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") token=$( eval $auth0cmd | jq -r .access_token ) tokenjsonformat=$( decode_base64_url $(echo -n $token | cut -d "." -f 2) ) From 8f4e581a96d5bf1ef2ed250a9e96593a8e5c9216 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 10:17:05 +0530 Subject: [PATCH 03/22] Update awsconfiguration.sh --- awsconfiguration.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 5831386..56d167e 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -1,10 +1,21 @@ #!/bin/bash AWSENV=$1 AWS_REGION=$2 + +echo $TC_GIT_AUTHOR +echo $TC_REPONAME +echo $BUILD_NUMBER +echo $BRANCH_NAME +echo ${TC_GIT_AUTHOR} CIRCLE_PROJECT_USERNAME=$TC_GIT_AUTHOR CIRCLE_PROJECT_REPONAME=$TC_REPONAME CIRCLE_BUILD_NUM=$BUILD_NUMBER CIRCLE_BRANCH=$BRANCH_NAME + +echo $CIRCLE_PROJECT_USERNAME +echo $CIRCLE_PROJECT_REPONAME +echo $CIRCLE_BUILD_NUM +echo $CIRCLE_BRANCH BASE64_DECODER="base64 -d" # option -d for Linux base64 tool echo AAAA | base64 -d > /dev/null 2>&1 || BASE64_DECODER="base64 -D" # option -D on MacOS decode_base64_url() { From aa70ba159acd804e3b15421a3718d0de5dcbc888 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 10:31:06 +0530 Subject: [PATCH 04/22] Update awsconfiguration.sh --- awsconfiguration.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 56d167e..ef3ee16 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -33,8 +33,11 @@ then fi echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" auth0cmd=$(echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") +echo $auth0cmd token=$( eval $auth0cmd | jq -r .access_token ) +echo $token tokenjsonformat=$( decode_base64_url $(echo -n $token | cut -d "." -f 2) ) +echo $tokenjsonformat AWS_ACCESS_KEY_ID=$(echo $tokenjsonformat | jq -r . | grep AWS_ACCESS_KEY | cut -d '"' -f 4) AWS_SECRET_ACCESS_KEY=$(echo $tokenjsonformat | jq -r . | grep AWS_SECRET_KEY | cut -d '"' -f 4) AWS_ENVIRONMENT=$(echo $tokenjsonformat | jq -r . | grep AWS_ENVIRONMENT | cut -d '"' -f 4) From 9c88da849a63530c3f3f9c18d8ca08258488e8c8 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 10:59:31 +0530 Subject: [PATCH 05/22] Update awsconfiguration.sh --- awsconfiguration.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index ef3ee16..25758a6 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -2,12 +2,13 @@ AWSENV=$1 AWS_REGION=$2 +echo $TC_GIT_ORG echo $TC_GIT_AUTHOR echo $TC_REPONAME echo $BUILD_NUMBER echo $BRANCH_NAME echo ${TC_GIT_AUTHOR} -CIRCLE_PROJECT_USERNAME=$TC_GIT_AUTHOR +CIRCLE_PROJECT_USERNAME=$TC_GIT_ORG CIRCLE_PROJECT_REPONAME=$TC_REPONAME CIRCLE_BUILD_NUM=$BUILD_NUMBER CIRCLE_BRANCH=$BRANCH_NAME From 291a5a3c8f57c6085d21cf325e193d3d63589530 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 11:04:17 +0530 Subject: [PATCH 06/22] Update awsconfiguration.sh --- awsconfiguration.sh | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 25758a6..70c161e 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -2,21 +2,11 @@ AWSENV=$1 AWS_REGION=$2 -echo $TC_GIT_ORG -echo $TC_GIT_AUTHOR -echo $TC_REPONAME -echo $BUILD_NUMBER -echo $BRANCH_NAME -echo ${TC_GIT_AUTHOR} CIRCLE_PROJECT_USERNAME=$TC_GIT_ORG CIRCLE_PROJECT_REPONAME=$TC_REPONAME CIRCLE_BUILD_NUM=$BUILD_NUMBER CIRCLE_BRANCH=$BRANCH_NAME -echo $CIRCLE_PROJECT_USERNAME -echo $CIRCLE_PROJECT_REPONAME -echo $CIRCLE_BUILD_NUM -echo $CIRCLE_BRANCH BASE64_DECODER="base64 -d" # option -d for Linux base64 tool echo AAAA | base64 -d > /dev/null 2>&1 || BASE64_DECODER="base64 -D" # option -D on MacOS decode_base64_url() { @@ -32,11 +22,9 @@ if [ -z "$AWS_REGION" ]; then AWS_REGION="us-east-1" fi -echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" +# echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" auth0cmd=$(echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") -echo $auth0cmd token=$( eval $auth0cmd | jq -r .access_token ) -echo $token tokenjsonformat=$( decode_base64_url $(echo -n $token | cut -d "." -f 2) ) echo $tokenjsonformat AWS_ACCESS_KEY_ID=$(echo $tokenjsonformat | jq -r . | grep AWS_ACCESS_KEY | cut -d '"' -f 4) @@ -58,6 +46,9 @@ echo "export AWS_ENVIRONMENT=\"$AWS_ENVIRONMENT\"">>awsenvconf echo "export AWS_SESSION_TOKEN=\"$AWS_SESSION_TOKEN\"">>awsenvconf echo "export AWS_ACCOUNT_ID=\"$AWS_ACCOUNT_ID\"">>awsenvconf +pwd +ls -lath + if grep -Fxq "awsenvconf" .dockerignore then echo "awsenvconf exist in docker ignore file list" From fd18762bdd16457c03aeb4fc7a3fb0cbe4106fd7 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 11:34:31 +0530 Subject: [PATCH 07/22] Update awsconfiguration.sh --- awsconfiguration.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 70c161e..82c22da 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -46,8 +46,14 @@ echo "export AWS_ENVIRONMENT=\"$AWS_ENVIRONMENT\"">>awsenvconf echo "export AWS_SESSION_TOKEN=\"$AWS_SESSION_TOKEN\"">>awsenvconf echo "export AWS_ACCOUNT_ID=\"$AWS_ACCOUNT_ID\"">>awsenvconf -pwd -ls -lath +echo "">awsenvconfg +echo "env.AWS_REGION=\"$AWS_REGION\"">>awsenvconfg +echo "env.AWS_ACCESS_KEY_ID=\"$AWS_ACCESS_KEY_ID\"">>awsenvconfg +echo "env.AWS_SECRET_ACCESS_KEY=\"$AWS_SECRET_ACCESS_KEY\"">>awsenvconfg +echo "env.AWS_ENVIRONMENT=\"$AWS_ENVIRONMENT\"">>awsenvconfg +echo "env.AWS_SESSION_TOKEN=\"$AWS_SESSION_TOKEN\"">>awsenvconfg +echo "env.AWS_ACCOUNT_ID=\"$AWS_ACCOUNT_ID\"">>awsenvconfg + if grep -Fxq "awsenvconf" .dockerignore then From 9b8a35582abe0ed1090d2ce58eaa88e6ec26605d Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 11:37:37 +0530 Subject: [PATCH 08/22] Update awsconfiguration.sh --- awsconfiguration.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 82c22da..71bf215 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -26,7 +26,6 @@ fi auth0cmd=$(echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") token=$( eval $auth0cmd | jq -r .access_token ) tokenjsonformat=$( decode_base64_url $(echo -n $token | cut -d "." -f 2) ) -echo $tokenjsonformat AWS_ACCESS_KEY_ID=$(echo $tokenjsonformat | jq -r . | grep AWS_ACCESS_KEY | cut -d '"' -f 4) AWS_SECRET_ACCESS_KEY=$(echo $tokenjsonformat | jq -r . | grep AWS_SECRET_KEY | cut -d '"' -f 4) AWS_ENVIRONMENT=$(echo $tokenjsonformat | jq -r . | grep AWS_ENVIRONMENT | cut -d '"' -f 4) From 222090ddca6c58dcb0096413c1be4aebf5ae3ddf Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 11:57:06 +0530 Subject: [PATCH 09/22] Update buildenv.sh --- buildenv.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/buildenv.sh b/buildenv.sh index 3d6b91f..ae7a341 100755 --- a/buildenv.sh +++ b/buildenv.sh @@ -51,6 +51,7 @@ uploading_buildenvvar() varvalue=$(echo $s| jq -r ".value") echo $varname echo export "$varname"="'$varvalue'" >>"buildenvvar" + echo "env.$varname"="'$varvalue'" >>"buildenvvarg" #export "$varname"="$varvalue" #echo export "$varname"="$varvalue" >>"$BASH_ENV" #echo export "$varname"="\"$varvalue\"" >> ~/.circlerc @@ -111,3 +112,9 @@ then else echo "buildenvvar" >> .dockerignore fi +if grep -Fxq "buildenvvarg" .dockerignore +then + log "buildenvvarg exist in docker ignore file list" +else + echo "buildenvvarg" >> .dockerignore +fi From 369d2570f2ba59b79326b3e076396e71d37fbf50 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 13:11:28 +0530 Subject: [PATCH 10/22] Update master_deploy.sh --- master_deploy.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/master_deploy.sh b/master_deploy.sh index b373884..b1e5231 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -8,6 +8,7 @@ ENV="" BUILD_VARIABLE_FILE_NAME="./buildvar.conf" SECRET_FILE_NAME="./buildsecvar.conf" SHARED_PROPERTY_FILENAME="" +CIRCLE_BUILD_NUM=$BUILD_NUMBER #Common Varibles #echo $AWS_ACCESS_KEY_ID @@ -135,8 +136,8 @@ ECS_push_ecr_image() { log "Image has followed standard format" else log "Image does not follow stanard format. Modifying the image and updating the ECS_TAG" - docker tag $APP_IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$CIRCLE_BUILD_NUM - ECS_TAG=$CIRCLE_BUILD_NUM + docker tag $APP_IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:tc-jb-$CIRCLE_BUILD_NUM + ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi CHECK_ECR_EXIST="" @@ -169,8 +170,8 @@ ECSCLI_push_ecr_image() { log "Image has followed standard format" else log "Image does not follow stanard format. Modifying the image and updating the ECS_TAG" - docker tag $IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$CIRCLE_BUILD_NUM - ECS_TAG=$CIRCLE_BUILD_NUM + docker tag $IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:tc-jb-$CIRCLE_BUILD_NUM + ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi log "Pushing Docker Image..." eval $(aws ecr get-login --region $AWS_REGION --no-include-email) From 9e2733505fd002b04d29c7a0aa0f63979de2a164 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 22:39:51 +0530 Subject: [PATCH 11/22] Update buildenv.sh --- buildenv.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/buildenv.sh b/buildenv.sh index ae7a341..046df39 100755 --- a/buildenv.sh +++ b/buildenv.sh @@ -105,6 +105,7 @@ done ENV_CONFIG=`echo "$ENV" | tr '[:upper:]' '[:lower:]'` download_buildenvfile uploading_buildenvvar +chmod +x buildenvvar if grep -Fxq "buildenvvar" .dockerignore then From 55a3382b29adaa04ed8474c08641c2def80d2b4d Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 28 Jun 2022 22:41:00 +0530 Subject: [PATCH 12/22] Update awsconfiguration.sh --- awsconfiguration.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 71bf215..326e1be 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -53,6 +53,7 @@ echo "env.AWS_ENVIRONMENT=\"$AWS_ENVIRONMENT\"">>awsenvconfg echo "env.AWS_SESSION_TOKEN=\"$AWS_SESSION_TOKEN\"">>awsenvconfg echo "env.AWS_ACCOUNT_ID=\"$AWS_ACCOUNT_ID\"">>awsenvconfg +chmod +x awsenvconf if grep -Fxq "awsenvconf" .dockerignore then From 1919555557f688ba18459020af8835bf3aa7145d Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 29 Jun 2022 14:14:27 +0530 Subject: [PATCH 13/22] Update master_deploy.sh --- master_deploy.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/master_deploy.sh b/master_deploy.sh index b1e5231..caebe3d 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -156,7 +156,8 @@ ECS_push_ecr_image() { fi log "Pushing Docker Image..." - eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + # eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$ECS_TAG track_error $? "ECS ECR image push" log "Docker Image published." @@ -174,7 +175,8 @@ ECSCLI_push_ecr_image() { ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi log "Pushing Docker Image..." - eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + $ eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$ECS_TAG track_error $? "ECS ECR image push" log "Docker Image published." From f5cc8685740bf2d1f8746c6c538b4db8c130869a Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 29 Jun 2022 15:35:55 +0530 Subject: [PATCH 14/22] Update master_deploy.sh --- master_deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master_deploy.sh b/master_deploy.sh index caebe3d..79ffa1f 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -175,7 +175,7 @@ ECSCLI_push_ecr_image() { ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi log "Pushing Docker Image..." - $ eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + # eval $(aws ecr get-login --region $AWS_REGION --no-include-email) aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$ECS_TAG track_error $? "ECS ECR image push" From 59d898706ec25791ce8a3fa6186664d4112a760d Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 29 Jun 2022 15:38:32 +0530 Subject: [PATCH 15/22] Update master_deploy.sh --- master_deploy.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/master_deploy.sh b/master_deploy.sh index 79ffa1f..2c55cd9 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -156,6 +156,7 @@ ECS_push_ecr_image() { fi log "Pushing Docker Image..." + aws ecr get-login --region $AWS_REGION --no-include-email # eval $(aws ecr get-login --region $AWS_REGION --no-include-email) aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$ECS_TAG @@ -175,6 +176,7 @@ ECSCLI_push_ecr_image() { ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi log "Pushing Docker Image..." + aws ecr get-login --region $AWS_REGION --no-include-email # eval $(aws ecr get-login --region $AWS_REGION --no-include-email) aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$ECS_TAG From 80eb75a704f19c38a12eee6179d2c3271c2eeb51 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 29 Jun 2022 15:56:18 +0530 Subject: [PATCH 16/22] Update master_deploy.sh --- master_deploy.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/master_deploy.sh b/master_deploy.sh index 2c55cd9..93088c7 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -156,9 +156,9 @@ ECS_push_ecr_image() { fi log "Pushing Docker Image..." - aws ecr get-login --region $AWS_REGION --no-include-email - # eval $(aws ecr get-login --region $AWS_REGION --no-include-email) - aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com + # aws ecr get-login --region $AWS_REGION --no-include-email + eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + # aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$ECS_TAG track_error $? "ECS ECR image push" log "Docker Image published." @@ -176,9 +176,9 @@ ECSCLI_push_ecr_image() { ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi log "Pushing Docker Image..." - aws ecr get-login --region $AWS_REGION --no-include-email - # eval $(aws ecr get-login --region $AWS_REGION --no-include-email) - aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com + # aws ecr get-login --region $AWS_REGION --no-include-email + eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + # aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$ECS_TAG track_error $? "ECS ECR image push" log "Docker Image published." From 4209bd20de074f6c06614fc868547c721473cef5 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 29 Jun 2022 21:38:18 +0530 Subject: [PATCH 17/22] Update master_deploy.sh --- master_deploy.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/master_deploy.sh b/master_deploy.sh index 93088c7..78480df 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -41,6 +41,7 @@ envcount=0 psenvcount=0 volcount=0 template="" +TEMPLATE_DIR="$(dirname "$(pwd)")"/buildscript TEMPLATE_SKELETON_FILE="base_template_v2.json" APP_IMAGE_NAME="" DEPLOYCATEGORY="" @@ -911,7 +912,7 @@ then fi DEPLOYCATEGORYNAME="ECSCLI" else - cp $HOME/buildscript/$TEMPLATE_SKELETON_FILE . + cp $TEMPLATE_DIR/$TEMPLATE_SKELETON_FILE . if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $AWS_ECS_TASK_FAMILY ] || [ -z $AWS_ECS_CONTAINER_NAME ] || [ -z $AWS_ECS_PORTS ] || [ -z $ECS_TAG ]; then @@ -934,7 +935,7 @@ fi if [ "$DEPLOYMENT_TYPE" == "EBS" ] then # EBS_TAG = the docker image tag for example dev.201807051535 - cp $HOME/buildscript/$EBS_TEMPLATE_SKELETON_FILE . + cp $TEMPLATE_DIR/$EBS_TEMPLATE_SKELETON_FILE . EBS_TAG=$TAG AWS_EBS_APPVER="${AWS_EBS_ENV_NAME}-${EBS_TAG}" IMG_WITH_EBS_TAG="${DOCKER_IMAGE_NAME}:${EBS_TAG}" From 950d7ad4d968fd11a7a341e209614bea7290913a Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Sat, 9 Jul 2022 11:00:29 +0530 Subject: [PATCH 18/22] Update buildenv.sh --- buildenv.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildenv.sh b/buildenv.sh index 046df39..e026e9f 100755 --- a/buildenv.sh +++ b/buildenv.sh @@ -51,7 +51,7 @@ uploading_buildenvvar() varvalue=$(echo $s| jq -r ".value") echo $varname echo export "$varname"="'$varvalue'" >>"buildenvvar" - echo "env.$varname"="'$varvalue'" >>"buildenvvarg" + echo "env.$varname"="'''$varvalue'''" >>"buildenvvarg" #export "$varname"="$varvalue" #echo export "$varname"="$varvalue" >>"$BASH_ENV" #echo export "$varname"="\"$varvalue\"" >> ~/.circlerc From 6a4cfafe4d2b7aeadd3e48c2f14b21d90c795c06 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Tue, 12 Jul 2022 09:55:19 +0530 Subject: [PATCH 19/22] Update master_deploy.sh --- master_deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master_deploy.sh b/master_deploy.sh index 78480df..d0a9b1a 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -536,7 +536,7 @@ check_service_status() { servicestatus=`aws ecs describe-services --service $AWS_ECS_SERVICE --cluster $AWS_ECS_CLUSTER | $JQ '.services[].events[0].message'` counter=`expr $counter + 1` if [[ $counter -gt $COUNTER_LIMIT ]] ; then - echo "Service does not reach steady state with in 180 seconds. Please check" + echo "Service does not reach steady state with in $(($COUNTER_LIMIT*15+60)) seconds. Please check" exit 1 fi done From 5ac92a6a200cae6189eda1bf77ea9dee7cc05922 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 27 Jul 2022 13:32:37 +0530 Subject: [PATCH 20/22] Formating similar to Master --- buildenv.sh | 6 +- buildproperties.sh | 4 +- master_deploy.sh | 1209 ++++++++++++++++++++++---------------------- 3 files changed, 617 insertions(+), 602 deletions(-) diff --git a/buildenv.sh b/buildenv.sh index e026e9f..1268114 100755 --- a/buildenv.sh +++ b/buildenv.sh @@ -4,11 +4,11 @@ usage() cat << EOF usage: $0 options -This script need to be executed with below option. +This script needs to be executed with below options. OPTIONS: -e environment - -b Security file location GIT|AWS + -b security file location GIT|AWS EOF } @@ -51,7 +51,7 @@ uploading_buildenvvar() varvalue=$(echo $s| jq -r ".value") echo $varname echo export "$varname"="'$varvalue'" >>"buildenvvar" - echo "env.$varname"="'''$varvalue'''" >>"buildenvvarg" + echo "env.$varname"="'''$varvalue'''" >>"buildenvvarg" #export "$varname"="$varvalue" #echo export "$varname"="$varvalue" >>"$BASH_ENV" #echo export "$varname"="\"$varvalue\"" >> ~/.circlerc diff --git a/buildproperties.sh b/buildproperties.sh index 183d15f..2ff2037 100755 --- a/buildproperties.sh +++ b/buildproperties.sh @@ -5,10 +5,10 @@ usage() { cat << EOF usage: $0 options -This script need to be executed with below option. +This script needs to be executed with below options. OPTIONS: -e environment - -b Security file location GIT|AWS + -b security file location GIT|AWS -k key location EOF } diff --git a/master_deploy.sh b/master_deploy.sh index d0a9b1a..9122b57 100755 --- a/master_deploy.sh +++ b/master_deploy.sh @@ -1,6 +1,5 @@ #!/bin/bash - #Variable Declaration JQ="jq --raw-output --exit-status" DEPLOYMENT_TYPE="" @@ -10,7 +9,8 @@ SECRET_FILE_NAME="./buildsecvar.conf" SHARED_PROPERTY_FILENAME="" CIRCLE_BUILD_NUM=$BUILD_NUMBER -#Common Varibles +# Common variables + #echo $AWS_ACCESS_KEY_ID # AWS_ACCESS_KEY_ID="" # AWS_SECRET_ACCESS_KEY="" @@ -25,7 +25,8 @@ if [ -z "$COUNTER_LIMIT" ]; then COUNTER_LIMIT=12 fi -#Varibles specific to ECS +# Variables specific to ECS + #AWS_REPOSITORY="" #AWS_ECS_CLUSTER="" #AWS_ECS_SERVICE="" @@ -47,7 +48,8 @@ APP_IMAGE_NAME="" DEPLOYCATEGORY="" ECSCLI_ENVFILE="api.env" -#variable specific to EBS +# Variables specific to EBS + DOCKERRUN="Dockerrun.aws.json" #EBS_EB_EXTENSTION_LOCATION="" IMG_WITH_EBS_TAG="" @@ -71,12 +73,12 @@ ebstemplate="" #AWS_S3_SOURCE_SYNC_PATH="" CFCACHE="true" -#variable for Lambda +# Variables for Lambda #AWS_LAMBDA_DEPLOY_TYPE="" #AWS_LAMBDA_STAGE="" -#FUNCTIONS -#usage Function - provides information like how to execute the script +# FUNCTIONS +# usage Function - provides information about how to execute the script usage() { cat << EOF @@ -88,21 +90,23 @@ OPTIONS: -h Show this message -d Deployment Type [ECS|EBS|CFRONT] -e Environment [DEV|QA|PROD] - -t ECS Tag Name [mandatatory if ECS ] - -v EBS version [mandatatory if EBS deployment] + -t ECS Tag Name [mandatory if ECS ] + -v EBS version [mandatory if EBS deployment] + -i ECS Image name -c cache option true [optional : value = true| false]i -s Security file location GIT|AWS -p ECS template type - -g Enter common property file which has uploaded in shared-properties folder + -g Common property file which is uploaded to shared-properties folder EOF } -#log Function - Used to provide information of execution information with date and time + +# log Function - Used to provide information of execution information with date and time log() { echo "`date +'%D %T'` : $1" } -#track_error function validates whether the application execute without any error +# track_error function - validates whether the application execute without any error track_error() { if [ $1 != "0" ]; then @@ -110,12 +114,9 @@ track_error() log "completed execution IN ERROR at `date`" exit $1 fi - } - -#Function for aws login - +# Function for AWS login configure_aws_cli() { aws --version aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID @@ -124,19 +125,20 @@ configure_aws_cli() { aws configure set default.output json log "Configured AWS CLI." } -#Function for private dcoker login + +# Function for private dcoker login configure_docker_private_login() { aws s3 cp "s3://appirio-platform-$ENV_CONFIG/services/common/dockercfg" ~/.dockercfg } -#ECS Deployment Functions - +# ECS Deployment Functions ECS_push_ecr_image() { + echo "\n\n" if [ -z "$APP_IMAGE_NAME" ]; then - log "Image has followed standard format" + log "ECS image follows the standard format" else - log "Image does not follow stanard format. Modifying the image and updating the ECS_TAG" + log "ECS Image does not follow the standard format. Modifying the image and updating the ECS_TAG" docker tag $APP_IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:tc-jb-$CIRCLE_BUILD_NUM ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi @@ -145,15 +147,15 @@ ECS_push_ecr_image() { CHECK_ECR_EXIST=$(aws ecr describe-repositories --repository-names ${AWS_REPOSITORY} 2>&1) if [ $? -ne 0 ]; then if echo ${CHECK_ECR_EXIST} | grep -q RepositoryNotFoundException; then - echo "repo does not exist and creating repo" + echo "ECR repo does not exist -- creating repo" aws ecr create-repository --repository-name $AWS_REPOSITORY track_error $? "ECS ECR repo creation" - log "Repo created successfully." + log "ECR repo created successfully." else echo ${CHECK_ECR_EXIST} fi else - echo "$AWS_REPOSITORY repository already exist" + echo "$AWS_REPOSITORY ECR repository already exists" fi log "Pushing Docker Image..." @@ -162,17 +164,17 @@ ECS_push_ecr_image() { # aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$ECS_TAG track_error $? "ECS ECR image push" - log "Docker Image published." + log "Docker Image published\n\n" } -#=============== + ECSCLI_push_ecr_image() { ECS_REPONAME=$1 IMAGE_NAME=$2 if [ -z "$IMAGE_NAME" ]; then - log "Image has followed standard format" + log "ECS image follows the standard format" else - log "Image does not follow stanard format. Modifying the image and updating the ECS_TAG" + log "ECS image does not follow the standard format. Modifying the image and updating the ECS_TAG" docker tag $IMAGE_NAME:$ECS_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:tc-jb-$CIRCLE_BUILD_NUM ECS_TAG=tc-jb-$CIRCLE_BUILD_NUM fi @@ -182,9 +184,9 @@ ECSCLI_push_ecr_image() { # aws ecr get-login-password --region $AWS_REGION | docker -D login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECS_REPONAME:$ECS_TAG track_error $? "ECS ECR image push" - log "Docker Image published." + log "Docker ECR Image published\n\n" } -#================ + ECSCLI_update_env() { Buffer_seclist=$(echo $SEC_LIST | sed 's/,/ /g') @@ -193,7 +195,7 @@ ECSCLI_update_env() local o=$IFS IFS=$(echo -en "\n\b") envvars=$( cat $listname.json | jq -r ' . ' | jq ' . | to_entries[] | { "name": .key , "value": .value } ' | jq -s . ) - log "vars are fetched" + log "ECS env vars are fetched" for s in $(echo $envvars | jq -c ".[]" ); do #echo $envvars @@ -205,7 +207,7 @@ ECSCLI_update_env() IFS=$o done } -#================ + portmapping() { hostport=$1 containerport=$2 @@ -213,48 +215,42 @@ containerprotocol=$3 template=$(echo $template | jq --argjson hostPort $hostport --argjson containerPort $containerport --arg protocol $containerprotocol --arg portcount $portcount '.containerDefinitions[0].portMappings[$portcount |tonumber] |= .+ { hostPort: $hostPort, containerPort: $containerPort, protocol: $protocol }') let portcount=portcount+1 - } -#============================= - envaddition() { - #echo "envcount before " $envcount - -envname=$1 -envvalue=$2 -#echo "env value before" $envvalue -set -f -template=$(echo $template | jq --arg name "$envname" --arg value "$envvalue" --arg envcount $envcount '.containerDefinitions[0].environment[$envcount |tonumber] |= .+ { name: $name, value: $value }') -set +f -let envcount=envcount+1 -#echo "envcount after ---------" $envcount -#echo "envvalue after ---------" $envvalue + #echo "envcount before " $envcount + envname=$1 + envvalue=$2 + #echo "env value before" $envvalue + set -f + template=$(echo $template | jq --arg name "$envname" --arg value "$envvalue" --arg envcount $envcount '.containerDefinitions[0].environment[$envcount |tonumber] |= .+ { name: $name, value: $value }') + set +f + let envcount=envcount+1 + #echo "envcount after ---------" $envcount + #echo "envvalue after ---------" $envvalue } -#========================= + psenvaddition() { - #echo "psenvcount before " $psenvcount - -envname=$1 -envvalue=$2 -#echo "env value before" $envvalue -set -f -template=$(echo $template | jq --arg name "$envname" --arg value "$envvalue" --arg psenvcount $psenvcount '.containerDefinitions[0].secrets[$psenvcount |tonumber] |= .+ { name: $name, valueFrom: $value }') -set +f -let psenvcount=psenvcount+1 -#echo "psenvcount after ---------" $psenvcount -#echo "envvalue after ---------" $envvalue + #echo "psenvcount before " $psenvcount + envname=$1 + envvalue=$2 + #echo "env value before" $envvalue + set -f + template=$(echo $template | jq --arg name "$envname" --arg value "$envvalue" --arg psenvcount $psenvcount '.containerDefinitions[0].secrets[$psenvcount |tonumber] |= .+ { name: $name, valueFrom: $value }') + set +f + let psenvcount=psenvcount+1 + #echo "psenvcount after ---------" $psenvcount + #echo "envvalue after ---------" $envvalue } -#========================= logconfiguration() { -template=$(echo $template | jq --arg logDriver $CONTAINER_LOG_DRIVER '.containerDefinitions[0].logConfiguration.logDriver=$logDriver') -template=$(echo $template | jq --arg awslogsgroup "/aws/ecs/$AWS_ECS_CLUSTER" '.containerDefinitions[0].logConfiguration.options."awslogs-group"=$awslogsgroup') -template=$(echo $template | jq --arg awslogsregion $AWS_REGION '.containerDefinitions[0].logConfiguration.options."awslogs-region"=$awslogsregion') -template=$(echo $template | jq --arg awslogsstreamprefix $ENV '.containerDefinitions[0].logConfiguration.options."awslogs-stream-prefix"=$awslogsstreamprefix') -template=$(echo $template | jq 'del(.containerDefinitions[0].logConfiguration.options.KeyName)') + template=$(echo $template | jq --arg logDriver $CONTAINER_LOG_DRIVER '.containerDefinitions[0].logConfiguration.logDriver=$logDriver') + template=$(echo $template | jq --arg awslogsgroup "/aws/ecs/$AWS_ECS_CLUSTER" '.containerDefinitions[0].logConfiguration.options."awslogs-group"=$awslogsgroup') + template=$(echo $template | jq --arg awslogsregion $AWS_REGION '.containerDefinitions[0].logConfiguration.options."awslogs-region"=$awslogsregion') + template=$(echo $template | jq --arg awslogsstreamprefix $ENV '.containerDefinitions[0].logConfiguration.options."awslogs-stream-prefix"=$awslogsstreamprefix') + template=$(echo $template | jq 'del(.containerDefinitions[0].logConfiguration.options.KeyName)') } -#============================================= + volumeupdate() { volname=$1 sourcepath=$2 @@ -268,246 +264,259 @@ volumeupdate() { let volcount=volcount+1 } -#============================================ + ECS_Container_HealthCheck_integ() { -HealthCheckCmd="$1" + HealthCheckCmd="$1" -template=$(echo $template | jq '.containerDefinitions[0].healthCheck.retries=3') -template=$(echo $template | jq '.containerDefinitions[0].healthCheck.timeout=15') -template=$(echo $template | jq '.containerDefinitions[0].healthCheck.interval=60') -template=$(echo $template | jq '.containerDefinitions[0].healthCheck.startPeriod=120') -template=$(echo $template | jq --arg HealthCheckCmd "$HealthCheckCmd" '.containerDefinitions[0].healthCheck.command=["CMD-SHELL",$HealthCheckCmd]') + template=$(echo $template | jq '.containerDefinitions[0].healthCheck.retries=3') + template=$(echo $template | jq '.containerDefinitions[0].healthCheck.timeout=15') + template=$(echo $template | jq '.containerDefinitions[0].healthCheck.interval=60') + template=$(echo $template | jq '.containerDefinitions[0].healthCheck.startPeriod=120') + template=$(echo $template | jq --arg HealthCheckCmd "$HealthCheckCmd" '.containerDefinitions[0].healthCheck.command=["CMD-SHELL",$HealthCheckCmd]') } -#============================================ ECS_Container_cmd_integ() { -ContainerCmd="$1" -template=$(echo $template | jq --arg ContainerCmd "$ContainerCmd" '.containerDefinitions[0].command=[$ContainerCmd]') + ContainerCmd="$1" + template=$(echo $template | jq --arg ContainerCmd "$ContainerCmd" '.containerDefinitions[0].command=[$ContainerCmd]') } -#============================================ + ECS_template_create_register() { + #Getting Template skeleton + #template=`aws ecs register-task-definition --generate-cli-skeleton` + template=$(cat $TEMPLATE_SKELETON_FILE) -#Getting Template skeleton -#template=`aws ecs register-task-definition --generate-cli-skeleton` -template=$(cat $TEMPLATE_SKELETON_FILE) + #Updating ECS task def file + template=$(echo $template | jq --arg family $AWS_ECS_TASK_FAMILY '.family=$family') + log "ECS Task Family updated" -#Updating ECS task def file -template=$(echo $template | jq --arg family $AWS_ECS_TASK_FAMILY '.family=$family') -log "Family updated" + #taskrole and excution role has updated + if [ -z $AWS_ECS_TASK_ROLE_ARN ]; + then + log "No ECS Task Role defined" + else + template=$(echo $template | jq --arg taskRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/$AWS_ECS_TASK_ROLE_ARN '.taskRoleArn=$taskRoleArn') + fi -#taskrole and excution role has updated -if [ -z $AWS_ECS_TASK_ROLE_ARN ]; -then - log "No Task Role defined" -else - template=$(echo $template | jq --arg taskRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/$AWS_ECS_TASK_ROLE_ARN '.taskRoleArn=$taskRoleArn') -fi -if [ -z $AWS_ECS_TASK_EXECUTION_ROLE_ARN ]; -then - log "No Task Execution Role defined" -else - template=$(echo $template | jq --arg executionRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/$AWS_ECS_TASK_EXECUTION_ROLE_ARN '.executionRoleArn=$executionRoleArn') -fi -#Container Name update -template=$(echo $template | jq --arg name $AWS_ECS_CONTAINER_NAME '.containerDefinitions[0].name=$name') -log "Container Name updated" - -#Container Image Name update -template=$(echo $template | jq --arg image $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$ECS_TAG '.containerDefinitions[0].image=$image') -log "Image name updated" - -#Container Memory reservation -if [ -z $AWS_ECS_CONTAINER_MEMORY_RESERVATION ]; -then - log "No reseveed memory defined . Going with default value 500 MB" - AWS_ECS_CONTAINER_MEMORY_RESERVATION="1000" - template=$(echo $template | jq --argjson memoryReservation $AWS_ECS_CONTAINER_MEMORY_RESERVATION '.containerDefinitions[0].memoryReservation=$memoryReservation') -else - template=$(echo $template | jq --argjson memoryReservation $AWS_ECS_CONTAINER_MEMORY_RESERVATION '.containerDefinitions[0].memoryReservation=$memoryReservation') -fi -log "Memory reservation updated" - -#Container Memory reservation -if [ -z $AWS_ECS_CONTAINER_CPU ]; -then - echo "No cpu defined . Going with default value 100" - AWS_ECS_CONTAINER_CPU=100 - template=$(echo $template | jq --argjson cpu $AWS_ECS_CONTAINER_CPU '.containerDefinitions[0].cpu=$cpu') -else - template=$(echo $template | jq --argjson cpu $AWS_ECS_CONTAINER_CPU '.containerDefinitions[0].cpu=$cpu') -fi + if [ -z $AWS_ECS_TASK_EXECUTION_ROLE_ARN ]; + then + log "No ECS Task Execution Role defined" + else + template=$(echo $template | jq --arg executionRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/$AWS_ECS_TASK_EXECUTION_ROLE_ARN '.executionRoleArn=$executionRoleArn') + fi + + #Container Name update + template=$(echo $template | jq --arg name $AWS_ECS_CONTAINER_NAME '.containerDefinitions[0].name=$name') + log "ECS Container Name updated" + + #Container Image Name update + template=$(echo $template | jq --arg image $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$AWS_REPOSITORY:$ECS_TAG '.containerDefinitions[0].image=$image') + log "ECR Image name updated" + + #Container Memory reservation + if [ -z $AWS_ECS_CONTAINER_MEMORY_RESERVATION ]; + then + log "No ECS reserved memory defined. Going with default value 1024 MB" + AWS_ECS_CONTAINER_MEMORY_RESERVATION="1000" + template=$(echo $template | jq --argjson memoryReservation $AWS_ECS_CONTAINER_MEMORY_RESERVATION '.containerDefinitions[0].memoryReservation=$memoryReservation') + else + template=$(echo $template | jq --argjson memoryReservation $AWS_ECS_CONTAINER_MEMORY_RESERVATION '.containerDefinitions[0].memoryReservation=$memoryReservation') + fi + log "ECS memory reservation updated." -#Port Mapping -Buffer_portmap=$(echo $AWS_ECS_PORTS | sed 's/,/ /g') -for b1 in $Buffer_portmap; -do - hostport=$( echo $b1 | cut -d ':' -f 1 ) - containerport=$( echo $b1 | cut -d ':' -f 2 ) - protocolmapped=$( echo $b1 | cut -d ':' -f 3 ) - portmapping $hostport $containerport $protocolmapped -done -log "port mapping updated" -# Environment addition -Buffer_seclist=$(echo $SEC_LIST | sed 's/,/ /g') -for listname in $Buffer_seclist; -do - local o=$IFS - IFS=$(echo -en "\n\b") - envvars=$( cat $listname.json | jq -r ' . ' | jq ' . | to_entries[] | { "name": .key , "value": .value } ' | jq -s . ) - log "vars are fetched" - - for s in $(echo $envvars | jq -c ".[]" ); do - #echo $envvars - varname=$(echo $s| jq -r ".name") - varvalue=$(echo $s| jq -r ".value") - envaddition "$varname" "$varvalue" + #Container CPU reservation + if [ -z $AWS_ECS_CONTAINER_CPU ]; + then + echo "No ECS container CPU defined. Going with default value 100" + AWS_ECS_CONTAINER_CPU=100 + template=$(echo $template | jq --argjson cpu $AWS_ECS_CONTAINER_CPU '.containerDefinitions[0].cpu=$cpu') + else + template=$(echo $template | jq --argjson cpu $AWS_ECS_CONTAINER_CPU '.containerDefinitions[0].cpu=$cpu') + fi + log "ECS container CPU updated." + + #Port Mapping + Buffer_portmap=$(echo $AWS_ECS_PORTS | sed 's/,/ /g') + for b1 in $Buffer_portmap; + do + hostport=$( echo $b1 | cut -d ':' -f 1 ) + log "ECS host port: $hostport" + containerport=$( echo $b1 | cut -d ':' -f 2 ) + log "ECS container port: $containerport" + protocolmapped=$( echo $b1 | cut -d ':' -f 3 ) + log "ECS mapped protocol: $protocolmapped" + portmapping $hostport $containerport $protocolmapped done - IFS=$o -done -if [ -z $SECPS_LIST ]; -then - log "No ps file provided" -else - Buffer_seclist=$(echo $SECPS_LIST | sed 's/,/ /g') + log "ECS container port mapping updated" + + # Environment addition + Buffer_seclist=$(echo $SEC_LIST | sed 's/,/ /g') for listname in $Buffer_seclist; do local o=$IFS IFS=$(echo -en "\n\b") - varpath=$( cat $listname.json | jq -r ' .ParmeterPathList[] ' ) - #log "vars are fetched" - for k in $varpath; - do - echo $k - aws ssm get-parameters-by-path --path $k --query "Parameters[*].{Name:Name}" > paramnames.json - ###paramnames=$(cat paramnames.json | jq -r .[].Name | rev | cut -d / -f 1 | rev) - for s in $(cat paramnames.json | jq -r .[].Name ) - do - varname=$(echo $s | rev | cut -d / -f 1 | rev) - varvalue="arn:aws:ssm:$AWS_REGION:$AWS_ACCOUNT_ID:parameter$s" - psenvaddition "$varname" "$varvalue" - #echo "$varname" "$varvalue" - done + envvars=$( cat $listname.json | jq -r ' . ' | jq ' . | to_entries[] | { "name": .key , "value": .value } ' | jq -s . ) + log "vars are fetched" + + for s in $(echo $envvars | jq -c ".[]" ); do + #echo $envvars + varname=$(echo $s| jq -r ".name") + varvalue=$(echo $s| jq -r ".value") + envaddition "$varname" "$varvalue" done IFS=$o done -fi -log "environment has updated" -# Log Configuration -logconfiguration -log "log configuration has updated" - -#volume update -if [ -z $AWS_ECS_VOLUMES ]; -then - echo "No volume mapping defined" -else - Buffer_volumes=$(echo $AWS_ECS_VOLUMES | sed 's/,/ /g') - for v1 in $Buffer_volumes; - do - volname=$( echo $v1 | cut -d ':' -f 1 ) - sourcepath=$( echo $v1 | cut -d ':' -f 2 ) - mountpath=$( echo $v1 | cut -d ':' -f 3 ) - #mntpermission=$( echo $v1 | cut -d ':' -f 4 ) - #volumeupdate $volname $sourcepath $mountpath $mntpermission - volumeupdate $volname $sourcepath $mountpath - done - log "volumes are mapped" -fi -#Conteainer health check update -if [ -z "$AWS_ECS_CONTAINER_HEALTH_CMD" ]; -then - echo "No container Health check command defined" -else - ECS_Container_HealthCheck_integ "$AWS_ECS_CONTAINER_HEALTH_CMD" -fi -#Container command integration -if [ -z "$AWS_ECS_CONTAINER_CMD" ]; -then - echo "No container command not defined" -else - ECS_Container_cmd_integ "$AWS_ECS_CONTAINER_CMD" -fi -#updating data based on ECS deploy type -if [ "$ECS_TEMPLATE_TYPE" == "FARGATE" ] -then - #updating Network - ECS_NETWORKTYPE="awsvpc" - template=$(echo $template | jq --arg executionRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/ecsTaskExecutionRole '.executionRoleArn=$executionRoleArn') - template=$(echo $template | jq --arg networkMode $ECS_NETWORKTYPE '.networkMode=$networkMode') - # Updating the compatibiltiy - #template=$(echo $template | jq --arg requiresCompatibilities EC2 '.requiresCompatibilities[0] |= .+ $requiresCompatibilities') - template=$(echo $template | jq --arg requiresCompatibilities FARGATE '.requiresCompatibilities[.requiresCompatibilities| length] |= .+ $requiresCompatibilities') - # Updating Fargate CPU - if [ -z $AWS_ECS_FARGATE_CPU ]; + + if [ -z $SECPS_LIST ]; then - echo "No FARGATE cpu defined . Going with default value 1024" - AWS_ECS_FARGATE_CPU="1024" - template=$(echo $template | jq --arg cpu $AWS_ECS_FARGATE_CPU '.cpu=$cpu') + log "No ps file provided" else - template=$(echo $template | jq --arg cpu $AWS_ECS_FARGATE_CPU '.cpu=$cpu') + Buffer_seclist=$(echo $SECPS_LIST | sed 's/,/ /g') + for listname in $Buffer_seclist; + do + local o=$IFS + IFS=$(echo -en "\n\b") + varpath=$( cat $listname.json | jq -r ' .ParmeterPathList[] ' ) + #log "vars are fetched" + for k in $varpath; + do + echo $k + aws ssm get-parameters-by-path --path $k --query "Parameters[*].{Name:Name}" > paramnames.json + ###paramnames=$(cat paramnames.json | jq -r .[].Name | rev | cut -d / -f 1 | rev) + for s in $(cat paramnames.json | jq -r .[].Name ) + do + varname=$(echo $s | rev | cut -d / -f 1 | rev) + varvalue="arn:aws:ssm:$AWS_REGION:$AWS_ACCOUNT_ID:parameter$s" + psenvaddition "$varname" "$varvalue" + #echo "$varname" "$varvalue" + done + done + IFS=$o + done fi - # Updating Fargate Memory - if [ -z $AWS_ECS_FARGATE_MEMORY ]; + log "Environment has updated" + + # Log Configuration + logconfiguration + log "Log configuration has updated" + + #volume update + if [ -z $AWS_ECS_VOLUMES ]; then - echo "No FARGATE memory defined . Going with default value 2048" - AWS_ECS_FARGATE_MEMORY="2048" - template=$(echo $template | jq --arg memory $AWS_ECS_FARGATE_MEMORY '.memory=$memory') + echo "No ECS volume mapping defined" else - template=$(echo $template | jq --arg memory $AWS_ECS_FARGATE_MEMORY '.memory=$memory') + Buffer_volumes=$(echo $AWS_ECS_VOLUMES | sed 's/,/ /g') + for v1 in $Buffer_volumes; + do + volname=$( echo $v1 | cut -d ':' -f 1 ) + sourcepath=$( echo $v1 | cut -d ':' -f 2 ) + mountpath=$( echo $v1 | cut -d ':' -f 3 ) + #mntpermission=$( echo $v1 | cut -d ':' -f 4 ) + #volumeupdate $volname $sourcepath $mountpath $mntpermission + volumeupdate $volname $sourcepath $mountpath + done + log "ECS volumes are mapped" + fi + + #Container health check update + if [ -z "$AWS_ECS_CONTAINER_HEALTH_CMD" ]; + then + echo "No ECS container health check command defined" + else + ECS_Container_HealthCheck_integ "$AWS_ECS_CONTAINER_HEALTH_CMD" fi -else - #CONTAINER_CPU - ECS_NETWORKTYPE="bridge" - template=$(echo $template | jq --arg networkMode $ECS_NETWORKTYPE '.networkMode=$networkMode') - - # Updating the compatibiltiy - template=$(echo $template | jq --arg requiresCompatibilities EC2 '.requiresCompatibilities[0] = $requiresCompatibilities') -fi -if [ -z "$template" ]; - then - track_error 1 "Task Def has not set by template variable" - exit 1 - else - # echo "template values ------:" $template - if REVISION=$(aws ecs register-task-definition --cli-input-json "$template" | $JQ '.taskDefinition.taskDefinitionArn'); then - log "Revision: $REVISION" + + #Container command integration + if [ -z "$AWS_ECS_CONTAINER_CMD" ]; + then + echo "No ECS container start-up command defined" + else + ECS_Container_cmd_integ "$AWS_ECS_CONTAINER_CMD" + fi + + #updating data based on ECS deploy type + if [ "$ECS_TEMPLATE_TYPE" == "FARGATE" ] + then + #updating Network + ECS_NETWORKTYPE="awsvpc" + template=$(echo $template | jq --arg executionRoleArn arn:aws:iam::$AWS_ACCOUNT_ID:role/ecsTaskExecutionRole '.executionRoleArn=$executionRoleArn') + template=$(echo $template | jq --arg networkMode $ECS_NETWORKTYPE '.networkMode=$networkMode') + # Updating the compatibiltiy + #template=$(echo $template | jq --arg requiresCompatibilities EC2 '.requiresCompatibilities[0] |= .+ $requiresCompatibilities') + template=$(echo $template | jq --arg requiresCompatibilities FARGATE '.requiresCompatibilities[.requiresCompatibilities| length] |= .+ $requiresCompatibilities') + # Updating Fargate CPU + if [ -z $AWS_ECS_FARGATE_CPU ]; + then + echo "No FARGATE CPU defined. Going with default value 1024" + AWS_ECS_FARGATE_CPU="1024" + template=$(echo $template | jq --arg cpu $AWS_ECS_FARGATE_CPU '.cpu=$cpu') else - track_error 1 "Task Def registration" - log "Failed to register task definition" - return 1 + template=$(echo $template | jq --arg cpu $AWS_ECS_FARGATE_CPU '.cpu=$cpu') fi -fi + + # Updating Fargate Memory + if [ -z $AWS_ECS_FARGATE_MEMORY ]; + then + echo "No FARGATE memory defined. Going with default value 2048" + AWS_ECS_FARGATE_MEMORY="2048" + template=$(echo $template | jq --arg memory $AWS_ECS_FARGATE_MEMORY '.memory=$memory') + else + template=$(echo $template | jq --arg memory $AWS_ECS_FARGATE_MEMORY '.memory=$memory') + fi + else + #CONTAINER_CPU + ECS_NETWORKTYPE="bridge" + template=$(echo $template | jq --arg networkMode $ECS_NETWORKTYPE '.networkMode=$networkMode') + + # Updating the compatibiltiy + template=$(echo $template | jq --arg requiresCompatibilities EC2 '.requiresCompatibilities[0] = $requiresCompatibilities') + fi + + if [ -z "$template" ]; + then + track_error 1 "Task Definition was not set by template variable" + exit 1 + else + # echo "template values ------:" $template + if REVISION=$(aws ecs register-task-definition --cli-input-json "$template" | $JQ '.taskDefinition.taskDefinitionArn'); then + log "Revision: $REVISION" + else + track_error 1 "Task Def registration" + log "Failed to register task definition" + return 1 + fi + fi } ECS_deploy_cluster() { - AWS_ECS_SERVICE=$1 - #checking cluster exist + + #checking if cluster exists CHECK_CLUSTER_EXIST="" CHECK_CLUSTER_EXIST=$(aws ecs describe-clusters --cluster $AWS_ECS_CLUSTER | jq --raw-output 'select(.clusters[].clusterName != null ) | .clusters[].clusterName') if [ -z $CHECK_CLUSTER_EXIST ]; then - echo "$AWS_ECS_CLUSTER cluster does not exist. Kindly check with admin team" + echo "$AWS_ECS_CLUSTER cluster does not exist. Kindly check with DevOps team" exit 1 else - echo "$AWS_ECS_CLUSTER Cluster exist" + echo "$AWS_ECS_CLUSTER cluster exists" fi - #checking service exist + + #checking if service exists CHECK_SERVICE_EXIST="" CHECK_SERVICE_EXIST=$(aws ecs describe-services --service $AWS_ECS_SERVICE --cluster $AWS_ECS_CLUSTER | jq --raw-output 'select(.services[].status != null ) | .services[].status') if [ -z $CHECK_SERVICE_EXIST ]; then if [ "$ECS_TEMPLATE_TYPE" == "FARGATE" ]; then - echo "Fargate Service does not exist. Kindly check with admin team" + echo "Fargate Service does not exist. Kindly check with DevOps team" exit 1 else - echo "service does not exist. Creating service" + echo "Service does not exist. Creating service" aws ecs create-service --cluster $AWS_ECS_CLUSTER --service-name $AWS_ECS_SERVICE --task-definition $REVISION --desired-count 1 - echo "Kindly work with admin team for routing" + echo "Kindly work with DevOps team for routing" fi else - echo "service exist.Application updates the service" + echo "ECS Service exists. Updating the service..." update_result=$(aws ecs update-service --cluster $AWS_ECS_CLUSTER --service $AWS_ECS_SERVICE --task-definition $REVISION ) result=$(echo $update_result | $JQ '.service.taskDefinition' ) log $result @@ -517,30 +526,31 @@ ECS_deploy_cluster() { return 1 fi - echo "Update service intialised successfully for deployment" + echo "Updated service intialised successfully for deployment\n\n" fi return 0 } check_service_status() { - AWS_ECS_SERVICE=$1 - counter=0 - sleep 60 + AWS_ECS_SERVICE=$1 + + counter=0 + sleep 60 + servicestatus=`aws ecs describe-services --service $AWS_ECS_SERVICE --cluster $AWS_ECS_CLUSTER | $JQ '.services[].events[0].message'` + while [[ $servicestatus != *"steady state"* ]] + do + echo "Current event message : $servicestatus" + echo "Waiting for 15 sec to check the service status..." + sleep 15 servicestatus=`aws ecs describe-services --service $AWS_ECS_SERVICE --cluster $AWS_ECS_CLUSTER | $JQ '.services[].events[0].message'` - while [[ $servicestatus != *"steady state"* ]] - do - echo "Current event message : $servicestatus" - echo "Waiting for 15 sec to check the service status...." - sleep 15 - servicestatus=`aws ecs describe-services --service $AWS_ECS_SERVICE --cluster $AWS_ECS_CLUSTER | $JQ '.services[].events[0].message'` - counter=`expr $counter + 1` - if [[ $counter -gt $COUNTER_LIMIT ]] ; then - echo "Service does not reach steady state with in $(($COUNTER_LIMIT*15+60)) seconds. Please check" - exit 1 - fi - done - echo "$servicestatus" + counter=`expr $counter + 1` + if [[ $counter -gt $COUNTER_LIMIT ]] ; then + echo "Service did not reach steady state with in $(($COUNTER_LIMIT*15+60)) seconds. Please check" + exit 1 + fi + done + echo "$servicestatus" } validate_update_loggroup() @@ -549,43 +559,39 @@ validate_update_loggroup() #echo $log_group_fetch if [ -z $log_group_fetch ]; then - echo "log group does not exist" + echo "\nLog group does not exist\n" aws logs create-log-group --log-group-name /aws/ecs/$AWS_ECS_CLUSTER track_error $? "aws log group" else - echo "log group exist" + echo "\nLog group exists\n" fi } -# EBS integration +# EBS integration ebsportmapping() { -echo "port map called" -containerport=$1 -hostport=$2 - -if [ -z $hostport ] -then -ebstemplate=$(echo $ebstemplate | jq --arg containerPort $containerport --arg ebsportcount $ebsportcount '.Ports[$ebsportcount |tonumber] |= .+ { ContainerPort: $containerPort }') -else -ebstemplate=$(echo $ebstemplate | jq --arg hostPort $hostport --arg containerPort $containerport --arg ebsportcount $ebsportcount '.Ports[$ebsportcount |tonumber] |= .+ { HostPort: $hostPort, ContainerPort: $containerPort }') -fi + echo "Port map called\n" + containerport=$1 + hostport=$2 -let ebsportcount=ebsportcount+1 + if [ -z $hostport ] + then + ebstemplate=$(echo $ebstemplate | jq --arg containerPort $containerport --arg ebsportcount $ebsportcount '.Ports[$ebsportcount |tonumber] |= .+ { ContainerPort: $containerPort }') + else + ebstemplate=$(echo $ebstemplate | jq --arg hostPort $hostport --arg containerPort $containerport --arg ebsportcount $ebsportcount '.Ports[$ebsportcount |tonumber] |= .+ { HostPort: $hostPort, ContainerPort: $containerPort }') + fi + let ebsportcount=ebsportcount+1 } - EBS_push_docker_image() { - -echo "pushing docker image: ${IMAGE}" -IMAGE="${DOCKER_REGISTRY_NAME}/${IMG_WITH_EBS_TAG}" -docker push $IMAGE -track_error $? "docker push failed." - + echo "Pushing Docker image: ${IMAGE}" + IMAGE="${DOCKER_REGISTRY_NAME}/${IMG_WITH_EBS_TAG}" + docker push $IMAGE + track_error $? "Docker push failed." } creating_updating_ebs_docker_json() { - echo "updating auth bucket name" + echo "Updating S3 auth bucket name" sed -i.bak -e "s/@AWSS3AUTHBUCKET@/appirio-platform-$ENV_CONFIG/g" $EBS_TEMPLATE_SKELETON_FILE rm ${EBS_TEMPLATE_SKELETON_FILE}.bak @@ -593,7 +599,7 @@ creating_updating_ebs_docker_json() { ebstemplate=$(cat $EBS_TEMPLATE_SKELETON_FILE) if [ -z $AWS_EBS_PORTS ]; then - echo "No container port is defined. configuring default 8080 port" + echo "No container port is defined. Configuring default 8080 port" ebsportmapping 8080 else Buffer_portmap=$(echo $AWS_EBS_PORTS | sed 's/,/ /g') @@ -612,33 +618,31 @@ creating_updating_ebs_docker_json() { if [ -z "$EBS_EB_EXTENSTION_LOCATION" ]; then cat $EBS_TEMPLATE_SKELETON_FILE | sed -e "s/@IMAGE@/${IMG_WITH_EBS_TAG}/g" > $DOCKERRUN - echo "pushing $DOCKERRUN as ${IMG_WITH_EBS_TAG} to S3: ${AWS_S3_BUCKET}/${AWS_S3_KEY}" + echo "Pushing $DOCKERRUN as ${IMG_WITH_EBS_TAG} to S3: ${AWS_S3_BUCKET}/${AWS_S3_KEY}" aws s3api put-object --bucket "${AWS_S3_BUCKET}" --key "${AWS_S3_KEY}" --body $DOCKERRUN track_error $? "aws s3api put-object failed." else cat $EBS_TEMPLATE_SKELETON_FILE | sed -e "s/@IMAGE@/${IMG_WITH_EBS_TAG}/g" > $DOCKERRUN cp -rvf $EBS_EB_EXTENSTION_LOCATION/.ebextensions . jar cMf ${IMG_WITH_EBS_TAG}.zip $DOCKERRUN .ebextensions - echo "pushing ${IMG_WITH_EBS_TAG}.zip to S3: ${AWS_S3_BUCKET}/${AWS_S3_KEY}" + echo "Pushing ${IMG_WITH_EBS_TAG}.zip to S3: ${AWS_S3_BUCKET}/${AWS_S3_KEY}" aws s3api put-object --bucket "${AWS_S3_BUCKET}" --key "${AWS_S3_KEY}" --body ${IMG_WITH_EBS_TAG}.zip track_error $? "aws s3api put-object failed." fi } creating_updating_EBS_appversion() { - - echo "creating new application version $AWS_EBS_APPVER in ${AWS_EBS_APPLICATION_NAME} from s3:${AWS_S3_BUCKET}/${AWS_S3_KEY}" + echo "Creating new application version $AWS_EBS_APPVER in ${AWS_EBS_APPLICATION_NAME} from s3:${AWS_S3_BUCKET}/${AWS_S3_KEY}" aws elasticbeanstalk create-application-version --application-name $AWS_EBS_APPLICATION_NAME --version-label $AWS_EBS_APPVER --source-bundle S3Bucket="$AWS_S3_BUCKET",S3Key="$AWS_S3_KEY" track_error $? "aws elasticbeanstalk create-application-version failed." - echo "updating elastic beanstalk environment ${AWS_EB_ENV} with the version ${AWS_EBS_APPVER}." + echo "Updating elastic beanstalk environment ${AWS_EB_ENV} with the version ${AWS_EBS_APPVER}." # assumes beanstalk app for this service has already been created and configured aws elasticbeanstalk update-environment --environment-name $AWS_EBS_ENV_NAME --version-label $AWS_EBS_APPVER track_error $? "aws elasticbeanstalk update-environment failed." - } -#Cloud Front DEPLOYMENT +#CloudFront deployment deploy_s3bucket() { echo -e "application/font-woff\t\t\t\twoff2" >> /etc/mime.types @@ -685,17 +689,19 @@ deploy_s3bucket() { echo $getformatdetails S3_OPTIONS="--content-encoding gzip" fi + echo aws s3 cp --dryrun $syncfilepath s3://${AWS_S3_BUCKET}${uploadpath} ${S3_CACHE_OPTIONS} ${S3_OPTIONS} eval "aws s3 cp --dryrun $syncfilepath s3://${AWS_S3_BUCKET}${uploadpath} ${S3_CACHE_OPTIONS} ${S3_OPTIONS}" result=`eval "aws s3 cp $syncfilepath s3://${AWS_S3_BUCKET}${uploadpath} ${S3_CACHE_OPTIONS} ${S3_OPTIONS}"` if [ $? -eq 0 ]; then - echo "file Deployed!" + echo "File Deployed!" else echo "Deployment Failed - $result" exit 1 fi done; } + download_envfile() { Buffer_seclist=$(echo $SEC_LIST | sed 's/,/ /g' ) @@ -710,6 +716,7 @@ download_envfile() #openssl enc -aes-256-cbc -d -md MD5 -in $listname.json.enc -out $listname.json -k $SECPASSWD done } + download_psfile() { Buffer_seclist=$(echo $SECPS_LIST | sed 's/,/ /g' ) @@ -721,6 +728,7 @@ download_psfile() track_error $? "$listname.json" done } + decrypt_fileenc() { Buffer_seclist=$(echo $SEC_LIST | sed 's/,/ /g' ) @@ -753,21 +761,23 @@ uploading_envvar() IFS=$o done } + configure_Lambda_template() { - if [ "$AWS_LAMBDA_DEPLOY_TYPE" == "SLS" ] then mkdir -p /home/circleci/project/config Buffer_seclist=$(echo $SEC_LIST | sed 's/,/ /g') - #envvars=$( cat $listname.json | jq -c ' .app_var ') + #envvars=$( cat $listname.json | jq -c ' .app_var ') + for listname in $Buffer_seclist; do - o=$IFS - IFS=$(echo -en "\n\b") - envvars=$( cat $listname.json | jq -c ' . ') - echo "$envvars" > /home/circleci/project/config/$AWS_LAMBDA_STAGE.json - sed -i 's/\\n/\\\\n/g' /home/circleci/project/config/$AWS_LAMBDA_STAGE.json + o=$IFS + IFS=$(echo -en "\n\b") + envvars=$( cat $listname.json | jq -c ' . ') + echo "$envvars" > /home/circleci/project/config/$AWS_LAMBDA_STAGE.json + sed -i 's/\\n/\\\\n/g' /home/circleci/project/config/$AWS_LAMBDA_STAGE.json + #yq r $listname.json >$listname.yml #a=serverless.yml #b="$listname.json" @@ -776,12 +786,11 @@ configure_Lambda_template() #python -c "import sys , json , ruamel.yaml , cStringIO; jsondata = cStringIO.StringIO(); yaml = ruamel.yaml.YAML(); yaml.explicit_start = True; data = json.load(open('$b','r'), object_pairs_hook=ruamel.yaml.comments.CommentedMap) ; ruamel.yaml.scalarstring.walk_tree(data) ; yaml.dump(data, jsondata); cfg = yaml.load(open('$a','r')); cfg_env = yaml.load(jsondata.getvalue()); cfg['Resources']['tcdevhandler']['Properties']['Environment']['Variables']=cfg_env['app_var'] ; yaml.dump(cfg, open('appeneded.yaml', 'w'))" #python -c "import sys , json , ruamel.yaml , cStringIO; jsondata = cStringIO.StringIO(); yaml = ruamel.yaml.YAML(); yaml.explicit_start = True; data = json.load(open('$b','r'), object_pairs_hook=ruamel.yaml.comments.CommentedMap) ; ruamel.yaml.scalarstring.walk_tree(data) ; yaml.dump(data, jsondata); cfg = yaml.load(open('$a','r')); cfg_env = yaml.load(jsondata.getvalue()); cfg['provider']['environment']=cfg_env['app_var'] ; yaml.dump(cfg, open('appeneded.yaml', 'w'))" #python -c "import sys , json , ruamel.yaml ; from io import BytesIO as StringIO ; jsondata = StringIO(); yaml = ruamel.yaml.YAML(); yaml.explicit_start = True; data = json.load(open('$b','r'), object_pairs_hook=ruamel.yaml.comments.CommentedMap) ; ruamel.yaml.scalarstring.walk_tree(data) ; yaml.dump(data, jsondata); cfg = yaml.load(open('$a','r')); cfg_env= yaml.load(jsondata.getvalue()); cfg['provider']['environment']=cfg_env['app_var'] ; yaml.dump(cfg, open('appeneded.yaml','w'))" - #python -c "import sys , json , ruamel.yaml ; from io import BytesIO as StringIO ; jsondata = StringIO(); yaml = ruamel.yaml.YAML(); data = json.load(open('$b','r')) ; yaml.dump(data, jsondata); cfg = yaml.load(open('$a','r')); cfg_env= yaml.load(jsondata.getvalue()); cfg['provider']['environment']=cfg_env['app_var'] ; yaml.dump(cfg, open('appeneded.yaml','w'))" + #python -c "import sys , json , ruamel.yaml ; from io import BytesIO as StringIO ; jsondata = StringIO(); yaml = ruamel.yaml.YAML(); data = json.load(open('$b','r')) ; yaml.dump(data, jsondata); cfg = yaml.load(open('$a','r')); cfg_env= yaml.load(jsondata.getvalue()); cfg['provider']['environment']=cfg_env['app_var'] ; yaml.dump(cfg, open('appeneded.yaml','w'))" #mv -f appeneded.yaml serverless.yml done IFS=$o fi - } deploy_lambda_package() @@ -789,12 +798,11 @@ deploy_lambda_package() # sls deploy if [ "$AWS_LAMBDA_DEPLOY_TYPE" == "SLS" ] then - echo "welcome to lambda SLS deploy" + echo "Welcome to lambda SLS deploy" sls deploy --stage $AWS_LAMBDA_STAGE - fi - - + fi } + # decrypt_aws_sys_parameter() # { @@ -804,327 +812,334 @@ deploy_lambda_package() # Input Collection and validation input_parsing_validation() { -while getopts .d:h:i:e:l:t:v:s:p:g:c:m:. OPTION -do - case $OPTION in - d) - DEPLOYMENT_TYPE=$OPTARG - ;; - h) - usage - exit 1 - ;; - i) - APP_IMAGE_NAME=$OPTARG - ;; - e) - ENV=$OPTARG - ;; - l) - SECPS_LIST=$OPTARG - ;; - t) - TAG=$OPTARG - ;; - c) - CFCACHE=$OPTARG - ;; - v) - EBS_APPVER=$OPTARG - ;; - s) - SEC_LIST=$OPTARG - ;; - p) - ECS_TEMPLATE_TYPE=$OPTARG - ;; - g) - SHARED_PROPERTY_FILENAME=$OPTARG - ;; - m) - DEPLOYCATEGORY=$OPTARG - ;; - ?) - log "additional param required" - usage - exit - ;; - esac -done - -if [ -z $DEPLOYMENT_TYPE ] || [ -z $ENV ] ; -then - log "Param validation error" - usage - exit 1 -fi + while getopts .d:h:i:e:l:t:v:s:p:g:c:m:. OPTION + do + case $OPTION in + d) + DEPLOYMENT_TYPE=$OPTARG + ;; + h) + usage + exit 1 + ;; + i) + APP_IMAGE_NAME=$OPTARG + ;; + e) + ENV=$OPTARG + ;; + l) + SECPS_LIST=$OPTARG + ;; + t) + TAG=$OPTARG + ;; + c) + CFCACHE=$OPTARG + ;; + v) + EBS_APPVER=$OPTARG + ;; + s) + SEC_LIST=$OPTARG + ;; + p) + ECS_TEMPLATE_TYPE=$OPTARG + ;; + g) + SHARED_PROPERTY_FILENAME=$OPTARG + ;; + m) + DEPLOYCATEGORY=$OPTARG + ;; + ?) + log "additional param required" + usage + exit + ;; + esac + done -log "ENV : $ENV" -log "DEPLOYMENT_TYPE : $DEPLOYMENT_TYPE" -log "app variable list : $SEC_LIST" -ENV_CONFIG=`echo "$ENV" | tr '[:upper:]' '[:lower:]'` - -#Validating AWS configuration - - -#Getting Deployment varaible only - -# AWS_ACCESS_KEY_ID=$(eval "echo \$${ENV}_AWS_ACCESS_KEY_ID") -# AWS_SECRET_ACCESS_KEY=$(eval "echo \$${ENV}_AWS_SECRET_ACCESS_KEY") -# AWS_ACCOUNT_ID=$(eval "echo \$${ENV}_AWS_ACCOUNT_ID") -# AWS_REGION=$(eval "echo \$${ENV}_AWS_REGION") -# if [ -z $AWS_ACCESS_KEY_ID ] || [ -z $AWS_SECRET_ACCESS_KEY ] || [ -z $AWS_ACCOUNT_ID ] || [ -z $AWS_REGION ]; -# then -# log "AWS Secret Parameters are not configured in circleci/environment" -# usage -# exit 1 -# else -# configure_aws_cli -# #aws configure list -# fi - -download_envfile -if [ -z $SECPS_LIST ]; -then - log "No secret parameter file list provided" - -else - download_psfile -fi -#decrypt_fileenc -#uploading_envvar + if [ -z $DEPLOYMENT_TYPE ] || [ -z $ENV ] ; + then + log "Param validation error" + usage + exit 1 + fi + log "ENV : $ENV" + log "DEPLOYMENT_TYPE : $DEPLOYMENT_TYPE" + log "app variable list : $SEC_LIST" + ENV_CONFIG=`echo "$ENV" | tr '[:upper:]' '[:lower:]'` + + #Validating AWS configuration + + #Getting Deployment varaible only + + # AWS_ACCESS_KEY_ID=$(eval "echo \$${ENV}_AWS_ACCESS_KEY_ID") + # AWS_SECRET_ACCESS_KEY=$(eval "echo \$${ENV}_AWS_SECRET_ACCESS_KEY") + # AWS_ACCOUNT_ID=$(eval "echo \$${ENV}_AWS_ACCOUNT_ID") + # AWS_REGION=$(eval "echo \$${ENV}_AWS_REGION") + # if [ -z $AWS_ACCESS_KEY_ID ] || [ -z $AWS_SECRET_ACCESS_KEY ] || [ -z $AWS_ACCOUNT_ID ] || [ -z $AWS_REGION ]; + # then + # log "AWS Secret Parameters are not configured in circleci/environment" + # usage + # exit 1 + # else + # configure_aws_cli + # #aws configure list + # fi + + download_envfile + + if [ -z $SECPS_LIST ]; + then + log "No secret parameter file list provided" + else + download_psfile + fi + + #decrypt_fileenc + #uploading_envvar + + #Validating parameter based on Deployment type + #ECS parameter validation + if [ "$DEPLOYMENT_TYPE" == "ECS" ] + then + ECS_TAG=$TAG + if [ "$DEPLOYCATEGORY" == "CLI" ] + then + if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $ECS_TAG ]; + then + log "Deployment varibale are not updated. Please check tag option was provided. Also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE variables are configured on secret manager" + usage + exit 1 + fi + DEPLOYCATEGORYNAME="ECSCLI" + else + cp $TEMPLATE_DIR/$TEMPLATE_SKELETON_FILE . + + if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $AWS_ECS_TASK_FAMILY ] || [ -z $AWS_ECS_CONTAINER_NAME ] || [ -z $AWS_ECS_PORTS ] || [ -z $ECS_TAG ]; + then + log "Deployment varibale are not updated. Please check tag option was provided. Also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE variables are configured on secret manager" + usage + exit 1 + fi + DEPLOYCATEGORYNAME="AWSCLI" + fi + + log "AWS_REPOSITORY : $AWS_REPOSITORY" + log "AWS_ECS_CLUSTER : $AWS_ECS_CLUSTER" + log "AWS_ECS_SERVICE_NAMES : $AWS_ECS_SERVICE" + log "AWS_ECS_TASK_FAMILY : $AWS_ECS_TASK_FAMILY" + log "AWS_ECS_CONTAINER_NAME : $AWS_ECS_CONTAINER_NAME" + log "AWS_ECS_PORTS : $AWS_ECS_PORTS" + log "ECS_TAG : $ECS_TAG" + log "DEPLOY TYPE : $DEPLOYCATEGORYNAME" + fi + + #EBS parameter validation + if [ "$DEPLOYMENT_TYPE" == "EBS" ] + then + # EBS_TAG = the docker image tag for example dev.201807051535 + cp $TEMPLATE_DIR/$EBS_TEMPLATE_SKELETON_FILE . + EBS_TAG=$TAG + AWS_EBS_APPVER="${AWS_EBS_ENV_NAME}-${EBS_TAG}" + IMG_WITH_EBS_TAG="${DOCKER_IMAGE_NAME}:${EBS_TAG}" + # EBS_TAG="${IMAGE_NAME}:${ENV_CONFIG}.${EBS_APPVER}" + + if [ "$AWS_S3_KEY_LOCATION" = "" ] ; + then + AWS_S3_KEY="${IMG_WITH_EBS_TAG}" + else + AWS_S3_KEY="$AWS_S3_KEY_LOCATION/${IMG_WITH_EBS_TAG}" + fi + #AWS_EBS_EB_DOCKERRUN_TEMPLATE_LOCATION=$(eval "echo \$${ENV}_AWS_EBS_EB_DOCKERRUN_TEMPLATE_LOCATION") + #AWS_EBS_DOCKERRUN_TEMPLATE=$(eval "echo \$${ENV}_AWS_EBS_DOCKERRUN_TEMPLATE") + if [ -z $AWS_EBS_APPLICATION_NAME ] || [ -z $DOCKER_IMAGE_NAME ] || [ -z $AWS_EBS_ENV_NAME ] || [ -z $EBS_TAG ] || [ -z $AWS_EBS_APPVER ] || [ -z $AWS_S3_BUCKET ] ; + then + log "Build variables are not updated. Please update the Build variable file" + usage + exit 1 + fi + log "EBS_APPLICATION_NAME : $AWS_EBS_APPLICATION_NAME" + log "AWS_EBS_APPVER : $AWS_EBS_APPVER" + log "EBS_TAG : $EBS_TAG" + log "AWS_S3_BUCKET : $AWS_S3_BUCKET" + log "AWS_S3_KEY : $AWS_S3_KEY" + log "AWS_EB_ENV : $AWS_EBS_ENV_NAME" + fi -#Validating parameter based on Deployment type -#ECS parameter validation -if [ "$DEPLOYMENT_TYPE" == "ECS" ] -then - ECS_TAG=$TAG - if [ "$DEPLOYCATEGORY" == "CLI" ] + #CloudFront parameter validation + if [ "$DEPLOYMENT_TYPE" == "CFRONT" ] then - if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $ECS_TAG ]; + if [ -z $AWS_S3_BUCKET ] || [ -z $AWS_S3_SOURCE_SYNC_PATH ]; then - log "Deployment varibale are not updated. Please check tag option has provided. also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE ariables are configured on secret manager" + log "Build variables are not updated. Please update the Build variable file" usage exit 1 fi - DEPLOYCATEGORYNAME="ECSCLI" - else - cp $TEMPLATE_DIR/$TEMPLATE_SKELETON_FILE . + log "AWS_S3_BUCKET : $AWS_S3_BUCKET" + log "AWS_S3_SOURCE_SYNC_PATH : $AWS_S3_SOURCE_SYNC_PATH" + fi - if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $AWS_ECS_TASK_FAMILY ] || [ -z $AWS_ECS_CONTAINER_NAME ] || [ -z $AWS_ECS_PORTS ] || [ -z $ECS_TAG ]; + #Lambda parameter validation + if [ "$DEPLOYMENT_TYPE" == "LAMBDA" ] + then + if [ -z $AWS_LAMBDA_DEPLOY_TYPE ] ; then - log "Deployment varibale are not updated. Please check tag option has provided. also ensure AWS_REPOSITORY, AWS_ECS_TASK_FAMILY,AWS_ECS_CONTAINER_NAME,AWS_ECS_PORTS,AWS_ECS_CLUSTER and AWS_ECS_SERVICE ariables are configured on secret manager" + log "Build variables are not updated. Please update the Build variable file" usage exit 1 fi - DEPLOYCATEGORYNAME="AWSCLI" + log "AWS_LAMBDA_DEPLOY_TYPE : $AWS_LAMBDA_DEPLOY_TYPE" + + if [ -z $AWS_LAMBDA_STAGE ] ; + then + log "Build variables are not updated. Please update the Build variable file" + usage + exit 1 + fi + log "AWS_LAMBDA_STAGE : $AWS_LAMBDA_STAGE" fi - log "AWS_REPOSITORY : $AWS_REPOSITORY" - log "AWS_ECS_CLUSTER : $AWS_ECS_CLUSTER" - log "AWS_ECS_SERVICE_NAMES : $AWS_ECS_SERVICE" - log "AWS_ECS_TASK_FAMILY : $AWS_ECS_TASK_FAMILY" - log "AWS_ECS_CONTAINER_NAME : $AWS_ECS_CONTAINER_NAME" - log "AWS_ECS_PORTS : $AWS_ECS_PORTS" - log "ECS_TAG : $ECS_TAG" - log "DEPLOY TYPE : $DEPLOYCATEGORYNAME" -fi -#EBS parameter validation -if [ "$DEPLOYMENT_TYPE" == "EBS" ] -then - # EBS_TAG = the docker image tag for example dev.201807051535 - cp $TEMPLATE_DIR/$EBS_TEMPLATE_SKELETON_FILE . - EBS_TAG=$TAG - AWS_EBS_APPVER="${AWS_EBS_ENV_NAME}-${EBS_TAG}" - IMG_WITH_EBS_TAG="${DOCKER_IMAGE_NAME}:${EBS_TAG}" -# EBS_TAG="${IMAGE_NAME}:${ENV_CONFIG}.${EBS_APPVER}" - - - if [ "$AWS_S3_KEY_LOCATION" = "" ] ; - then - AWS_S3_KEY="${IMG_WITH_EBS_TAG}" - else - AWS_S3_KEY="$AWS_S3_KEY_LOCATION/${IMG_WITH_EBS_TAG}" - fi - #AWS_EBS_EB_DOCKERRUN_TEMPLATE_LOCATION=$(eval "echo \$${ENV}_AWS_EBS_EB_DOCKERRUN_TEMPLATE_LOCATION") - #AWS_EBS_DOCKERRUN_TEMPLATE=$(eval "echo \$${ENV}_AWS_EBS_DOCKERRUN_TEMPLATE") - if [ -z $AWS_EBS_APPLICATION_NAME ] || [ -z $DOCKER_IMAGE_NAME ] || [ -z $AWS_EBS_ENV_NAME ] || [ -z $EBS_TAG ] || [ -z $AWS_EBS_APPVER ] || [ -z $AWS_S3_BUCKET ] ; - then - log "Build varibale are not updated. Please update the Build variable file" - usage - exit 1 - fi - log "EBS_APPLICATION_NAME : $AWS_EBS_APPLICATION_NAME" - log "AWS_EBS_APPVER : $AWS_EBS_APPVER" - log "EBS_TAG : $EBS_TAG" - log "AWS_S3_BUCKET : $AWS_S3_BUCKET" - log "AWS_S3_KEY : $AWS_S3_KEY" - log "AWS_EB_ENV : $AWS_EBS_ENV_NAME" -fi -#CFRONT parameter validation -if [ "$DEPLOYMENT_TYPE" == "CFRONT" ] -then - - if [ -z $AWS_S3_BUCKET ] || [ -z $AWS_S3_SOURCE_SYNC_PATH ]; - then - log "Build varibale are not updated. Please update the Build variable file" - usage - exit 1 - fi - log "AWS_S3_BUCKET : $AWS_S3_BUCKET" - log "AWS_S3_SOURCE_SYNC_PATH : $AWS_S3_SOURCE_SYNC_PATH" -fi -#CFRONT parameter validation -if [ "$DEPLOYMENT_TYPE" == "LAMBDA" ] -then - - if [ -z $AWS_LAMBDA_DEPLOY_TYPE ] ; - then - log "Build varibale are not updated. Please update the Build variable file" - usage - exit 1 - fi - log "AWS_LAMBDA_DEPLOY_TYPE : $AWS_LAMBDA_DEPLOY_TYPE" - - if [ -z $AWS_LAMBDA_STAGE ] ; - then - log "Build varibale are not updated. Please update the Build variable file" - usage - exit 1 - fi - log "AWS_LAMBDA_STAGE : $AWS_LAMBDA_STAGE" -fi } # Main - main() { + input_parsing_validation $@ -input_parsing_validation $@ - -if [ "$DEPLOYMENT_TYPE" == "ECS" ] -then - if [ "$DEPLOYCATEGORY" == "CLI" ] + if [ "$DEPLOYMENT_TYPE" == "ECS" ] then - eval $(aws ecr get-login --region $AWS_REGION --no-include-email) - #Moving image to repository - if [ -z $APP_IMAGE_NAME ]; + if [ "$DEPLOYCATEGORY" == "CLI" ] then - echo "value of AWS_REPOSITORY " $AWS_REPOSITORY - AWS_REPOSITORY_NAMES=$(echo ${AWS_REPOSITORY} | sed 's/,/ /g') - echo "value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES - IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES - if [ ${#AWS_REPOSITORY_NAMES_ARRAY[@]} -gt 0 ]; then - echo "${#AWS_REPOSITORY_NAMES_ARRAY[@]} repo push initalisation" - for AWS_ECS_REPO_NAME in "${AWS_REPOSITORY_NAMES_ARRAY[@]}" + eval $(aws ecr get-login --region $AWS_REGION --no-include-email) + + # Moving image to repository + if [ -z $APP_IMAGE_NAME ]; + then + echo "Value of AWS_REPOSITORY: " $AWS_REPOSITORY + AWS_REPOSITORY_NAMES=$(echo ${AWS_REPOSITORY} | sed 's/,/ /g') + echo "Value of AWS_REPOSITORY_NAMES: " $AWS_REPOSITORY_NAMES + + IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES + if [ ${#AWS_REPOSITORY_NAMES_ARRAY[@]} -gt 0 ]; then + echo "${#AWS_REPOSITORY_NAMES_ARRAY[@]} repo push initalisation" + for AWS_ECS_REPO_NAME in "${AWS_REPOSITORY_NAMES_ARRAY[@]}" + do + echo "updating reposioty - $AWS_ECS_REPO_NAME" + ECSCLI_push_ecr_image $AWS_ECS_REPO_NAME + #echo $REVISION + done + else + echo "Kindly check the Repository name has Parameter" + usage + exit 1 + fi + else + #if appp images details are provided + + echo "value of AWS_REPOSITORY " $AWS_REPOSITORY + AWS_REPOSITORY_NAMES=$(echo ${AWS_REPOSITORY} | sed 's/,/ /g') + echo "value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES + echo "value of image name provided " $APP_IMAGE_NAME + APP_IMAGE_NAMES=$(echo ${APP_IMAGE_NAME} | sed 's/,/ /g') + + IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES + IFS=' ' read -a APP_IMAGE_NAMES_ARRAY <<< $APP_IMAGE_NAMES + echo "AWS ECR repo count needs to be updated ${#AWS_REPOSITORY_NAMES_ARRAY[@]}, APP image count provided in option ${#APP_IMAGE_NAMES_ARRAY[@]} " + + if [ "${#AWS_REPOSITORY_NAMES_ARRAY[@]}" = "${#APP_IMAGE_NAMES_ARRAY[@]}" ]; + then + ecstempcount=0 + while [ $ecstempcount -lt ${#AWS_REPOSITORY_NAMES_ARRAY[@]} ] + do + echo "${AWS_REPOSITORY_NAMES_ARRAY[$count]} , ${APP_IMAGE_NAMES_ARRAY[$count]}" + ECSCLI_push_ecr_image "${AWS_REPOSITORY_NAMES_ARRAY[$count]}" "${APP_IMAGE_NAMES_ARRAY[$count]}" + ecstempcount=`expr $ecstempcount + 1` + done + else + echo "Kindly check the image name in Parameter" + usage + exit 1 + fi + fi + + #env file updation + ECSCLI_update_env + + # Configuring cluster + ecs-cli configure --region us-east-1 --cluster $AWS_ECS_CLUSTER + + # updating service + echo "Value of AWS_ECS_SERVICE: " $AWS_ECS_SERVICE + AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g') + #AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//') + echo "Value of AWS_ECS_SERVICE_NAMES: " $AWS_ECS_SERVICE_NAMES + + IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES + if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then + echo "${#AWS_ECS_SERVICES[@]} service(s) are going to be updated" + for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}" do - echo "updating reposioty - $AWS_ECS_REPO_NAME" - ECSCLI_push_ecr_image $AWS_ECS_REPO_NAME + echo "updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME" + ecs-cli compose --project-name "$AWS_ECS_SERVICE_NAME" service up #echo $REVISION done else - echo "Kindly check the Repository name has Parameter" + echo "Kindly check the service name in Parameter" usage exit 1 fi else - #if appp images details are provided - - echo "value of AWS_REPOSITORY " $AWS_REPOSITORY - AWS_REPOSITORY_NAMES=$(echo ${AWS_REPOSITORY} | sed 's/,/ /g') - echo "value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES - echo "value of image name provided " $APP_IMAGE_NAME - APP_IMAGE_NAMES=$(echo ${APP_IMAGE_NAME} | sed 's/,/ /g') - IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES - IFS=' ' read -a APP_IMAGE_NAMES_ARRAY <<< $APP_IMAGE_NAMES - echo "AWS REPO COUNT NEED TO BE UPDATE ${#AWS_REPOSITORY_NAMES_ARRAY[@]} , APP image count provided in option ${#APP_IMAGE_NAMES_ARRAY[@]} " - if [ "${#AWS_REPOSITORY_NAMES_ARRAY[@]}" = "${#APP_IMAGE_NAMES_ARRAY[@]}" ]; - then - ecstempcount=0 - while [ $ecstempcount -lt ${#AWS_REPOSITORY_NAMES_ARRAY[@]} ] + validate_update_loggroup + ECS_push_ecr_image + ECS_template_create_register + + echo "Value of AWS_ECS_SERVICE: " $AWS_ECS_SERVICE + AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g') + #AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//') + echo "Value of AWS_ECS_SERVICE_NAMES: " $AWS_ECS_SERVICE_NAMES + + IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES + if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then + echo "${#AWS_ECS_SERVICES[@]} service are going to be updated" + for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}" do - echo "${AWS_REPOSITORY_NAMES_ARRAY[$count]} , ${APP_IMAGE_NAMES_ARRAY[$count]}" - ECSCLI_push_ecr_image "${AWS_REPOSITORY_NAMES_ARRAY[$count]}" "${APP_IMAGE_NAMES_ARRAY[$count]}" - ecstempcount=`expr $ecstempcount + 1` + echo "Creating/updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME" + ECS_deploy_cluster "$AWS_ECS_SERVICE_NAME" + check_service_status "$AWS_ECS_SERVICE_NAME" + #echo $REVISION done else - echo "Kindly check the image name in Parameter" + echo "Kindly check the service name parameter" usage exit 1 fi fi - #env file updation - ECSCLI_update_env - # Configurong cluster - ecs-cli configure --region us-east-1 --cluster $AWS_ECS_CLUSTER - # updating service - echo "value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE - AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g') - #AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//') - echo "value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES - IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES - if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then - echo "${#AWS_ECS_SERVICES[@]} service are going to be updated" - for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}" - do - echo "updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME" - ecs-cli compose --project-name "$AWS_ECS_SERVICE_NAME" service up - #echo $REVISION - done - else - echo "Kindly check the service name in Parameter" - usage - exit 1 - fi - else - validate_update_loggroup - ECS_push_ecr_image - ECS_template_create_register - echo "value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE - AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g') - #AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//') - echo "value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES - IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES - if [ ${#AWS_ECS_SERVICES[@]} -gt 0 ]; then - echo "${#AWS_ECS_SERVICES[@]} service are going to be updated" - for AWS_ECS_SERVICE_NAME in "${AWS_ECS_SERVICES[@]}" - do - echo "creating/updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME" - ECS_deploy_cluster "$AWS_ECS_SERVICE_NAME" - check_service_status "$AWS_ECS_SERVICE_NAME" - #echo $REVISION - done - else - echo "Kindly check the service name in Parameter" - usage - exit 1 - fi - fi -fi - + fi -if [ "$DEPLOYMENT_TYPE" == "EBS" ] -then - #configure_aws_cli - configure_docker_private_login - EBS_push_docker_image - creating_updating_ebs_docker_json - creating_updating_EBS_appversion -fi + if [ "$DEPLOYMENT_TYPE" == "EBS" ] + then + #configure_aws_cli + configure_docker_private_login + EBS_push_docker_image + creating_updating_ebs_docker_json + creating_updating_EBS_appversion + fi -if [ "$DEPLOYMENT_TYPE" == "CFRONT" ] -then - deploy_s3bucket -fi + if [ "$DEPLOYMENT_TYPE" == "CFRONT" ] + then + deploy_s3bucket + fi -if [ "$DEPLOYMENT_TYPE" == "LAMBDA" ] -then - configure_Lambda_template - deploy_lambda_package -fi + if [ "$DEPLOYMENT_TYPE" == "LAMBDA" ] + then + configure_Lambda_template + deploy_lambda_package + fi } -main $@ +main $@ From cccfa15e3ba17f55aea96c713ba34e6dbe761675 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 1 Mar 2023 12:14:11 +0530 Subject: [PATCH 21/22] Update awsconfiguration.sh --- awsconfiguration.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 326e1be..031eaa0 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -22,7 +22,7 @@ if [ -z "$AWS_REGION" ]; then AWS_REGION="us-east-1" fi -# echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" +# echo "curl -k -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" auth0cmd=$(echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") token=$( eval $auth0cmd | jq -r .access_token ) tokenjsonformat=$( decode_base64_url $(echo -n $token | cut -d "." -f 2) ) From 730ae0f85c9e9f1cac9f4e566153a41ec3a20f57 Mon Sep 17 00:00:00 2001 From: Gunasekar-K Date: Wed, 1 Mar 2023 12:19:39 +0530 Subject: [PATCH 22/22] Update awsconfiguration.sh --- awsconfiguration.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awsconfiguration.sh b/awsconfiguration.sh index 031eaa0..56b8c44 100755 --- a/awsconfiguration.sh +++ b/awsconfiguration.sh @@ -23,7 +23,7 @@ then AWS_REGION="us-east-1" fi # echo "curl -k -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'" -auth0cmd=$(echo "curl -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") +auth0cmd=$(echo "curl -k -X POST $CI_AUTH0_URL -H 'Content-Type: application/json' -d '{ \"client_id\": \"$CI_AUTH0_CLIENTID\", \"client_secret\": \"$CI_AUTH0_CLIENTSECRET\", \"audience\": \"$CI_AUTH0_AUDIENCE\", \"grant_type\": \"client_credentials\" , \"environment\" : \"$AWSENV\" , \"username\" : \"$CIRCLE_PROJECT_USERNAME\" , \"reponame\" : \"$CIRCLE_PROJECT_REPONAME\", \"build_num\": \"$CIRCLE_BUILD_NUM\", \"branch\": \"$CIRCLE_BRANCH\"}'") token=$( eval $auth0cmd | jq -r .access_token ) tokenjsonformat=$( decode_base64_url $(echo -n $token | cut -d "." -f 2) ) AWS_ACCESS_KEY_ID=$(echo $tokenjsonformat | jq -r . | grep AWS_ACCESS_KEY | cut -d '"' -f 4) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy