Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com>
---
naming is not my forte - better recommendations welcome ;)

 PVE/API2/Nodes.pm | 72 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
index 715c8563..ae408dcc 100644
--- a/PVE/API2/Nodes.pm
+++ b/PVE/API2/Nodes.pm
@@ -48,6 +48,7 @@ use Digest::MD5;
 use Digest::SHA;
 use PVE::API2::Disks;
 use PVE::DataCenterConfig;
+use PVE::Network;
 use JSON;
 use Socket;
 
@@ -211,6 +212,7 @@ __PACKAGE__->register_method ({
            { name => 'certificates' },
            { name => 'config' },
            { name => 'hosts' },
+           { name => 'addr' },
        ];
 
        return $result;
@@ -2072,6 +2074,76 @@ __PACKAGE__->register_method ({
        return undef;
     }});
 
+__PACKAGE__->register_method ({
+    name => 'get_node_addr',
+    path => 'addr',
+    method => 'GET',
+    proxyto => 'node',
+    permissions => {
+       check => ['perm', '/', [ 'Sys.Audit' ]],
+    },
+    description => "Get IP address(es) of node in various networks.",
+    parameters => {
+       additionalProperties => 0,
+       properties => {
+           node => get_standard_option('pve-node'),
+           cidr => {
+               type => 'string',
+               format => 'CIDR',
+               format_description => 'CIDR',
+               description => 'Extra network for which to retrieve local 
address(es).',
+               optional => 1,
+           },
+       },
+    },
+    returns => {
+       type => 'object',
+       properties => {
+           default => {
+               type => 'string',
+               description => 'Default node IP.',
+               format => 'ip',
+           },
+           migration => {
+               type => 'array',
+               items => {
+                   type => 'string',
+                   description => 'Migration network IPs.',
+                   format => 'ip',
+               },
+               optional => 1,
+           },
+           extra => {
+               type => 'array',
+               items => {
+                   type => 'string',
+                   description => 'Extra network IP(s).',
+                   format => 'ip',
+               },
+               optional => 1,
+           },
+       },
+    },
+    code => sub {
+       my ($param) = @_;
+
+       my $data = {};
+
+       my $default = PVE::Cluster::remote_node_ip($param->{node});
+       $data->{default} = $default if defined($default);
+
+       my $dc_conf = PVE::Cluster::cfs_read_file('datacenter.cfg');
+       if (my $migration_network = $dc_conf->{migration}->{network}) {
+           my $ips = PVE::Network::get_local_ip_from_cidr($migration_network);
+           $data->{migration} = @$ips[0] if scalar($ips) == 1;
+       }
+
+       $data->{extra} = PVE::Network::get_local_ip_from_cidr($param->{cidr})
+           if $param->{cidr};
+
+       return $data;
+    }});
+
 # bash completion helper
 
 sub complete_templet_repo {
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to