Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

Consider dividing the task into 2 steps so that you can debug each independently. First identify the updates required and store them in arrays ;

#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::Twig; use autodie; use Data::Dumper; my @filename = ('output1.csv', 'output2.csv'); my %file1 = () ; open my $fh, '<', $filename[0]; # using autodie while (<$fh>){ chomp; my ($name,$ip) = split /\s*,\s*/; $file1{$name} = $ip; } close $fh; #%file1 = ( # TEST_1 => '', # TEST_3 => '', # TEST_4 => '', # TEST_2 => '', #); my %file2 = () ; my %ip2name = (); open $fh, '<', $filename[1]; # using autodie while (<$fh>){ chomp; my ($id,$name,$ip) = split /\s*,\s*/; $file2{$name} = [$id,$ip]; $ip2name{$ip} = [$id,$name]; } close $fh; #%file2 = ( # TEST_1 => ['01',''], # TEST_3 => ['02',''], # TEST_5 => ['03',''], #); print Dumper \%file1,\%file2,\%ip2name; # determine updates and additions requires my @updateIP =(); my @updateName=(); my @add = (); foreach my $name (sort keys %file1) { my $ip1 = $file1{$name}; if ( not exists $file2{$name} ){ # check if ip exists if ( not exists $ip2name{$ip1} ){ print "ADD name : '$name' '$ip1'\n"; push @add,[undef,$name,$ip1]; } else { my $id2 = $ip2name{$ip1}[0]; my $name2 = $ip2name{$ip1}[1]; print "UPDATE NAME change id '$id2' name from '$name2' to '$nam +e'\n"; push @updateName,[$id2, $name, $ip1]; } next; } my $ip2 = $file2{$name}[1]; if ($ip1 eq $ip2) { print "MATCHED device '$name', '$ip1'\n"; } else { my $id2 = $file2{$name}[0]; print "UPDATE IP change '$name' id '$id2' ip from '$ip2' to '$ip1' + \n"; push @updateIP,[$id2,$name,$ip1]; } } print Dumper \@add,\@updateIP,\@updateName;

When that is working add on implementing the changes

# read XML template my $xml = XML::Twig->new->parse( \*DATA ); $xml->set_pretty_print('indented_a'); #Create a user agent object my $ua = LWP::UserAgent->new( ssl_opts=> { # SSL_verify_mode => SSL_VERIFY_NONE, verify_hostname => 0,} ); # apply updates my $uri = "https://hostname:9060/ers/config/networkdevice/"; my $header = [ Accept => 'application/ +ml', Content_Type => 'application/ +.1.1+xml; charset=utf-8']; for (@updateIP){ my ($id,$name,$ip) = @$_; print "----- Updating $id, $name to $ip\n"; $xml->root->set_att('name', $name); $xml->get_xpath('//ipaddress',0)->set_text($ip); my $req = HTTP::Request->new('PUT', $uri.$id, $header, $xml->sprint) +; $req->authorization_basic("user", "user"); print $req->as_string; # testing #my $res = $ua->request($req); #if ($res->is_success) { # print $res->status_line, "\n"; #} else { # print $res->status_line, "\n"; #} print "-----\n" } __DATA__ <device name="example"> <ipaddress></ipaddress> </device>

Note, I have only shown the ip updates, the additions and name changes you need to complete yourself


In reply to Re^3: HTTP PUT Request with separate values in csv by poj
in thread HTTP PUT Request with separate values in csv by StayCalm

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2021-09-20 15:15 GMT
Find Nodes?
    Voting Booth?

    No recent polls found