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

Langage Perl Discussion :

Modification d'un retour par un autre


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur Sécurité et Réseau
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur Sécurité et Réseau

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut Modification d'un retour par un autre
    Bonjour,

    Dans un premier temps, je tiens à annoncer que je peu PERL

    Pour les besoin de mon client, je dois faire une modif sur un script en PERL

    Le code en qestion

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    sub run {
        my ($self, %options) = @_;
        $self->{snmp} = $options{snmp};
     
        my $vridout = '';
        my $oid_cHsrpGrpStandbyState = ".1.3.6.1.4.1.9.9.106.1.2.1.1.15";    # HSRP Oper Status
        my $oid_cHsrpGrpEntryRowStatus = ".1.3.6.1.4.1.9.9.106.1.2.1.1.17";   # HSRP Admin Status
     
        my $results = $self->{snmp}->get_multiple_table(oids => [
                                                                { oid => $oid_cHsrpGrpStandbyState },
                                                                { oid => $oid_cHsrpGrpEntryRowStatus },
                                                                ],
                                                       nothing_quit => 1);
     
        $self->{output}->output_add(severity => 'OK',
                                    short_msg => sprintf("Router is in its expected state : '%s'", $self->{option_results}->{role}));
        foreach my $oid (keys %{$results->{$oid_cHsrpGrpStandbyState}}) {
            $oid =~ /(\d+\.\d+)$/;
            my $vrid = $1 ;
     
            my $operState = $results->{$oid_cHsrpGrpEntryRowStatus}->{$oid_cHsrpGrpEntryRowStatus . "." . $vrid};
            my $adminState = $results->{$oid_cHsrpGrpStandbyState}->{$oid};
     
            $self->{output}->output_add(long_msg => sprintf("[Vrid : %s] [Admin Status is '%s'] [Oper Status is '%s']",
                                                            $vrid, $map_states{$adminState}, $map_row_status{$operState}));
     
            if ($map_row_status{$operState} !~ /^active$/i) {
                $self->{output}->output_add(severity => 'CRITICAL',
                                                                short_msg => sprintf("VRID %s operational state is '%s'", $vrid, $map_row_status{$operState}));
            }
     
            if (($self->{option_results}->{role} eq 'primary' && $map_states{$adminState} !~ /^active$/) ||
                ($self->{option_results}->{role} eq 'secondary' && $map_states{$adminState} !~ /^standby$/)) {
                $vridout .= sprintf("(VRID %s is '%s')", $vrid, $map_states{$adminState});
            }
        }
     
        if ($vridout ne '') {
            $self->{output}->output_add(severity => 'CRITICAL',
                                        short_msg => sprintf("%s - Router isn't in the expected state (%s)", $vridout, $self->{option_results}->{role}));
        }
     
        $self->{output}->display();
        $self->{output}->exit();
    }
     
    1;
    Le retours que j'ai


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Vrid : 151126340.324] [Admin Status is 'active'] [Oper Status is 'active']
    [Vrid : 151126353.337] [Admin Status is 'active'] [Oper Status is 'active']
    [Vrid : 151126333.317] [Admin Status is 'active'] [Oper Status is 'active']
    [Vrid : 151126362.346] [Admin Status is 'active'] [Oper Status is 'active']
    [Vrid : 151126346.330] [Admin Status is 'active'] [Oper Status is 'active']
    Mon soucis est que normalement dans Vrid on ne devrait avoir que les 3ou4 chiffres après le point. Ex : 324

    Ma question est "Comment faire pour dans le retour ne garder que les 3 ou 4 chiffres, mais conserver l'intégralité lors du traitement SNMP

    Merci par avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 4
    Par défaut
    Bonjour,

    je ne suis pas un pro de Perl, mais dans ton cas j'utiliserai la commande split pour separer ce qu'il y a avant et apres le point.

    https://perldoc.perl.org/functions/split.html

  3. #3
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut
    Hello ,

    tu remplaces :
    par :

  4. #4
    Membre éprouvé
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Par défaut
    Bonjour

    Pour ne pas modifier le fonctionnement, mais seulement l'affichage (stdout) je ferai plutôt comme ça:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    sub run {
        my ($self, %options) = @_;
        $self->{snmp} = $options{snmp};
     
        my $vridout = '';
        my $oid_cHsrpGrpStandbyState = ".1.3.6.1.4.1.9.9.106.1.2.1.1.15";    # HSRP Oper Status
        my $oid_cHsrpGrpEntryRowStatus = ".1.3.6.1.4.1.9.9.106.1.2.1.1.17";   # HSRP Admin Status
     
        my $results = $self->{snmp}->get_multiple_table(oids => [
                                                                { oid => $oid_cHsrpGrpStandbyState },
                                                                { oid => $oid_cHsrpGrpEntryRowStatus },
                                                                ],
                                                       nothing_quit => 1);
     
        $self->{output}->output_add(severity => 'OK',
                                    short_msg => sprintf("Router is in its expected state : '%s'", $self->{option_results}->{role}));
        foreach my $oid (keys %{$results->{$oid_cHsrpGrpStandbyState}}) {
            $oid =~ /(\d+\.\d+)$/;
            my $vrid = $1 ;
     
            my $vrid_print = $vrid;
               $vrid_print =~ /\d+\.(\d+)$/;
     
            my $operState = $results->{$oid_cHsrpGrpEntryRowStatus}->{$oid_cHsrpGrpEntryRowStatus . "." . $vrid};
            my $adminState = $results->{$oid_cHsrpGrpStandbyState}->{$oid};
     
            $self->{output}->output_add(long_msg => sprintf("[Vrid : %s] [Admin Status is '%s'] [Oper Status is '%s']",
                                                            $vrid_print, $map_states{$adminState}, $map_row_status{$operState}));
     
            if ($map_row_status{$operState} !~ /^active$/i) {
                $self->{output}->output_add(severity => 'CRITICAL',
                                                                short_msg => sprintf("VRID %s operational state is '%s'", $vrid_print, $map_row_status{$operState}));
            }
     
            if (($self->{option_results}->{role} eq 'primary' && $map_states{$adminState} !~ /^active$/) ||
                ($self->{option_results}->{role} eq 'secondary' && $map_states{$adminState} !~ /^standby$/)) {
                $vridout .= sprintf("(VRID %s is '%s')", $vrid_print, $map_states{$adminState});
            }
        }
     
        if ($vridout ne '') {
            $self->{output}->output_add(severity => 'CRITICAL',
                                        short_msg => sprintf("%s - Router isn't in the expected state (%s)", $vridout, $self->{option_results}->{role}));
        }
     
        $self->{output}->display();
        $self->{output}->exit();
    }
     
    1;
    Mais ce n'est surement pas la meilleure méthode.

    EDIT :
    explication:

    1) création d'une variable $vrid_print qui contient la partie décimale de la variable $vrid. (ligne 21 & 22)

    2) remplacement de la variable $vrid par $vrid_print dans les lignes: 28, 32, 37

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur Sécurité et Réseau
    Inscrit en
    Mai 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur Sécurité et Réseau

    Informations forums :
    Inscription : Mai 2012
    Messages : 40
    Par défaut
    Bonjour,

    Merci pour vos retours, j'ai trouvé la soluce.

    L'approche de Puppet_Master m'a bien aider. Malgré la proposition, elle ne fonctionnait pas.
    Je pensais que le souci était côte regex et là, j'ai trouvé ce générateur https://regex101.com/.

    Quand j'ai trouvé la regex, j'ai utilisé le générateur de code proposé

    Cela à donner la finalité suivant :

    ligne 21 à 23

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    sub run {
        my ($self, %options) = @_;
        $self->{snmp} = $options{snmp};
     
        my $vridout = '';
        my $oid_cHsrpGrpStandbyState = ".1.3.6.1.4.1.9.9.106.1.2.1.1.15";    # HSRP Oper Status
        my $oid_cHsrpGrpEntryRowStatus = ".1.3.6.1.4.1.9.9.106.1.2.1.1.17";   # HSRP Admin Status
     
        my $results = $self->{snmp}->get_multiple_table(oids => [
                                                                { oid => $oid_cHsrpGrpStandbyState },
                                                                { oid => $oid_cHsrpGrpEntryRowStatus },
                                                                ],
                                                       nothing_quit => 1);
     
        $self->{output}->output_add(severity => 'OK',
                                    short_msg => sprintf("Router is in its expected state : '%s'", $self->{option_results}->{role}));
        foreach my $oid (keys %{$results->{$oid_cHsrpGrpStandbyState}}) {
            $oid =~ /(\d+\.\d+)$/;
            my $vrid = $1;
     
            my $vrid_regex = qr/\d+\./mp;
            my $vird_subst= '';
            my $vrid_print = $vrid =~ s/$vrid_regex/$vird_subst/rg;
     
            my $operState = $results->{$oid_cHsrpGrpEntryRowStatus}->{$oid_cHsrpGrpEntryRowStatus . "." . $vrid};
            my $adminState = $results->{$oid_cHsrpGrpStandbyState}->{$oid};
     
            $self->{output}->output_add(long_msg => sprintf("[Vrid : %s] [Admin Status is '%s'] [Oper Status is '%s']",
                                                            $vrid_print, $map_states{$adminState}, $map_row_status{$operState}));
     
            if ($map_row_status{$operState} !~ /^active$/i) {
                $self->{output}->output_add(severity => 'CRITICAL',
                                                                short_msg => sprintf("VRID %s operational state is '%s'", $vrid_print, $map_row_status{$operState}));
            }
     
            if (($self->{option_results}->{role} eq 'primary' && $map_states{$adminState} !~ /^active$/) ||
                ($self->{option_results}->{role} eq 'secondary' && $map_states{$adminState} !~ /^standby$/)) {
                $vridout .= sprintf("(VRID %s is '%s')", $vrid_print, $map_states{$adminState});
            }
        }
     
        if ($vridout ne '') {
            $self->{output}->output_add(severity => 'CRITICAL',
                                        short_msg => sprintf("%s - Router isn't in the expected state (%s)", $vridout, $self->{option_results}->{role}));
        }
     
        $self->{output}->display();
        $self->{output}->exit();
    }
     
    1;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/12/2013, 12h41
  2. Réponses: 2
    Dernier message: 24/06/2010, 22h04
  3. WPF et modification interface par un autre thread comme les WF ?
    Par Yogy dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 04/03/2009, 18h04
  4. [CS3] Swaper un div par un autre aller-retour
    Par Kidkodak57 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 14/01/2009, 16h06
  5. [JCombobox] modif d'une jcombobox par rapport à une autre
    Par The Wretched dans le forum Composants
    Réponses: 2
    Dernier message: 21/03/2005, 11h35

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