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

Programmation et administration système Perl Discussion :

maching template de conf d'AP


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut maching template de conf d'AP
    Hello,

    j'ai besoin d'aide sur la partit où je compare la conf de l'AP à un template
    en gros, AP cisco 1600, je me connecte en telnet et j'execute un show run, puis je compare à un template de quelques lignes

    excel contient la liste d'ip et recupere les resultats

    je coince sur le "like" ou "substring" multi-ligne
    m/ ne semble pas s'en sortir dans ce cas


    voici le code source réduis là où ça coince
    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
    19
    20
    21
    22
    23
       if($p->ping($IP)) 
        {
            print "Ping $IP succes\n";
            my $session = Net::Telnet::Cisco->new(Host => $IP) or die "Oops, cannot open $IP";
            $session->login('admin', '*****') or die "Oops, cannot connect to $IP";
            my @output = $session->cmd('sh run ssid TEST') or die "Oops, cannot execute telnet command";
     
     
            if ( $output["CMD_INFO"] =~ m/vlan 1/ ) 
            { 
             print "Result: YES\n";
            } 
            else 
            { 
            print "Result: NO\n"; 
            } 
            $session->close;
        }
        else 
        {
               print "Ping $IP Fail!\n";
               @output = "timeout";
        }

    En effet si je m/ sur des mots de la premeire ligne du resultat stocké dans @output cela me met YES, mais si je m/ sur un mot en ligne >2 ça mets NO
    J'ai cherché pas mal de temps déjà, avec grep ou en substituant le \n par rien... je n'y parvient pas.

    Peut etre que vous pourriez m'aider?

    merci
    cordialement
    Julien

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Les tableaux sont indexés par des nombres entiers. Donc, cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( $output["CMD_INFO"] =~ m/vlan 1/ )
    n'est pas correcte, puisque l'index n'est pas numérique. Si tu utilisais les pragmas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    use strict;
    use warnings;
    comme tu devrais toujours le faire pour tout programme de plus d'une ligne, tu aurais eu un warning:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Argument "CMD_INFO" isn't numeric in array element at ...
    te prévenant d'un problème dans ton programme.

    Dans un tel cas, $output["CMD_INFO"] est transformé en $output[0], et, donc, tu récupères toujours uniquement le premier élément du tableau (et donc tu as une reconnaissance uniquement quand la chaîne recherchée est dans le premier élément).

    Il faut donc que tu boucles sur les éléments du tableau, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (@output) {
        print "Result: YES\n" if /vlan \d/;
    }
    L'autre solution est de stocker le résultat de ta commande dans une variable scalaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $output = $session->cmd('sh run ssid TEST') or die "Oops, cannot execute telnet command";
    if ( $output =~ m/vlan 1/ ) { 
        print "Result: YES\n";
    } else { 
        print "Result: NO\n"; 
    }
    Je ne peux pas tester, mais je pense que ça devrait marcher.

    Dans tous les cas, si tu veux des informations complémentaires (ou si ça ne marche pas comme prévu), donne-nous le contenu de la variable @output ou $output selon la solution envisagée.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Super! merci pour ta réponse, je vais regarder de plus pret!
    entre temps je l'ai fais fonctionner avec ça:

    if (grep m/vlan 1/i, @output)

Discussions similaires

  1. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 00h15
  2. Template XHTML
    Par Sylvain James dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 16/06/2003, 21h45
  3. appliquer plusieurs templates
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/04/2003, 16h26
  4. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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