@@ -40,6 +40,8 @@ volcount=0
4040template=" "
4141TEMPLATE_SKELETON_FILE=" base_template_v2.json"
4242APP_IMAGE_NAME=" "
43+ DEPLOYCATEGORY=" "
44+ ECSCLI_ENVFILE=" api.env"
4345
4446# variable specific to EBS
4547DOCKERRUN=" Dockerrun.aws.json"
@@ -140,7 +142,45 @@ ECS_push_ecr_image() {
140142 track_error $? " ECS ECR image push"
141143 log " Docker Image published."
142144}
145+ # ===============
146+ ECSCLI_push_ecr_image () {
147+ ECS_REPONAME=$1
148+ IMAGE_NAME=$2
149+ if [ -z " $IMAGE_NAME " ];
150+ then
151+ log " Image has followed standard format"
152+ else
153+ log " Image does not follow stanard format. Modifying the image and updating the ECS_TAG"
154+ docker tag $IMAGE_NAME :$ECS_TAG $AWS_ACCOUNT_ID .dkr.ecr.$AWS_REGION .amazonaws.com/$ECS_REPONAME :$CIRCLE_BUILD_NUM
155+ ECS_TAG=$CIRCLE_BUILD_NUM
156+ fi
157+ log " Pushing Docker Image..."
158+ eval $( aws ecr get-login --region $AWS_REGION --no-include-email)
159+ docker push $AWS_ACCOUNT_ID .dkr.ecr.$AWS_REGION .amazonaws.com/$ECS_REPONAME :$ECS_TAG
160+ track_error $? " ECS ECR image push"
161+ log " Docker Image published."
162+ }
163+ # ================
164+ ECSCLI_update_env ()
165+ {
166+ Buffer_seclist=$( echo $SEC_LIST | sed ' s/,/ /g' )
167+ for listname in $Buffer_seclist ;
168+ do
169+ local o=$IFS
170+ IFS=$( echo -en " \n\b" )
171+ envvars=$( cat $listname .json | jq -r ' . ' | jq ' . | to_entries[] | { "name": .key , "value": .value } ' | jq -s . )
172+ log " vars are fetched"
143173
174+ for s in $( echo $envvars | jq -c " .[]" ) ; do
175+ # echo $envvars
176+ varname=$( echo $s | jq -r " .name" )
177+ varvalue=$( echo $s | jq -r " .value" )
178+ envaddition " $varname " " $varvalue "
179+ echo " $varname " =" \" $varvalue \" " >> $ECSCLI_ENVFILE
180+ done
181+ IFS=$o
182+ done
183+ }
144184# ================
145185portmapping () {
146186hostport=$1
@@ -633,7 +673,7 @@ deploy_lambda_package()
633673# Input Collection and validation
634674input_parsing_validation ()
635675{
636- while getopts .d:h:i:e:t:v:s:p:g:c:. OPTION
676+ while getopts .d:h:i:e:t:v:s:p:g:c:m: . OPTION
637677do
638678 case $OPTION in
639679 d)
667707 g)
668708 SHARED_PROPERTY_FILENAME=$OPTARG
669709 ;;
670-
710+ m)
711+ DEPLOYCATEGORY=$OPTARG
712+ ;;
671713 ? )
672714 log " additional param required"
673715 usage
@@ -719,21 +761,34 @@ download_envfile
719761if [ " $DEPLOYMENT_TYPE " == " ECS" ]
720762then
721763 ECS_TAG=$TAG
722- cp $HOME /buildscript/$TEMPLATE_SKELETON_FILE .
764+ if [ " $DEPLOYCATEGORY " == " CLI" ]
765+ then
766+ if [ -z $AWS_REPOSITORY ] || [ -z $AWS_ECS_CLUSTER ] || [ -z $AWS_ECS_SERVICE ] || [ -z $ECS_TAG ];
767+ then
768+ 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"
769+ usage
770+ exit 1
771+ fi
772+ DEPLOYCATEGORYNAME=" ECSCLI"
773+ else
774+ cp $HOME /buildscript/$TEMPLATE_SKELETON_FILE .
723775
724- 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 ];
725- then
726- 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"
727- usage
728- exit 1
729- fi
776+ 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 ];
777+ then
778+ 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"
779+ usage
780+ exit 1
781+ fi
782+ DEPLOYCATEGORYNAME=" AWSCLI"
783+ fi
730784 log " AWS_REPOSITORY : $AWS_REPOSITORY "
731785 log " AWS_ECS_CLUSTER : $AWS_ECS_CLUSTER "
732786 log " AWS_ECS_SERVICE_NAMES : $AWS_ECS_SERVICE "
733787 log " AWS_ECS_TASK_FAMILY : $AWS_ECS_TASK_FAMILY "
734788 log " AWS_ECS_CONTAINER_NAME : $AWS_ECS_CONTAINER_NAME "
735789 log " AWS_ECS_PORTS : $AWS_ECS_PORTS "
736790 log " ECS_TAG : $ECS_TAG "
791+ log " DEPLOY TYPE : $DEPLOYCATEGORYNAME "
737792fi
738793# EBS parameter validation
739794if [ " $DEPLOYMENT_TYPE " == " EBS" ]
@@ -811,29 +866,102 @@ input_parsing_validation $@
811866
812867if [ " $DEPLOYMENT_TYPE " == " ECS" ]
813868then
814- validate_update_loggroup
815- ECS_push_ecr_image
816- ECS_template_create_register
817- echo " value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE
818- AWS_ECS_SERVICE_NAMES=$( echo ${AWS_ECS_SERVICE} | sed ' s/,/ /g' )
819- # AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//')
820- echo " value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES
821- IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES
822- if [ ${# AWS_ECS_SERVICES[@]} -gt 0 ]; then
823- echo " ${# AWS_ECS_SERVICES[@]} service are going to be updated"
824- for AWS_ECS_SERVICE_NAME in " ${AWS_ECS_SERVICES[@]} "
825- do
826- echo " updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME "
827- ECS_deploy_cluster " $AWS_ECS_SERVICE_NAME "
828- check_service_status " $AWS_ECS_SERVICE_NAME "
829- # echo $REVISION
830- done
831- else
832- echo " Kindly check the service name in Parameter"
833- usage
834- exit 1
869+ if [ " $DEPLOYCATEGORY " == " CLI" ]
870+ then
871+ eval $( aws ecr get-login --region $AWS_REGION --no-include-email)
872+ # Moving image to repository
873+ if [ -z $APP_IMAGE_NAME ];
874+ then
875+ echo " value of AWS_REPOSITORY " $AWS_REPOSITORY
876+ AWS_REPOSITORY_NAMES=$( echo ${AWS_REPOSITORY} | sed ' s/,/ /g' )
877+ echo " value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES
878+ IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES
879+ if [ ${# AWS_REPOSITORY_NAMES_ARRAY[@]} -gt 0 ]; then
880+ echo " ${# AWS_REPOSITORY_NAMES_ARRAY[@]} repo push initalisation"
881+ for AWS_ECS_REPO_NAME in " ${AWS_REPOSITORY_NAMES_ARRAY[@]} "
882+ do
883+ echo " updating reposioty - $AWS_ECS_REPO_NAME "
884+ ECSCLI_push_ecr_image $AWS_ECS_REPO_NAME
885+ # echo $REVISION
886+ done
887+ else
888+ echo " Kindly check the Repository name has Parameter"
889+ usage
890+ exit 1
891+ fi
892+ else
893+ # if appp images details are provided
894+
895+ echo " value of AWS_REPOSITORY " $AWS_REPOSITORY
896+ AWS_REPOSITORY_NAMES=$( echo ${AWS_REPOSITORY} | sed ' s/,/ /g' )
897+ echo " value of AWS_REPOSITORY_NAMES " $AWS_REPOSITORY_NAMES
898+ echo " value of image name provided " $APP_IMAGE_NAME
899+ APP_IMAGE_NAMES=$( echo ${APP_IMAGE_NAME} | sed ' s/,/ /g' )
900+ IFS=' ' read -a AWS_REPOSITORY_NAMES_ARRAY <<< $AWS_REPOSITORY_NAMES
901+ IFS=' ' read -a APP_IMAGE_NAMES_ARRAY <<< $APP_IMAGE_NAMES
902+ echo " AWS REPO COUNT NEED TO BE UPDATE ${# AWS_REPOSITORY_NAMES_ARRAY[@]} , APP image count provided in option ${# APP_IMAGE_NAMES_ARRAY[@]} "
903+ if [ " ${# AWS_REPOSITORY_NAMES_ARRAY[@]} " = " ${# APP_IMAGE_NAMES_ARRAY[@]} " ];
904+ then
905+ ecstempcount=0
906+ while [ $ecstempcount -lt ${# AWS_REPOSITORY_NAMES_ARRAY[@]} ]
907+ do
908+ echo " ${AWS_REPOSITORY_NAMES_ARRAY[$count]} , ${APP_IMAGE_NAMES_ARRAY[$count]} "
909+ ECSCLI_push_ecr_image " ${AWS_REPOSITORY_NAMES_ARRAY[$count]} " " ${APP_IMAGE_NAMES_ARRAY[$count]} "
910+ ecstempcount=` expr $ecstempcount + 1`
911+ done
912+ else
913+ echo " Kindly check the image name in Parameter"
914+ usage
915+ exit 1
916+ fi
917+ fi
918+ # env file updation
919+ ECSCLI_update_env
920+ # Configurong cluster
921+ ecs-cli configure --region us-east-1 --cluster $AWS_ECS_CLUSTER
922+ # updating service
923+ echo " value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE
924+ AWS_ECS_SERVICE_NAMES=$( echo ${AWS_ECS_SERVICE} | sed ' s/,/ /g' )
925+ # AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//')
926+ echo " value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES
927+ IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES
928+ if [ ${# AWS_ECS_SERVICES[@]} -gt 0 ]; then
929+ echo " ${# AWS_ECS_SERVICES[@]} service are going to be updated"
930+ for AWS_ECS_SERVICE_NAME in " ${AWS_ECS_SERVICES[@]} "
931+ do
932+ echo " updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME "
933+ ecs-cli compose --project-name " $AWS_ECS_SERVICE_NAME " service up
934+ # echo $REVISION
935+ done
936+ else
937+ echo " Kindly check the service name in Parameter"
938+ usage
939+ exit 1
940+ fi
941+ else
942+ validate_update_loggroup
943+ ECS_push_ecr_image
944+ ECS_template_create_register
945+ echo " value of AWS_ECS_SERVICE " $AWS_ECS_SERVICE
946+ AWS_ECS_SERVICE_NAMES=$( echo ${AWS_ECS_SERVICE} | sed ' s/,/ /g' )
947+ # AWS_ECS_SERVICE_NAMES=$(echo ${AWS_ECS_SERVICE} | sed 's/,/ /g' | sed 'N;s/\n//')
948+ echo " value of AWS_ECS_SERVICE_NAMES " $AWS_ECS_SERVICE_NAMES
949+ IFS=' ' read -a AWS_ECS_SERVICES <<< $AWS_ECS_SERVICE_NAMES
950+ if [ ${# AWS_ECS_SERVICES[@]} -gt 0 ]; then
951+ echo " ${# AWS_ECS_SERVICES[@]} service are going to be updated"
952+ for AWS_ECS_SERVICE_NAME in " ${AWS_ECS_SERVICES[@]} "
953+ do
954+ echo " updating ECS Cluster Service - $AWS_ECS_SERVICE_NAME "
955+ ECS_deploy_cluster " $AWS_ECS_SERVICE_NAME "
956+ check_service_status " $AWS_ECS_SERVICE_NAME "
957+ # echo $REVISION
958+ done
959+ else
960+ echo " Kindly check the service name in Parameter"
961+ usage
962+ exit 1
963+ fi
835964 fi
836-
837965fi
838966
839967
0 commit comments