IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Ansible : problème de script


Sujet :

Administration système

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut Ansible : problème de script
    Bonjour,

    Je suis débutant avec Ansible et plus généralement en admin système
    Ce matin, j'ai légèrement modifié un script Nagios qui me créait trop de fichier texte.
    Cet après-midi, je suis suis dit que ce serait une bonne idée d'utiliser Ansible pour le déployer, mais je me heurte à un mur. Voici le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
      1 #Task for copying check_fs_readable
      2 ---
      3  - name: Récuperation de la variable Path
      4    shell: "find /usr/ -name check_fs_readable.pl |pwd"
      5    register: plugPath
      6
      7  - name: Récuperation de la variable check_fs_readable
      8    shell: "find /usr/ -name check_fs_readable.pl"
      9    register: plug
     10 
     11  - name: On crée l'état stat
     12    stat: path={{ plug.stdout }}
     13    register: check
     14
     15  - name: Installation du check modifié
     16    copy: src=check_fs_readable.pl dest={{ plugPath.stdout }} owner=nagios
     17    when: check.stat.exists == true
    La condition n'étant pas vérifiée, le script ne copie pas le fichier.
    Si je commente les lignes 7 à 13 et 17, le script est bien copié, mais dans /root
    J'ai beau fouiller les docs, je n'arrive pas à résoudre mon problème.

    Merci de votre aide.

    Vincent

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /usr/ -name check_fs_readable.pl |pwd
    ça a quoi comme but cette commande ?
    Je récupère un ou plusieurs chemin que je redirige vers un outil qui me donne le répertoire courant ?!

    c'est pas ça que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /etc/ -name passwd | xargs dirname
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci de ta réponse.
    Le parc de machine est composé de vieilles gentoo et de debian. Les chemins utilisés pour stocker le plugin diffèrent d'une distribution à l'autre. La commande que j'utilise me permet de stocker dans une variable le chemin d'un fichier connu. En bash en tout cas, puisque la ça n'a pas l'air de fonctionner.
    Je ne connais pas la commande que tu m'indiques. Je vais la tester.

    Merci

    Vincent

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Effectivement, ma commande pose problème. Je suppose que j'obtenais un résultat parce que j'étais déjà dans le répertoire du plugin.

    Merci, je pense que ça va régler déjà mon premier souci.

    Vincent

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    J'ai modifié mon rôle de la sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
      1 #Task for modifying check_fs_readable
      2 ---
      3  - name: Récuperation de la variable Path
      4    shell: "find /usr/ -name check_fs_readable.pl | xargs dirname"
      5    register: plugPath
      6    ignore_errors: true
      7 
      8  - name: On crée l'état stat
      9    stat: path={{ plugPath.stdout }}/check_fs_readable.pl
     10    register: check
     11    ignore_errors: true
     12 
     13  - name: Installation du check modifié
     14    copy: src=check_fs_readable.pl dest={{ plugPath.stdout }} owner=nagios
     15    when: check.stat.exists == True
     16    ignore_errors: true
    Pour l'instant, je suis obligé de placer des "ignore-errors: true" dans le rôle pour le playbook puisse continuer sur les hôtes d'un client dans l'hypothèse où l'hôte ne dispose pas du plugin. Ce n'est pas très élégant, mais ca fonctionne pour le moment.
    Peut-on faire mieux ? C'est à dire que si la première action n'est pas remplie, alors on passe à l'hôte suivant.
    Le gain de temps serait considérable.
    Je pense que les ignore-errors des lignes 11 et 13 ne sont pas obligatoires. Je vérifierai ça demain.

    Merci

    Vincent

  6. #6
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    La logique de ton script me parait améliorable.

    Tu cherches un fichier dans un chemin, alors que tu pourrais tester directement l'existence du fichier en fonction du linux où tu es.
    Détermine ton linux(https://raymii.org/s/tutorials/Ansib...n_version.html), déduis en le chemin où ton fichier doit être, teste l'existence.
    find peut retourner plusieurs lignes de réponses, or toi tu veux un chemin unique.

    Si tu détermines correctement le chemin, tu peux directement copier le fichier vers cette destination (sans le conditionner). Ansible ne fait la mise à jour que s'il y a une différence. Sauf si ta logique est : je ne mets le script que s'il est déjà présent, et c'est que ton script laisse entendre.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci beaucoup de ta réponse.
    Je serais bien embêté sur le plugin existait à deux endroits différents.
    Effectivement, Ansible m'offre la possibilité de tester la distribution et d'agir en fonction. Ca serait beaucoup plus simple, plus propre et plus rapide.
    Malheureusement, à chaque sysadmin ses habitudes. Et je me retrouve avec des répertoires " exotiques " dans lesquels ont été stocké les plugins. Souvent, le chemin est soit /usr/lib/nagios/plugin, mais il peut aussi être /usr/lib64/nagios/plugin.
    J'ai aussi du /usr/lib/nagios/plugin/contrib ou /usr/lib/nagios/plugin/contrib/libexec. Bref....
    Je pourrais copier le plugin toujours au même endroit selon la distrib, mais à ce moment, il faudrait que je modifie les chemins dans nrpe.
    Et tu as raison, je teste la présence du plugin pour ne pas le copier si il n'est pas déjà présent. Je ne sais pas si c'est une bonne tactique, mais je suis parti du principe que s'il n'était pas utilisé, il n'était pas utile d'encombrer le répertoire de plugins.

    Vincent

Discussions similaires

  1. [Tableaux] Problème test script
    Par masseur dans le forum Langage
    Réponses: 6
    Dernier message: 03/12/2005, 18h48
  2. Problème execution script perl
    Par 00sebbe dans le forum Apache
    Réponses: 1
    Dernier message: 29/08/2005, 14h43
  3. [Débutant] Problème de Script
    Par FREMY dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/08/2005, 14h00
  4. [MS-DOS] Problème avec Script
    Par bliml dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 24/05/2005, 13h52
  5. [DOS] Problème de script bat
    Par Philzegore dans le forum Windows
    Réponses: 3
    Dernier message: 04/04/2005, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo