Script Despliegue configuración

De jagfloriano.com
Ir a la navegaciónIr a la búsqueda

Ejemplo de script Bash: despliegue de configuración por servidor[editar]

Objetivo del script[editar]

Este script es un ejemplo didáctico cuyo objetivo es explicar distintas lógicas habituales en scripts de administración Linux:

  • Iterar sobre ficheros locales
  • Extraer información a partir del nombre del fichero
  • Verificar conectividad con servidores remotos
  • Ejecutar comandos remotos por SSH
  • Copiar ficheros con SCP
  • Tomar decisiones en función del sistema operativo remoto

El caso práctico simula el despliegue de un fichero de configuración (collectd.conf) en múltiples servidores.


Código del script[editar]

#!/bin/bash

FICHEROS=$(ls -lrtaR ./*/ | awk '{ if ( $1 !~ /^d/  ) print $9 }' | grep .conf)
FECHA=$(date '+%F.%H:%M')

for fichero in $FICHEROS; do
	rutafichero=$(find ./ -name ${fichero})
	servidor=$(echo $fichero|  cut -d "." -f 1)
	
	echo -e "Pinging ${servidor}\n"
	porcent=$(ping -c 2 $servidor | tail -2 | head -1 | cut -d " " -f 6 |  sed 's/.$//')
	
		rhversion=$(ssh -q ${servidor} "cat /etc/redhat-release | grep 7. | wc -l")
	
      	if [ $porcent -eq 0 ]; then
		echo -e "Ping OK\n"
		echo -e "Backing up file..."
		ssh -q $servidor "sudo cp /etc/collectd.conf /etc/collectd.conf.${FECHA}"
		echo -e "sudo cp /etc/collectd.conf /etc/collectd.conf.${FECHA}"
		echo -e "Copying collectd.conf to server..."
		scp -q ${rutafichero} ${servidor}:/tmp/collectd.conf 
		ssh -q $servidor "sudo cp /tmp/collectd.conf /etc/collectd.conf"
		echo -e "scp ${rutafichero} ${servidor}:/tmp/collectd.conf"
			
		echo -e "Reloading service with new config"
		if [ $rhversion -eq 0 ]; then
			ssh -q $servidor "sudo service collectd reload"
		else
			ssh -q $servidor "sudo systemctl restart collectd.service"
		fi
	fi 
	
done;