#Common vars UAT_DOMAIN=calidad-architect.com TYSON_DOMAIN=tysonbeta.com DOMAIN_TO_DEPLOY=default CLUSTERNAME=DEFAULT CLUSTERNAME_TIJUANA=fintech-istio-devops CLUSTERNAME_TYSON=tyson-beta environments=("tijuana" "tyson") language_options=("java" "react" "python") namespace_options=("app-core" "app-crm" "app-desiciones" "app-plataforma" "app-maq-estados" "app-mpago" "app-orquesta" "app-verificacion" "app-web" "app-finsol" "tools-devops" "app-afi" "app-legacy" "app-autonomation" "app-coa" "app-backoffice" "app-rh-nominas" "app-masnomina" "app-new-core") namespace_tyson_options=("core" "crm" "decisiones" "plataforma" "maq-estados" "mpago" "orquesta" "verificacion" "web" "devops" "afi" "legacy" "autonomation" "coa" "backoffice" "rh-nominas" "new-core" "caja") azure_proj_tyson_options=("AFI" "Apps Nativas" "Apps Web" "Autonomation" "Back Office" "verificacion" "Caja Móvil" "COA" "CORE" "Decisiones" "Estados" "Findep Transformación Digital" "Gestiona" "Legacy AEF" "Legacy FISA" "Libraries" "Money In" "Money Out" "Plataforma" "Plataforma Digital" "Proyecto de Capacitacion" "Verificaciones" "Arquitectura" "Caja Unica" ) sgbd_options=("POSTGRES_CLOUD_SQL" "MONGODB" "NO_APLICA_DB") command_exists() { command -v "$@" >/dev/null 2>&1 } is_darwin() { case "$(uname -s)" in *darwin*) true ;; *Darwin*) true ;; *) false ;; esac } function banner { echo -e " ______ _____ _ _ _____ ______ _____ _____ _ _____" echo -e " | ____||_ _|| \ | || __ \ | ____|| __ \ / ____|| | |_ _|" echo -e " | |__ | | | \| || | | || |__ | |__) | | | | | | |" echo -e " | __| | | | . ´ || | | || __| | ___/ | | | | | |" echo -e " | | _| |_ | |\ || |__| || |____ | | | |____ | |____ _| |_" echo -e " |_| |_____||_| \_||_____/ |______||_| \_____||______||_____|" echo -e " Copyright 2022 FINDEP. All Rights Reserved" echo -e "V 2.2.1-LTS" echo "" echo "" echo "" echo -e "Esta versión sólo contempla soporte para Tyson..." } ##Función para elegir el ambiente de despliegue function get_environment { select env in "${environments[@]}" "Quit"; do case "$REPLY" in 1) echo "$env" break ;; 2) echo "$env" break ;; *) continue ;; esac done } #Función para generar el nombre del servicio o componente web function name_service { read -p "[example-service]: " serviceName echo "$serviceName" } function get_description { desc="" read -p "[Breve descripción del componente]: " desc echo "$desc" } ##Función para elegir el lenguaje de desarrollo function code_language { select language in "${language_options[@]}" "Quit"; do case "$REPLY" in 1) echo "$language" break ;; 2) echo "$language" break ;; 3) echo "$language" break ;; *) continue ;; esac done } ##Función para elegir el namespace de despliegue function namespace_deploy { my_envirnment=$1 my_language=$2 if [[ $my_envirnment == "tyson" ]] then if [[ $my_language == "react" ]] then namespace="web" echo "$namespace" else select namespace in "${namespace_tyson_options[@]}" "Quit"; do case "$REPLY" in 1) echo "$namespace" break ;; 2) echo "$namespace" break ;; 3) echo "$namespace" break ;; 4) echo "$namespace" break ;; 5) echo "$namespace" break ;; 6) echo "$namespace" break ;; 7) echo "$namespace" break ;; 8) echo "$namespace" break ;; 9) echo "$namespace" break ;; 10) echo "$namespace" break ;; 11) echo "$namespace" break ;; 12) echo "$namespace" break ;; 13) echo "$namespace" break ;; 14) echo "$namespace" break ;; 15) echo "$namespace" break ;; 16) echo "$namespace" break ;; 17) echo "$namespace" break ;; 18) echo "$namespace" break ;; *) continue ;; esac done fi else if [[ $my_language == "react" ]] then namespace="app-web" echo "$namespace" else select namespace in "${namespace_options[@]}" "Quit"; do case "$REPLY" in 1) echo "$namespace" break ;; 2) echo "$namespace" break ;; 3) echo "$namespace" break ;; 4) echo "$namespace" break ;; 5) echo "$namespace" break ;; 6) echo "$namespace" break ;; 7) echo "$namespace" break ;; 8) echo "$namespace" break ;; 9) echo "$namespace" break ;; 10) echo "$namespace" break ;; 11) echo "$namespace" break ;; 12) echo "$namespace" break ;; 13) echo "$namespace" break ;; 14) echo "$namespace" break ;; 15) echo "$namespace" break ;; 16) echo "$namespace" break ;; 17) echo "$namespace" break ;; 18) echo "$namespace" break ;; 19) echo "$namespace" break ;; 20) echo "$namespace" break ;; *) continue ;; esac done fi fi } ##Función para elegir el sistema gestor de base de datos. function sgbd_system { my_env=$1 namespace=$2 if [[ $my_env == "tyson" ]] then if [[ $namespace == "web" ]] then sgbd="NO_APLICA_DB" echo "$sgbd" else select sgbd in "${sgbd_options[@]}" "Quit"; do case "$REPLY" in 1) echo "$sgbd" break ;; 2) echo "$sgbd" break ;; 3) echo "$sgbd" break ;; *) continue ;; esac done fi else if [[ $namespace == "app-web" ]] then sgbd="NO_APLICA_DB" echo "$sgbd" else select sgbd in "${sgbd_options[@]}" "Quit"; do case "$REPLY" in 1) echo "$sgbd" break ;; 2) echo "$sgbd" break ;; 3) echo "$sgbd" break ;; *) continue ;; esac done fi fi } ##Función para obtener la versión de deployment yaml function get_deployment_version { my_environment=$1 my_sgbd=$2 if [[ $my_environment == "tyson" ]] then if [[ $my_sgbd == "POSTGRES_CLOUD_SQL" ]] then deploymentVersion="v2" else if [[ $my_sgbd == "MONGODB" ]] then deploymentVersion="v3" else deploymentVersion="v1" fi fi else if [[ $my_sgbd == "POSTGRES_CLOUD_SQL" ]] then deploymentVersion="v5" else if [[ $my_sgbd == "MONGODB" ]] then deploymentVersion="v6" else deploymentVersion="v4" fi fi fi echo "$deploymentVersion" } ##Función para obtener ruta de pipe para cada gestor de cada base de datos function get_sgbd_pipe { my_sgbd=$1 if [[ $my_sgbd == "POSTGRES_CLOUD_SQL" ]] then pipeSGBD="postgres" else if [[ $my_sgbd == "MONGODB" ]] then pipeSGBD="mongo" else pipeSGBD="default" fi fi echo "$pipeSGBD" } ##Función para validar versión de ejecución instance function get_instance_action { my_namespace=$1 if [[ $my_namespace == "app-new-core" ]] then action="config-db-new-core" else action="create-db" fi echo "$action" } ##Función para descargar configuración y manifiestos para desplegar en tyson function get_manifiests_tyson { myEnvirnment=$1 myServiceName=$2 myLanguage=$3 myNamespace=$4 mySGBD=$5 myOwner=$6 myDeploymentVersion=$7 myDescription=$8 curl --location --request POST 'https://cli-service-stable-v1.tysonbeta.com/v1/manifiests/' \ --header 'Content-Type: application/json' \ --data-raw "{ \"environmet\":\"$myEnvirnment\", \"serviceName\":\"$myServiceName\", \"language\":\"$myLanguage\", \"namespace\":\"$myNamespace\", \"sgbd\":\"$mySGBD\", \"owner\":\"$myOwner\", \"description\":\"$myDescription\", \"makefile\":{ \"name\":\"Makefile\", \"version\": \"v1\" }, \"dockerFile\":{ \"language\":\"$myLanguage\", \"version\": \"v1\" }, \"loombok\":{ \"version\": \"v1\" }, \"manifiests\":[{ \"name\":\"deployment\", \"type\":\"deployment\", \"version\": \"$myDeploymentVersion\" },{ \"name\":\"destinationRule\", \"type\":\"destination_rule\", \"version\": \"v1\" },{ \"name\":\"horizontalPodAutoscaler\", \"type\":\"horizontal_pod_autoscaler\", \"version\": \"v1\" },{ \"name\":\"service\", \"type\":\"service\", \"version\": \"v1\" },{ \"name\":\"virtualService\", \"type\":\"virtual_service\", \"version\": \"v1\" },{ \"name\":\"authPolicy\", \"type\":\"auth_policy\", \"version\": \"v1\" } ], \"cloudbuilds\":[{ \"name\":\"azure-pipelines\", \"language\":\"$myLanguage\", \"version\": \"v2\" } ], \"bashScripts\":[{ \"name\":\"init_manifiests\", \"type\":\"init_manifiests\", \"version\": \"v1\" } ] }" -o setup.sh } ##Función para descargar configuración y manifiestos para desplegar en tijuana function get_manifiests_tijuana { myEnvirnment=$1 myServiceName=$2 myLanguage=$3 myNamespace=$4 mySGBD=$5 myOwner=$6 myDeploymentVersion=$7 myDescription=$8 curl --location --request POST 'https://cli-service-stable-v1.tysonbeta.com/v1/manifiests/' \ --header 'Content-Type: application/json' \ --data-raw "{ \"environmet\":\"$myEnvirnment\", \"serviceName\":\"$myServiceName\", \"language\":\"$myLanguage\", \"namespace\":\"$myNamespace\", \"sgbd\":\"$mySGBD\", \"owner\":\"$myOwner\", \"description\":\"$myDescription\", \"makefile\":{ \"name\":\"Makefile\", \"version\": \"v2\" }, \"dockerFile\":{ \"language\":\"$myLanguage\", \"version\": \"v1\" }, \"loombok\":{ \"version\": \"v1\" }, \"manifiests\":[{ \"name\":\"deployment\", \"type\":\"deployment\", \"version\": \"$myDeploymentVersion\" },{ \"name\":\"destinationRule\", \"type\":\"destination_rule\", \"version\": \"v2\" },{ \"name\":\"horizontalPodAutoscaler\", \"type\":\"horizontal_pod_autoscaler\", \"version\": \"v2\" },{ \"name\":\"service\", \"type\":\"service\", \"version\": \"v2\" },{ \"name\":\"virtualService\", \"type\":\"virtual_service\", \"version\": \"v2\" } ], \"cloudbuilds\":[{ \"name\":\"azure-pipelines\", \"language\":\"$myLanguage\", \"version\": \"v2\" } ], \"bashScripts\":[{ \"name\":\"init_manifiests\", \"type\":\"init_manifiests\", \"version\": \"v1\" } ] }" -o setup.sh } function get_azure_project { select azure_proj in "${azure_proj_tyson_options[@]}" "Quit"; do case "$REPLY" in 1) echo "$azure_proj" break ;; 2) echo "$azure_proj" break ;; 3) echo "$azure_proj" break ;; 4) echo "$azure_proj" break ;; 5) echo "$azure_proj" break ;; 6) echo "$azure_proj" break ;; 7) echo "$azure_proj" break ;; 8) echo "$azure_proj" break ;; 9) echo "$azure_proj" break ;; 10) echo "$azure_proj" break ;; 11) echo "$azure_proj" break ;; 12) echo "$azure_proj" break ;; 13) echo "$azure_proj" break ;; 14) echo "$azure_proj" break ;; 15) echo "$azure_proj" break ;; 16) echo "$azure_proj" break ;; 17) echo "$azure_proj" break ;; 18) echo "$azure_proj" break ;; 19) echo "$azure_proj" break ;; 20) echo "$azure_proj" break ;; 21) echo "$azure_proj" break ;; 22) echo "$azure_proj" break ;; 23) echo "$azure_proj" break ;; 24) echo "$azure_proj" break ;; *) continue ;; esac done } #Flujo principal ########################################################## ########################################################## ########################################################## banner echo "Ambiente: tyson" environment="tyson" echo "Nombre del servicio:" serviceName=$(name_service) echo "Descripción (Max 150 caracteres)" description=$(get_description) echo "Lenguaje de desarrollo:" language=$(code_language) echo "Espacio de nombres:" echo -e "************************************************************************************************" echo -e "************************************************************************************************" echo -e "***¡Las opciones finsol y masnomina se han removido, asegurese de elegir la opción correcta!***" echo -e "************************************************************************************************" echo -e "************************************************************************************************" namespace=$(namespace_deploy $environment $language) echo "Sistema gestor de base de datos:" sgbd=$(sgbd_system $environment $namespace) echo "Proyecto en Azure:" azure_project=$(get_azure_project) deploymentVersion=$(get_deployment_version $environment $sgbd) pipeSGBD=$(get_sgbd_pipe $sgbd) instanceAction=$(get_instance_action $namespace) echo "Obteniendo email del propietario de Google Cloud" owner=$(gcloud config get-value core/account) if [[ $environment == "tyson" ]] then DOMAIN_TO_DEPLOY=$TYSON_DOMAIN CLUSTERNAME=$CLUSTERNAME_TYSON else DOMAIN_TO_DEPLOY=$UAT_DOMAIN CLUSTERNAME=$CLUSTERNAME_TIJUANA fi echo "................................................." echo "Configs" echo "environment" $environment echo "serviceName" $serviceName echo "description" $description echo "language" $language echo "namespace" $namespace echo "sgbd" $sgbd echo "deploymentVersion" $deploymentVersion echo "pipeSGBD" $pipeSGBD echo "Instance action" $instanceAction echo "Owner" $owner echo "DOMAIN_TO_DEPLOY" $DOMAIN_TO_DEPLOY echo "CLUSTERNAME" $CLUSTERNAME echo "AZURE PROJECT" $azure_project echo "................................................." echo "" echo "Obteniendo manifiestos" if [[ $environment == "tyson" ]] then get_manifiests_tyson $environment $serviceName $language $namespace $sgbd $owner $deploymentVersion $description rm -r .ci pipe mkdir .ci mkdir .ci/k8s mkdir .ci/pipe mkdir pipe sh setup.sh chmod +x .ci/pipe/*.sh sh .ci/pipe/init_manifiests.sh $serviceName $namespace $azure_project $language rm .ci/pipe/init_manifiests.sh else get_manifiests_tijuana $environment $serviceName $language $namespace $sgbd $owner $deploymentVersion $description rm -r .ci pipe mkdir .ci mkdir .ci/k8s mkdir .ci/pipe mkdir pipe sh setup.sh chmod +x .ci/pipe/*.sh sh .ci/pipe/init_manifiests.sh $serviceName $namespace $azure_project $language rm .ci/pipe/init_manifiests.sh fi rm setup.sh if [ $namespace == "app-web" ] then sed -i "s/\"\/v1/\"\//g" .k8s/virtualService.yaml npm i -D sonarqube-scanner@2.8.0 fi echo "Configuración terminada..."\n