user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 28-10-2014 12:33:12

Linuz
Membre

[Script] Puppet filebucket tools

Bonjour à tous,

Aujourd'hui je vous propose un petit script pour les utilisateurs de Puppet.
Tout d'abord le Filebucket sous Puppet est un système de "backup" où il place les fichiers que Puppet remplace. On va donc pouvoir les parcourir, afficher le contenu ou les restaurer (où on le souhaite).
Les fichiers sont stockés dans une arborescence un peu spéciale basée sur le md5 du fichier. D'où l'utilité d'un script pour se faciliter la vie.
J'utilise la configuration du Filebucket de Puppet par défaut, il stock les fichiers sur l'agent dans /var/lib/puppet/clientbucket.
La partie recherche des fichiers (fonction get_files) n'est pas de moi, elle permettait de sortir une liste de tous les fichiers, je l'ai juste améliorée pour que l'on puisse y faire une recherche.

Le script va vous permettre de :

  1. Rechercher les fichier dans le filebucket (tous, recherche par date / recherche par filepath ou les deux)

  2. Afficher le contenu d'un ou plusieurs fichiers

  3. Restaurer un ou plusieurs fichiers

Et tout ça avec un joli menu big_smile
Je n'ai pas mis de 'clear' au début de chaque menus, tout simplement parce qu'il peut-être utile pour copier le md5 d'avoir le résultat de la recherche sous les yeux (et tous les utilisateurs ne savent pas forcément qu'il y a toujours le scrollback buffer ^^).

Si vous avez des améliorations à apporter n'hésitez pas !

PS : Je n'ai absolument ajouté aucun commentaires pour expliquer mon code, ce que je ferais quand j'aurais un peu plus de temps !


#!/bin/bash
#
# Author: soukki44
#
# This script is used to search files in the Puppet's Filebucket,
# restore them or just print their content.
#
# You can modify this script but please credit if you redistribute
#
# There is not warranty that this script will work for you. The Puppet's
# configuration that has been used is the default one. The filebucket is
# stored on the agent in '/var/lib/puppet/clientbucket'.


# get_files function is used to look for files stored in the filebucket
function get_files() {

  path=$1
  timesearch=$2

  temp_file=/tmp/$$.tmp

  trap "rm -f ${temp_file} >/dev/null 2>&1" EXIT INT

  find $(puppet config print clientbucketdir) -name paths | while read path_file
  do
    md5=$(dirname ${path_file} | awk -F'/' '{printf "%s", $NF}')
    location=$(cat ${path_file} | awk '{ printf "%s", $0 }')
    bucket_time=$(stat --printf="%y" ${path_file})
    printf "%s\t%s\t%s\n" "${bucket_time}" "${md5}" "${location}" >> ${temp_file}
  done

  if [ $path != "none" ]; then
    if [ $timesearch != "none" ]; then
      cat ${temp_file} | sort | grep $path | grep $timesearch
    else
      cat ${temp_file} | sort | grep $path
    fi
  elif [ $timesearch != "none" ];then
    cat ${temp_file} | sort | grep $timesearch
  else
    cat ${temp_file} | sort
  fi


  echo -e "\nTerminé!\n"
  read -p "Appuyer sur une touche pour continuer..."
  menu

}

# Function get_content is used to print the content of a file
function get_content () {

  read -p "Veuillez entrer le md5 du fichier à afficher: " md5
  puppet filebucket get -l -b /var/lib/puppet/clientbucket $md5
  read -r -p "${1:-Voulez-vous en afficher un autre? [y/N]} " response
  case $response in
    [oyOY])
      get_content
      ;;
    *)
      menu
      ;;
  esac
}

# Function restore is used to restore a file
function restore () {


  for i in $(seq 1 ${n}); do
    read -p "Veuillez entrer le md5 du fichier que vous souhaitez restaurer: " md5
    read -p "Veuillez entrer le chemin complet (avec nom du fichier) de restauration (ex /tmp/apache2.conf):  " path
    puppet filebucket restore -l -b /var/lib/puppet/clientbucket $path $md5
  done

  echo -e "\nTerminé!\n"
  read -r -p "${1:-Voulez-vous en restaurer un autre? [y/N]} " response
  case $response in
    [oyOY])
      restore
      ;;
    *)
      printf "\33c"
      menu
      ;;
  esac

}

