Skip to content

Commit 55e538e

Browse files
authored
Merge pull request #7 from topcoder-platform/feature_v1.4
Feature v1.4 -ECSCLI FEATURE
2 parents 86b08d0 + 08199d9 commit 55e538e

File tree

1 file changed

+159
-31
lines changed

1 file changed

+159
-31
lines changed

master_deploy.sh

Lines changed: 159 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ volcount=0
4040
template=""
4141
TEMPLATE_SKELETON_FILE="base_template_v2.json"
4242
APP_IMAGE_NAME=""
43+
DEPLOYCATEGORY=""
44+
ECSCLI_ENVFILE="api.env"
4345

4446
#variable specific to EBS
4547
DOCKERRUN="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
#================
145185
portmapping() {
146186
hostport=$1
@@ -633,7 +673,7 @@ deploy_lambda_package()
633673
# Input Collection and validation
634674
input_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
637677
do
638678
case $OPTION in
639679
d)
@@ -667,7 +707,9 @@ do
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
719761
if [ "$DEPLOYMENT_TYPE" == "ECS" ]
720762
then
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"
737792
fi
738793
#EBS parameter validation
739794
if [ "$DEPLOYMENT_TYPE" == "EBS" ]
@@ -811,29 +866,102 @@ input_parsing_validation $@
811866

812867
if [ "$DEPLOYMENT_TYPE" == "ECS" ]
813868
then
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-
837965
fi
838966

839967

0 commit comments

Comments
 (0)