Problème lecture fichier en redirection avec foreach
Bonjour,
je vais vous expliquer brièvement ce que je cherche a faire:
j'ai un dump des noeuds contenu dans une application, a chaque lancement du script, je voudrais qu'il vérifie si les noeuds qui étaient présent dans l'ancien dump le sont toujours ou si ils ont été supprimés. Mon problème vient du fait que mon fichier est en redirection (>>), ce qui pose grandement problème a ma boucle foreach apparemment.
Code:
1 2 3 4 5
|
open (DUMP,">>/tmp/dump");
foreach $node (<DUMP>) {
print "$node";
} |
Ce code ne m'affiche rien, or si je remplace par:
Code:
open (DUMP,"/tmp/dump");
La aucun problème j'ai bien le contenu du tableau qui est affiché. Mon problème est que ce fichier DUMP est rempli a chaque itération du script avec une nouvelle entrée.
Je vous met l'intégralité de mon script au cas ou vous me trouviez une solution détournée :)
PS: en rouge les lignes dont il est question plus haut.
Code:
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| #!/bin/perl
## Script argument waited:
## 1st argument: IP of NNM Server
## 2nd argument: Site name (ex C2x or C4)
$NNM_IP=$ARGV[0];
$site=$ARGV[1];
open (LOG,">>/tmp/NNMImport.log");
print LOG "$date";
open (DUMP,">>/tmp/dump");
# get NNM nodes
@file=`opcdeploy -cmd "D:\\HP\\NNM\\nonOV\\perl\\a\\bin\\perl D:\\HP\\NNM\\bin\\nnmtopodump.ovpl -type node" -node $NNM_IP`;
#get OM nodes
@file2=`opcnode -list_nodes | grep Name | awk '{print\$3}'`;
#define table for existing OM node
foreach $node (@file2) {
$node_exist[$node]->{_exist}=1;
}
# parse NNM node results and insert nodes
foreach $line (@file){
if ($line =~ /<name>(.*)</) {
$node_name=$1;
print DUMP "$node_name\n";
}
if ($line =~ /<shortname>(.*)</) {
$node_label=$1;
}
if ($line =~ /<deviceCategory>(.*)</) {
$node_type=$1;
if ($node_type eq "Other"){
if (($systobjectID eq ".1.3.6.1.4.1.236.30.2.2")||($systobjectID eq "PELCO")){
$layout_group="$site Camera";
$node_group="$site Camera";
}
else {
$layout_group="$site Other";
$node_group="$site Other";
}
}
if ($node_type eq "Switch"){
$layout_group="$site Switch";
$node_group="$site Switch";
}
if ($node_type eq "Server"){
$layout_group="$site Server";
$node_group="$site Server";
}
if (($node_type eq "Computer")||($node_type eq "Workstation")){
$layout_group="$site Workstation";
$node_group="$site Workstation";
}
if ($node_type eq "Printer"){
$layout_group="$site Printer";
$node_group="$site Printer";
}
}
if ($line =~ /<systemObjectId>(.*)</) {
$systobjectID=$1;
}
if ($line =~ /<\/node>/) {
# a new node iteration has been covered place it in OM node node bank
&insert_or_move_node();
}
}
# now control if nodes have been suppresed from NNM and delete them from OM
#to be implemented
# Add node function
sub add_node {
print "\tadd node $node_name\n";
`opcnode -add_node node_name=$node_name node_label=$node_label net_type=NETWORK_IP mach_type=MACH_BBC_OTHER_IP group_name='$node_group' layout_group='$layout_group'`;
}
# Move node function
sub move_node {
print "\tmove node $node_name\n";
`opcnode -move_nodes node_list='$node_name' layout_group='$layout_group'`;
`opcnode -deassign_nodes node_name='$node_name' group_name='$site Other' net_type=NETWORK_IP `;
`opcnode -assign_nodes node_name='$node_name' group_name='$node_group' net_type=NETWORK_IP `;
}
# Delete nodes
sub delete_node {
foreach $node (<DUMP>) {
print "$node";
$node_to_supress = print (grep {/'$node'/} @file);
if ($node_to_supress eq "") {
`opcnode -del_node node_name=$node net_type=NETWORK_IP`;
}
}
}
# insert or move node function
#if node already exist move it in appropriate node group
#else add it in OM nodebank
sub insert_or_move_node {
print "insert or move node : $node_name\n";
if ($node_exist[$node]->{_exist}) {
&move_node ();
}
else {
&add_node ();
}
&delete_node ();
} |
J'espère avoir bien expliqué mon problème, je vous remercie par avance de toute l'aide que vous pourrez m'apporter :)