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.
Ce code ne m'affiche rien, or si je remplace par:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 open (DUMP,">>/tmp/dump"); foreach $node (<DUMP>) { print "$node"; }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part open (DUMP,"/tmp/dump");
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.
J'espère avoir bien expliqué mon problème, je vous remercie par avance de toute l'aide que vous pourrez m'apporter
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
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 (); }
Partager