# Secondary menu for choosing wich way to call the get_files function
function menu_list() {

  printf "\33c"
  echo -e "\n\033[33m*** Recherche dans le Filebucket *** :\033[00m"
  echo -e "\n\033[1;32m 1 -\033[0m Rechercher tous les fichiers"
  echo -e "\033[1;32m 2 -\033[0m Rechercher à partir du chemin d'un fichier"
  echo -e "\033[1;32m 3 -\033[0m Rechercher à partir du chemin d'un fichier et d'une date"
  echo -e "\033[1;32m 9 -\033[0m Retour au menu\n"
  echo "Entrez le numéro correspondant à votre choix: "
  while :
  do
    read CHOIX
    case $CHOIX in
      1)get_files none none;;
      2)
        read -p "Veuillez entrer le chemin complet vers le fichier: " path
        get_files $path none
        ;;
      3)
        read -p "Veuillez entrer le chemin complet vers le fichier: " path
        read -p "Veuillez entrer la date (format yyy-mm-dd): " timesearch
        get_files $path $timesearch
        ;;
      9)
        printf "\33c"
        menu
        ;;
      *)echo "Entrez le numéro correspondant à votre choix: ";;
    esac
  done


}

# Function to exit the script
function quitter() {
  exit
}


# The menu
function menu() {

  echo -e "\n\033[33m*** Que voulez-vous faire ? *** :\033[00m"
  echo -e "\n\033[1;32m 1 -\033[0m Lister les fichiers dans le filebucket (permet de récupérer le md5)"
  echo -e "\033[1;32m 2 -\033[0m Afficher le contenu d'un fichier dans le filebucket (md5 obligatoire)"
  echo -e "\033[1;32m 3 -\033[0m Restaurer un fichier depuis le filebucket (md5 obligatoire)"
  echo -e "\033[1;32m 9 -\033[0m Quitter le script\n"
  echo "Entrez le numéro correspondant à votre choix: "
  while :
  do
    read CHOIX
    case $CHOIX in
      1)menu_list;;
      2)get_content;;
      3)restore;;
      9)quitter;;
      *)echo "Entrez le numéro correspondant à votre choix: ";;
    esac
  done
}

# When we launch the script ( not in menu() because we don't want to print this everytime)
function welcome() {

  printf "\33c"
  echo -e "\n                     \033[1;31m--------------------------------\033[00m "
  echo -e "                    \033[1;31m|    Puppet Filebucket tools     |\033[00m  "
  echo -e "                     \033[1;31m--------------------------------\033[00m \n"
  menu

}

welcome
# eof

Dernière modification par Linuz (29-10-2014 11:22:02)

Hors ligne

#2 28-10-2014 14:58:00

WarLocG
#! modo de compet

Re : [Script] Puppet filebucket tools

Merci pour ta contribution, il y a juste un petit détail qui me gène au niveau du case:

       case $response in
                [yY][oO]|[yY])

j ai pas trop compris ton "[yY][oO]|[yY])", un simple "[oyOY])" n'aurait pas suffit ?

Enfin, comme tu es l'auteur, met toujours ton nom dans le script, genre "#author: Soukki44", enfin tu adaptes. Pour éviter que quelqu'un pompe ton code et réclame que tu n'en es pas l'auteur étant donné que le forum est pleinement accessible, ca vaut toujours la peine de le mettre smile

Bonne continuation.


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

#3 28-10-2014 15:13:02

Linuz
Membre

Re : [Script] Puppet filebucket tools

En effet tu as raison smile . C'était un bout de code que j'ai récupéré d'un vieux script perdu dans mon arborescence tongue C'est modifié merci !
J'ai aussi ajouté le "#author: Soukki44".

Merci du conseil  big_smile

Dernière modification par Linuz (28-10-2014 16:51:50)

Hors ligne

#4 28-10-2014 19:29:52

IceF0x
#! Gourou Linux

Re : [Script] Puppet filebucket tools

Tu peux également remplacer clear par

printf "\33c"

Et profiter du echo -e pour mettre des \n pour éviter des lignes du genre

echo ""

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#5 29-10-2014 11:21:32

Linuz
Membre

Re : [Script] Puppet filebucket tools

IceF0x a écrit :

Tu peux également remplacer clear par

printf "\33c"

Haha je n'utilise même pas les astuces que je donne ^^'.  C'est modifié.

IceF0x a écrit :

Et profiter du echo -e pour mettre des \n pour éviter des lignes du genre

echo ""

En effet, je n'y avais même pas pensé ! Merci .


J'en ai profité pour corriger mon indentation qui était un peu n'importe quoi par 2 espaces.

Dernière modification par Linuz (29-10-2014 12:15:34)

Hors ligne

#6 29-10-2014 19:32:48

IceF0x
#! Gourou Linux

Re : [Script] Puppet filebucket tools

Soukki44 a écrit :

Haha je n'utilise même pas les astuces que je donne ^^'.  C'est modifié.

Oui j'avais trouvé le truc tellement sympa en python que j'ai testé avec bash et printf.


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

Pied de page des forums