Skip to content

Instantly share code, notes, and snippets.

@denoww
Last active June 8, 2023 13:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save denoww/a1acfd75198e743e31e1f6a127244ced to your computer and use it in GitHub Desktop.
Save denoww/a1acfd75198e743e31e1f6a127244ced to your computer and use it in GitHub Desktop.
# How to install
# wget -O - https://gist.githubusercontent.com/denoww/a1acfd75198e743e31e1f6a127244ced/raw | bash -s install
# Para ver exemplos de como usar faça
# $ sc
LIB_DIR="/usr/local/bin"
LIB_PATH="$LIB_DIR/sc"
REGION='us-east-1'
tasks_from_service(){
cluster=$1
svc=$2
arns=$(aws ecs list-tasks --cluster $cluster --service-name $svc | jq -r ".taskArns | join(\" \")")
# lista=$(aws ecs describe-tasks --region $REGION --cluster $cluster --tasks $arns | jq -r ".tasks[].attachments[].details[] | select(.name==\"privateDnsName\").value | select(.name)")
echo $(aws ecs describe-tasks --region $REGION --cluster $cluster --tasks $arns | jq -r ".tasks[].attachments[].details | map( { (.name|tostring): .value } ) | add")
# TASKS=`aws ecs describe-tasks --region $REGION --cluster $cluster --tasks $TASKARN | jq -r ".tasks | map({ taskArn: .taskArn, taskDefinitionArn: .taskDefinitionArn, group: .group })| .[] | select(.group | contains(\"$1\"))"`
}
get_public_ip(){
NET_ID=$1
PUBLIC_IP=$(aws ec2 describe-network-interfaces --network-interface-ids $NET_ID | jq -r '.NetworkInterfaces[].Association.PublicIp')
echo $PUBLIC_IP
}
listar_tasks(){
cluster=$1
svc=$2
_print
_print
_print
_print_points
_print "$svc $cluster"
_print_points
for row in $(echo "$(tasks_from_service $cluster $svc)" | jq -r ' @base64'); do
((idx+=1))
get() {
echo ${row} | base64 --decode | jq -r ".${1}"
}
name=$(get 'privateDnsName')
net_id=$(get 'networkInterfaceId')
MAQ_NET_IDS["$idx"]=$net_id
_print "$idx - $name"
done
}
escolher_maquina(){
tipo_maquina=$1
erp_production_cluster="seucondominio"
erp_staging_cluster="seucondominio-staging"
case $tipo_maquina in
"erp")
listar_tasks $erp_production_cluster "web"
listar_tasks $erp_production_cluster "worker"
listar_tasks $erp_staging_cluster "web"
listar_tasks $erp_staging_cluster "worker"
;;
"channelio")
listar_tasks $erp_production_cluster "channelio"
;;
*)
echo "comando inválido dentro de escolher_maquina"
exit 1
;;
esac
_print
_print
_print_points
read -p 'Digite o numero da máquina: ' MAQ_ESCOLHIDA
}
_print_points(){
_print '.......................................'
}
_print(){
echo $1 >&2
}
escolher_ip(){
# idx=`escolher_maquina`
tipo_maquina=$1
escolher_maquina $tipo_maquina
echo $(get_public_ip ${MAQ_NET_IDS[$MAQ_ESCOLHIDA]})
}
copyfile(){
// filesourcepath=$*
filesourcepath="${*:2}"
tipo_maquina=$1
ip=$(escolher_ip $tipo_maquina)
# inicio decoracao
#
_print
_print_points
_print "Baixando $filesourcepath em $ip para $(pwd)"
_print "Aguarde..."
_print_points
_print
_print
_print
#
# fim decoracao
run="scp -i $HOME/id_rsa_sc_ecs -oStrictHostKeyChecking=no root@$ip:$filesourcepath ."
$run
download_success=$?
if [[ $download_success -eq 0 ]]; then
_print_points
_print "baixado $(pwd)"
_print_points
else
_print "Erro ao baixar!!!!!"
fi
}
run_ssh(){
tipo_maquina=$1
cmd2="${*:2}"
ip=$(escolher_ip $tipo_maquina)
# inicio decoracao
#
_print
_print_points
_print "Entrando em $ip via SSh..."
_print "Aguarde..."
_print_points
_print
_print
_print
#
# fim decoracao
run="ssh -i $HOME/id_rsa_sc_ecs -oStrictHostKeyChecking=no -t root@$ip"
if [ -z "$cmd2" ]; then
# entra direto no ssh sem executar comando nenhum
$run
else
_print_points
echo "Executando $cmd2"
_print_points
$run "bash -ic \"$cmd2\""
fi
}
ssh_cmd(){
cmdcompleto=$*
cmd1=$1
cmd2=$2
rake="bundle exec rake"
rails="bundle exec rails"
case $cmd1 in
"channelio") run_ssh channelio;;
"scc") run_ssh erp $rails c;;
"scdbconsole") run_ssh erp $rails dbconsole;;
"scmigrationstatus") run_ssh erp $rake db:migrate:status;;
"rake") run_ssh erp $rake $cmd2;;
"rails") run_ssh erp $rails $cmd2;;
"copyfile") copyfile erp $cmd2;;
"logs") run_ssh erp tail -f log/production.log;;
"htop") run_ssh erp htop;;
# "scsetupdependents") run_ssh erp $rake sc:db:pg:setup_dependents;;
*) run_ssh erp $cmdcompleto;; #
esac
}
tunnel() {
ip_porta_maquina=$1
tunnelporta=$2
sctunnel_host=sctunnel1.seucondominio.com.br
if [ -z "$tunnelporta" ]; then
_tunnel_portas=$(curl -s --request GET http://${sctunnel_host}:3020/unused_ports?qtd=1 )
tunnelporta=$(echo $_tunnel_portas | jq -r '.portas[0]')
fi
echo "$ip_porta_maquina -> $sctunnel_host:$tunnelporta"
ssh -N -o ServerAliveInterval=20 -i "~/scTunnel.pem" ubuntu@$sctunnel_host -R $tunnelporta:$ip_porta_maquina
}
install() {
sudo wget -O $LIB_DIR/_sc https://gist.githubusercontent.com/denoww/a1acfd75198e743e31e1f6a127244ced/raw;
download_success=$?
echo "downloading new sc"
if [[ $download_success -eq 0 ]]; then
# sucesso ao baixar
sudo rm -f $LIB_PATH
sudo mv $LIB_DIR/_sc $LIB_PATH
sudo chmod 777 $LIB_PATH;
# sudo chmod +x $LIB_PATH;
else
# erro ao baixar
sudo rm -f $LIB_DIR/_sc
echo "Erro ao baixar sc"
fi
}
help(){
_print
_print_points
echo "::: ERP: Como usar? :::"
_print_points
echo " sc ssh"
echo " sc ssh scc"
echo " sc ssh htop"
echo " sc ssh logs"
echo " sc ssh scc"
echo " sc ssh scdbconsole"
echo " sc ssh scmigrationstatus"
echo " sc ssh rake MEUCOMANDO"
echo " sc ssh rails MEUCOMANDO"
echo " sc ssh echo 1"
echo " sc ssh comando qualquer"
echo " sc ssh copyfile /tmp/meu_arquivo"
_print_points
echo "::: channelio :::"
_print_points
echo " sc ssh channelio"
_print_points
echo "::: sctunnel (parecido com ngrok) :::"
_print_points
echo " sc tunnel localhost:3000"
echo " sc tunnel localhost:3000 4444"
echo " sc tunnel 192.168.1.100:3000"
_print_points
echo "::: Para atualizar esse software :::"
_print_points
echo " sc update "
_print_points
# _print_points
# echo "::: :::"
# _print_points
echo
}
# public commands
cmd=$*
cmd="${cmd//$1/}" # regex para remover o primeiro comando do restante
case $1 in
install) install;;
update) install;;
tunnel) tunnel $cmd;;
ssh) ssh_cmd $cmd;;
*) help;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment