>> Apresentação:

Fala galera, hoje vou postar um script para fazer backup  do rancher no filesystem e no GIT. Bom, resolvi desenvolver o script pois estava com muitos problemas de esquecimento, sempre que eu ou o artiqueto de sistemas criava um stack eu tinha que adicionar os composes no git na mão, e isso estava ficando bem chato, então resolvi automatizar.

>>Pré-requisitos:

  1. linux
  2. git instalado e repositório local configurado e pronto para fazer pull das branches
  3. json_reformat
  4. curl
  5. wget

Para que o script funcione corretamente é necessário substituir as credenciais do RANCHER e do GIT. O primeiro script faz o download dos arquivos no S.O:

#!/bin/bash

DIR="/Rancher-compose"
rm -rf $DIR/*

#USER is Rancher API User
USER="UUUUUUUUUUUUUUU"

#PASS is Rancher API Password, or key
PASS="PPPPPPPPPPPPPPPPPPPPPPPP"

#KEY is a combination of USER+PASS
KEY="$USER:$PASS"

#rancher ip and rancher port
SOCKET="RANCHER_IP:RANCHER_PORT"

#ENVs will create a list with all rancher environments
ENVs=$(curl -s -XGET -u $KEY http://$SOCKET/v1/projects | json_reformat  | egrep '\bid\b' | awk -F: '{print $2}' | tr -d '",')

#DATE will set a branch name, so we have a branch name based in timestamp
DATE=$(date +%d%m%Y%k%M)

#BRANCHKEEP is the number of branches what you need keep
BRANCHKEEP=4
mkdir -p "$DIR"

for i in `echo $ENVs`
do
		#ENVNAME we take a ENV id and get name, to create a environment directory with human readable name
        ENVNAME=$(curl -s -XGET -u $KEY http://$SOCKET/v2-beta/projects/$i | json_reformat  | grep name | awk -F: '{print $2}' | tr -d '",' | sed -e 's@ @@g')

		#print ENVNAME
        echo $ENVNAME
        echo " "

		#STACKs make a list with all stacks id from each environment
        STACKs=$(curl -s -XGET -u $KEY http://$SOCKET/v2-beta/projects/$i/stacks | json_reformat | grep -b1 '"type": "stack"' | grep id | awk '{print $3}'  | tr -d '",' | sed -e 's@ @@g')

        for x in `echo $STACKs`
        do
				#STACKNAME, take a STACK name from stack id, to create a stack directory with human readable name
                STACKNAME=$(curl -s -XGET -u $KEY http://$SOCKET/v2-beta/projects/$i/stacks/$x | json_reformat | egrep '"name"' | awk -F: '{print $2}' | tr -d '",' | sed -e 's@ @@g' )
                #create directories
				mkdir  -p "$DIR/$ENVNAME/$STACKNAME"
                #download .zip compose
				wget -q --user=$USER --password=$PASS http://$SOCKET/v2-beta/projects/$i/stacks/$x/composeconfig -P $DIR/$ENVNAME/$STACKNAME
                #unzip files
				unzip -q -o $DIR/$ENVNAME/$STACKNAME/composeconfig -d $DIR/$ENVNAME/$STACKNAME
                #remove ziped files
				rm -rf $DIR/$ENVNAME/$STACKNAME/composeconfig
				#print stackname
                echo $STACKNAME
done
        echo -e '\n\n'
done

Para Gerar uma Branch e fazer o pull no git, basta adicionar o segundo
script no final do primeiro script:

cd $DIR

git add --all

git commit -m "$DATE"

if [ $? == 0 ];then
       git checkout -b $DATE
       git add --all
       git commit -m "$DATE"
       git push -u origin $DATE
else
       echo "no changes"
fi
#at LASTBRANCHES you need set your git hub project id, im my case it is 12
LASTBRANCHES=$(curl  -XGET -s --header 'PRIVATE-TOKEN: XXXXXXXXXXXXXXX' http://git.server.org/api/v4/projects/12/repository/branches | json_reformat   | egrep '\bname\b' | awk '{print $2}' | tr -d '",' | egrep -v '(master|stable)' | sort | tac | tail -n+$BRANCHKEEP)
echo $LASTBRANCHES
for y in `echo $LASTBRANCHES`
do
     git push  origin --delete $y
done

Agora basta agendar o script para rodar quando for necessário.
Por enquanto é isso!

se tiver dúvidas pode me chamar por email.

Abraços e até mais!!!