execute un script via NIN sur un ensemble de serveurs

Creation: 24 juillet 2009
Mise à jour: 30 juillet 2009
Version: 1.1
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2009 Jean-Louis BICQUELET-SALAÜN

lancement d'un script sur un ensemble de machine via NIM

description

On pense souvent à NIM pour effectuer des sauvegardes et des mksysb de serveurs. Mais NIM peut aussi automatiser le déploiement de scripts sur un ou plusieurs serveurs. Il est ainsi possible de définir plusieurs groupes fonctionnels de serveurs auxquels, en fonction des cas, on va pouvoir appliquer des scripts de personnalisation ou de configuration spécifique.

La procédure présentée, va vous ouvrir un monde d'administration qui vous permettra d'éviter les scripts basés sur rsh, ssh, rsync et autres outils.

procédure

  1. Ecrivez votre script. Celui-ci est à placer dans /NIM/scripts sur le master NIM. On ne peut pas lui passer de paramêtres. Si vous deviez envisager de paramétrer la procédure, il faudrait écrire un script qui générerait ce script là.

    J'ai pris un exemple qui m'a réellement facilité la vie, celui de la création de comptes locaux sur un grand nombre de serveurs. Le script adduser créé des comptes dont seul le nom, l'id, le descriptif et le password change.

    On remarquera au passage l'astuce du chpasswd pour changer un mot de passe.

    Les créations de comptes se font en dur à la fin du script.

    #!/bin/ksh
    #=============================================================
    # adduser via NIM
    #=============================================================
    
    mk_user()
    {
    USER=$1
    UID=$2
    GECOS=$3
    PASS=$4
    
    mkdir -p /home/exploit/$USER
    
    mkuser id=$UID pgrp=staff groups=staff gecos="$GECOS" home=/home/exploit/$USER $USER
    
    chuser  registry=files SYSTEM=compat $USER
    
    chuser loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=0 mi
    nalpha=4 minother=2 mindiff=2 maxrepeats=2 minlen=6 histexpire=0  $USER
    
    echo "$USER:$PASS" | chpasswd
    
    pwdadm -c $USER
    }
    
    ch_user()
    {
    USER=$1
    UID=$2
    GECOS=$3
    PASS=$4
    
    chuser -a gecos=$GECOS $USER
    }
    
    #=============================================================
    # section à remplir :
    #mk_user USER UID GECOS PASSWORD
    #=============================================================
    mk_user dupont 2110 "dupont" nemours
    mk_user paris  2140 "paris" hilton
    mk_user durant 2015 "durant" sortie
    
  2. Définissez un nom de groupe si ça n'a pas déjà été fait:

    #nim -o define -t mac_group -aadd_member=superman -aadd_member=batman -aadd_member=wonderwoman serveurs
    

    Bien sur, si vous ne devez lancer le script que sur une seule machine, vous pouvez utiliser son nom à la place du nom du groupe.

  3. Il faut maintenant définir une ressource script en précisant l'emplacement du script (NIM/scripts/adduser), et un nom de ressource(adduser), puis allouer cette ressource.

    #nim -o define -t script -a server=master  -a location=/NIM/scripts/adduser adduser
    #nim -o allocate -a script=adduser serveurs
    
  4. Lancez l'execution par nim -o cust:

    #nim -o cust serveurs
    +-----------------------------------------------------------------------------+
                          Initiating "cust" Operation
    +-----------------------------------------------------------------------------+
     Allocating resources ...
    
     Initiating the cust operation on machine 1 of 3: superman ...
    
     Initiating the cust operation on machine 2 of 3: batman ...
    
     Initiating the cust operation on machine 3 of 3: wonderwoman ...
    
    +-----------------------------------------------------------------------------+
                          "cust" Operation Summary
    +-----------------------------------------------------------------------------+
     Target                  Result
     ------                  ------
     superman                INITIATED
     batman                  INITIATED
     wonderwoman             INITIATED
    
     Note: Use the lsnim command to monitor progress of "INITIATED"
     targets by viewing their NIM database definition.
    

Le script a été exécuté sur tous les serveurs du groupe défini.