Proyecto

General

Perfil

#!/bin/bash

#Modifica el nombre de un equipo en LDAP
#Ricardo Salgado Cid
#IESO Galisteo
#
#20/03/12 Adaptado a ldaps
#07/10/10 Modificacion para que funcione adecuadamente con los host con los que se uso lwat
#17/09/10 Release incial ()


PASSWORDLDAP=""
#Usa el valor de esta variable como password de ldap en vez de pedirla en cada ocasión.
#Ojo!, utilizar con cuidado

if [ $# -ne 2 ]; then
echo "Uso: $0 nombre_actual nuevo_nombre"
exit
fi

dominio=`hostname -d`
nactual=$1
nnuevo=$2

FICHERO=$nnuevo.$dominio.ldif
if [ -e $FICHERO ]; then
rm $FICHERO
fi

dnactual=$(ldapsearch -xLLL -h ldap -b cn="DHCP Config",dc=instituto,dc=extremadura,dc=es "(&(objectClass=dhcpHost)(cn=$nactual))" dn | perl -p0e 's/\n //g' )


if [ ! "$dnactual" ] ; then
echo "No hay ningun equipo llamado $nactual"
exit 1
fi

if ldapsearch -xLLL -h ldap -b cn="DHCP Config",dc=instituto,dc=extremadura,dc=es "(&(objectClass=dhcpHost)(cn=$nnuevo))" dn | perl -p0e 's/\n //g' > /dev/null ; then
echo "Ya existe un equipo con el nombre $nnuevo"
exit 1
fi


dnnuevo=$(echo $dnactual | sed "s/$nactual/$nnuevo/" )

ip=$(ldapsearch -xLLL -h ldap -b dc="$dominio",ou="hosts",dc=instituto,dc=extremadura,dc=es "(&(|(objectClass=dNSDomain2)(objectClass=dNSDomain))(dc=$nactual))" | grep aRecord: | cut -d" " -f2)
ip1=$(echo $ip | cut -d"." -f1)
ip2=$(echo $ip | cut -d"." -f2)
ip3=$(echo $ip | cut -d"." -f3)
ip4=$(echo $ip | cut -d"." -f4)

echo "$dnactual
changetype: moddn
newrdn: cn=$nnuevo
deleteoldrdn: 1

$dnnuevo
changetype: modify
delete: dhcpStatements

$dnnuevo
changetype: modify
add: dhcpStatements
dhcpStatements: fixed-address $nnuevo

dn: dc=$nactual,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: moddn
newrdn: dc=$nnuevo
deleteoldrdn: 1

dn: dc=$nnuevo,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: modify
replace: associatedDomain
associatedDomain: $nnuevo.$dominio

dn: dc=$ip4,dc=$ip3,dc=$ip2,dc=$ip1,dc=in-addr,dc=arpa,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: modify
replace: pTRRecord
pTRRecord: $nnuevo.$dominio

" > $FICHERO

#Comprobar si el host tiene la entrada extra que añade lwat
#y en ese caso modificarla tambien
entradalwat=$(ldapsearch -xLLL -h ldap -b ou="hosts",dc=instituto,dc=extremadura,dc=es "(&(objectClass=ipHost)(cn=$nactual))" dn | perl -p0e 's/\n //g')

if [ "$entradalwat" ]; then
echo "$entradalwat
changetype: moddn
newrdn: cn=$nnuevo
deleteoldrdn: 1
">> $FICHERO

fi



echo "dn: cn=workstation-hosts, ou=Netgroup,dc=instituto,dc=extremadura,dc=es
changetype: modify
replace: nisNetgroupTriple" >> $FICHERO

ldapsearch -xLLL -h ldap -b ou=Netgroup,dc=instituto,dc=extremadura,dc=es "(cn=workstation-hosts)" | grep nisNetgroupTriple | grep -v "nisNetgroupTriple: ($nactual," | while read triple
do
echo $triple >> $FICHERO
done

echo "nisNetgroupTriple: ($nnuevo,-,-)" >> $FICHERO
if [ "$PASSWORDLDAP" ]; then
ldapmodify -c -x -H ldaps://ldap.$dominio -w$PASSWORDLDAP -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
else
ldapmodify -c -x -H ldaps://ldap.$dominio -W -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
fi


read -p "Intentar eliminar los restos del normbre antiguo en puppet (s/n)?"
if [ $REPLY != "s" ]; then
exit 1
fi
host=$nactual
if [ "$(hostname)" = "servidor" ]; then
puppetca --clean $host.$dominio; rm /var/lib/puppet/yaml/facts/$host.$dominio.yaml; rm /var/lib/puppet/yaml/node/$host.$dominio.yaml
else
echo "Es necesaria la contrseña de root del servidor nfs"
ssh root@servidor "puppetca --clean $host.$dominio; rm /var/lib/puppet/yaml/facts/$host.$dominio.yaml; rm /var/lib/puppet/yaml/node/$host.$dominio.yaml"
fi

(11-11/13)