http://qs321.pair.com?node_id=1215157


in reply to Re^3: HTTP PUT Request with separate values in csv
in thread HTTP PUT Request with separate values in csv

One more question
I want to expand this Service with DELETE request
In this case my output2.csv should have this look:

output2.csv (id,name,description,ip) - Secondary System

01,TEST_1,,10.56.7.80 02,TEST_2,bla,10.57.80.9 03,TEST_3,,10.60.251.9

output1.csv (name,ip) - Primary System
TEST_1,10.56.7.80 TEST_6,10.66.251.9 TEST_5,10.66.81.9

I should check, if there is device in Secondary System, that absent in Primary System with out description.
In my case thist is TEST_3
I should delete such devices
I've tried to do it with the previous example, but I do not know perl really good.....

#!/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; my %file2 = () ; my %ip2name = (); open $fh, '<', $filename[1]; # using autodie while (<$fh>){ chomp; my ($id,$name,$description,$ip) = split /\s*,\s*/; $file2{$name} = [$id,$ip]; # $ip2name{$ip} = [$id,$name]; } close $fh; # determine updates and additions requires my @delete =(); foreach my $name (sort keys %file2) { my $ip1 = $file2{$name}; if ( not exists $file1{$name} ){ # check if ip exists if ( $description=null ){ my $id = $ip2name{$ip1}; print "DELETE name : '$name'\n"; push @delete,[$id,$name,$description,$ip] } } } my $ua = LWP::UserAgent->new( ssl_opts=> { # SSL_verify_mode => SSL_VERIFY_NONE, verify_hostname => 0,} ); for (@delete){ my ($id,$name,$description,$ip1) = @$_; my $uri="https://hostname:9060/ers/config/networkdevice/$id"; my $req = HTTP::Request->new('DELETE', $uri, [Accept=>'application/vnd.com.cisco.ise.network.networkdevice.1.1 ++xml', Content_Type=>'application/vnd.com.cisco.ise.network.networkdevic +e.1.1+xml; charset=utf-8']); $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"; } } }

There is no Problem this the Server, when I'm doing multiply DELETE separately
I think my promlem is here:

foreach my $name (sort keys %file2) { my $ip1 = $file2{$name}; if ( not exists $file1{$name} ){ # check if ip exists if ($description=null){ my $id = $ip2name{$ip1}; print "DELETE name : '$name'\n"; push @delete,[$id,$name,$description,$ip] } }

Replies are listed 'Best First'.
Re^5: HTTP PUT Request with separate values in csv
by poj (Abbot) on May 24, 2018 at 15:27 UTC

    Try

    #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use XML::Twig; use autodie; use Data::Dumper; my @filename = ('output1.csv', 'output2.csv'); #TEST_1,10.56.7.80 #TEST_6,10.66.251.9 #TEST_5,10.66.81.9 my %file1 = () ; open my $fh, '<', $filename[0]; # using autodie while (<$fh>){ chomp; my ($name,$ip) = split /\s*,\s*/; $file1{$name} = $ip; } close $fh; #01,TEST_1,,10.56.7.80 #02,TEST_2,bla,10.57.80.9 #03,TEST_3,,10.60.251.9 my %file2 = () ; open $fh, '<', $filename[1]; # using autodie while (<$fh>){ chomp; my ($id,$name,$description,$ip) = split /\s*,\s*/; $file2{$name} = [$id,$description,$ip]; } close $fh; # determine deletes requires my @delete = (); foreach my $name (sort keys %file2) { if ( not exists $file1{$name} ){ # check if description exists my $id = $file2{$name}[0]; my $description = $file2{$name}[1] || ''; my $ip = $file2{$name}[2]; if ( $description eq '' ){ print "DELETE name : '$name'\n"; push @delete,[$id,$name,$description,$ip] } } } print Dumper \@delete;
    poj