Sortie de massadmin version 2.3

Posté par (page perso) . Modéré par Christophe Guilloux.
Tags :
14
28
sept.
2010
Ligne de commande
Massadmin est un logiciel libre sous licence GPL permettant de lancer des commandes en parallèle sur un groupe de serveurs de type Unix. Massadmin supporte plusieurs protocoles tels que FTP, SFTP, TELNET, SSH et SCP.

Toutes les commandes non-interactives système sont prises en charge : les commandes doivent donc être lancées avec les paramètres souhaités car l’utilisateur ne pourra pas répondre si un paramètre est demandé après coup (par exemple, un mot de passe).

La version 2.3 corrige plusieurs problèmes de sécurité, ajoute la fonctionnalité "su -" au protocole ssh et fixe le problème de la demande de mot de passe de la commande su sur les systèmes d'exploitation de type BSD.

Exemple d'utilisation : ./massadmin -h "remotesrv.mydom:root:mdpadm" -e 'SSH::/usr/sbin/ether-wake 00\:25\:44\:DA\:43\:BF |:’

L’auteur indique utiliser ce script pour administrer plus de 250 serveurs de type Unix hétérogènes (AIX, SCO, RH Linux, Slackware, Debian, et autres) pour changer par exemple massivement un mot de passe administrateur ou encore compiler un logiciel.
  • # comparaison

    Posté par (page perso) . Évalué à 3.

    Pourquoi utiliser massadmin plutôt que ClusterShell ? https://linuxfr.org/2010/09/24/27412.html

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: comparaison

      Posté par (page perso) . Évalué à 0.

      quelle question ...

      parce que perl est amour alors que python ... :)
    • [^] # Re: comparaison

      Posté par (page perso) . Évalué à 0.

      La liberté d'avoir le choix ?
      • [^] # Re: comparaison

        Posté par (page perso) . Évalué à 6.

        Je dois implémenter une solution de déploiement de binaires sur des dizaines de machines avec arret/redémarrage des serveur primary/backup... C'est donc avec intérêt que j'ai jeté un coup d'oeuil rapide sur les différentes man pages. Pour vous en faire profiter, voici mes notes :
        dish -e "command" host1 host2 
            -g hostfile      script based on except command
        
        massadmin -e cmd_list -h host1,host2...  (perl + require other packages)
        
        taktuk -f machines-file   broadcast exec command
              -m hostname                             (perl + C)
        
        clush -w hostname   command (ClusterShell en python)
             -g group
             -a
        
        dsh -m hostname  command	(en C)
            -g group
            -a
            -f file
        
        pdsh -w host1,host2... command
        
        pssh user@site command
        (bash around ssh, require a proxy deamon on the other hosts ???)
        
        kash    -a        command
        (kanif)  -M host1,host2...
               -n/-w nodes
        
        • [^] # Re: comparaison

          Posté par . Évalué à 3.

          Ton exemple est intéressant, voici ce que je peux te proposer si tu utilises ClusterShell. Ne connaissant pas ton cas en détail, je vais faire qlq suppositions. A corriger en fonction de tes besoins donc.

          En shell, avec les outils de ligne de commandes:

          #!/bin/bash

          BINFILE="/my/bin/file"
          # Il est tres pratique que le gestionnaire de groupe de ClusterShell soit configuré.
          # Dans ce cas, il suffit de donner les noms des groups en question et la liste des
          # machines correspondantes sera utilisé.
          PRIMARYGROUP="@primary"
          BACKUPGROUP="@backup"
          # Si ce n'est pas le cas, il suffit de remplacer par la liste des machines correspondantes

          echo "Copying new version of $BINFILE..."
          clush -S -w $PRIMARYGROUP,$BACKUPGROUP -c $BINFILE || exit 1
          echo "Restarting primary service..."
          clush -S -w $PRIMARYGROUP "service primary restart" || exit 1
          echo "Restarting backup service..."
          clush -S -w $BACKUPGROUP "service primary restart" || exit 1
          exit 0


          En python, en utilisant la bibliothèque,
          #!env python

          import sys
          from ClusterShell.Task import task_self()

          BINFILE = "/my/bin/file"
          PRIMARYGROUP = "@primary"
          BACKUPGROUP = "@backup"

          task = task_self()

          # On prepare la copie
          task.copy(BINFILE, BINFILE, "%s,%s" % (PRIMARYGROUP, BACKUPGROUP))
          # On lance la copie parallele
          task.resume()

          # Si tout c'est bien passé, on continue
          if task.max_retcode() > 0:
          print >>sys.stderr, "Copy failed\n"
          sys.exit(1)

          # On prepare l'exécution des 2 commandes en même temps)
          task.shell("service primary restart", PRIMARYGROUP)
          task.shell("service backup restart", BACKUPGROUP)
          # On redémarre tout en même temps
          task.resume()

          # Si tout c'est bien passé, on continue
          if task.max_retcode() > 0:
          print >>sys.stderr, "Restart failed\n"
          sys.exit(1)

          sys.exit(0)


          ClusterShell est souple, donc il y a différentes façons de faire les choses selon les besoins. On peut travailler plus en détail l'output, l'analyse des résultats. On peut imaginer redémarrer les serveurs que sur les machines qui ont réussit la copie, cela de façon très simple. Ce n'est que quelques exemples. N'hésitez pas à poser des questions si vous voulez en savoir plus.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.