use Data::Dumper;
use JSON;
-use PVE::JSONSchema;
-
use PVE::Network::SDN::Vnets;
use PVE::Network::SDN::Zones;
use PVE::Network::SDN::Controllers;
return($zone_status, $vnet_status);
}
-sub config {
+sub running_config {
return cfs_read_file($running_cfg);
}
$pending->{$id}->{state} = "changed";
}
}
+ $pending->{$id}->{"pending"} = {} if $pending->{$id}->{state} && !defined($pending->{$id}->{"pending"});
}
foreach my $id (sort keys %{$config_objects}) {
$pending->{$id}->{state} = "changed";
}
}
+ $pending->{$id}->{"pending"} = {} if $pending->{$id}->{state} && !defined($pending->{$id}->{"pending"});
}
return {ids => $pending};
my $nodename = PVE::INotify::nodename();
- my $cfg = PVE::Network::SDN::config();
+ my $cfg = PVE::Network::SDN::running_config();
my $vnets_cfg = $cfg->{vnets};
my $zones_cfg = $cfg->{zones};
my $vnet = PVE::Network::SDN::Vnets::sdn_vnets_config($vnets_cfg, $vnetid);
my $zoneid = $vnet->{zone};
+ my $comments = $vnet->{alias};
+
my $privs = [ 'SDN.Audit', 'SDN.Allocate' ];
next if !$zoneid;
my $zone_config = PVE::Network::SDN::Zones::sdn_zones_config($zones_cfg, $zoneid);
next if defined($zone_config->{nodes}) && !$zone_config->{nodes}->{$nodename};
- $vnets->{$vnetid} = { type => 'vnet', active => '1' };
+ my $ipam = $zone_config->{ipam} ? 1 : 0;
+ my $vlanaware = $vnet->{vlanaware} ? 1 : 0;
+ $vnets->{$vnetid} = { type => 'vnet', active => '1', ipam => $ipam, vlanaware => $vlanaware, comments => $comments };
}
return $vnets;
PVE::Network::SDN::Controllers::reload_controller() if $reload;
}
-
-sub decode_value {
- my ($type, $key, $value) = @_;
-
- if ($key eq 'nodes') {
- my $res = {};
-
- foreach my $node (PVE::Tools::split_list($value)) {
- if (PVE::JSONSchema::pve_verify_node_name($node)) {
- $res->{$node} = 1;
- }
- }
-
- return $res;
- }
-
- return $value;
-}
-
sub encode_value {
my ($type, $key, $value) = @_;
return $value;
}
-1;
+#helpers
+sub api_request {
+ my ($method, $url, $headers, $data) = @_;
+
+ my $encoded_data = to_json($data) if $data;
+
+ my $req = HTTP::Request->new($method,$url, $headers, $encoded_data);
+
+ my $ua = LWP::UserAgent->new(protocols_allowed => ['http', 'https'], timeout => 30);
+ my $proxy = undef;
+
+ if ($proxy) {
+ $ua->proxy(['http', 'https'], $proxy);
+ } else {
+ $ua->env_proxy;
+ }
+
+ $ua->ssl_opts(verify_hostname => 0, SSL_verify_mode => 0x00);
+
+ my $response = $ua->request($req);
+ my $code = $response->code;
+
+ if ($code !~ /^2(\d+)$/) {
+ my $msg = $response->message || 'unknown';
+ die "Invalid response from server: $code $msg\n";
+ }
+
+ my $raw = '';
+ if (defined($response->decoded_content)) {
+ $raw = $response->decoded_content;
+ } else {
+ $raw = $response->content;
+ }
+
+ return if $raw eq '';
+
+ my $json = '';
+ eval {
+ $json = from_json($raw);
+ };
+ die "api response is not a json" if $@;
+
+ return $json;
+}
+
+1;