all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: "DERUMIER, Alexandre" <alexandre.derumier@groupe-cyllene.com>
To: "pve-devel@lists.proxmox.com" <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH v2 container] api: network: get interfaces from containers
Date: Tue, 14 Nov 2023 16:43:44 +0000	[thread overview]
Message-ID: <316d54c09c624013ab5d6501710e2fcce9580370.camel@groupe-cyllene.com> (raw)
In-Reply-To: <20230615094333.66179-2-l.nunner@proxmox.com>

Hi,

Any chance to have this commit applied for pve 8.1 ? 

I have a customer who's need this feature.

-------- Message initial --------
De: Leo Nunner <l.nunner@proxmox.com>
Répondre à: Proxmox VE development discussion <pve-
devel@lists.proxmox.com>
À: pve-devel@lists.proxmox.com
Objet: [pve-devel] [PATCH v2 container] api: network: get interfaces
from containers
Date: 15/06/2023 11:43:31

Adds an 'interfaces' endpoint in the API
(/nodes/{node}/lxc/{vmid}/interfaces'), which returns a list of
interface names, together with a MAC, IPv4 and IPv6 address. This list
may be expanded in the future. Note that this is only returned for
*running* containers, stopped containers simply return an empty list.

Signed-off-by: Leo Nunner <l.nunner@proxmox.com>
---
 src/PVE/API2/LXC.pm | 50 +++++++++++++++++++++++++++++++++++++++++++++
 src/PVE/LXC.pm      | 26 +++++++++++++++++++++++
 2 files changed, 76 insertions(+)

diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
index 28d14de..8839105 100644
--- a/src/PVE/API2/LXC.pm
+++ b/src/PVE/API2/LXC.pm
@@ -2510,6 +2510,56 @@ __PACKAGE__->register_method({
 	return PVE::GuestHelpers::config_with_pending_array($conf,
$pending_delete_hash);
     }});
 
+__PACKAGE__->register_method({
+    name => 'ip',
+    path => '{vmid}/interfaces',
+    method => 'GET',
+    protected => 1,
+    permissions => {
+	check => ['perm', '/vms/{vmid}', [ 'VM.Audit' ]],
+    },
+    description => 'Get IP addresses of the specified container
interface.',
+    parameters => {
+	additionalProperties => 0,
+	properties => {
+	    node => get_standard_option('pve-node'),
+	    vmid => get_standard_option('pve-vmid', { completion =>
\&PVE::LXC::complete_ctid }),
+	},
+    },
+    returns => {
+	type => "array",
+	items => {
+	    type => 'object',
+	    properties => {
+		name => {
+		    type => 'string',
+		    description => 'The name of the interface',
+		    optional => 0,
+		},
+		hwaddr => {
+		    type => 'string',
+		    description => 'The MAC address of the interface',
+		    optional => 0,
+		},
+		inet => {
+		    type => 'string',
+		    description => 'The IPv4 address of the
interface',
+		    optional => 1,
+		},
+		inet6 => {
+		    type => 'string',
+		    description => 'The IPv6 address of the
interface',
+		    optional => 1,
+		},
+	    }
+	},
+    },
+    code => sub {
+	my ($param) = @_;
+
+	return PVE::LXC::get_interfaces($param->{vmid});
+    }});
+
 __PACKAGE__->register_method({
     name => 'mtunnel',
     path => '{vmid}/mtunnel',
diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
index a531ea5..611f5c2 100644
--- a/src/PVE/LXC.pm
+++ b/src/PVE/LXC.pm
@@ -1036,6 +1036,32 @@ sub hotplug_net {
     PVE::LXC::Config->write_config($vmid, $conf);
 }
 
+sub get_interfaces {
+    my ($vmid) = @_;
+
+    my $pid = eval { find_lxc_pid($vmid); };
+    return if $@;
+
+    my $output;
+    # enters the network namespace of the container and executes 'ip
a'
+    run_command(['nsenter', '-t', $pid, '--net', '--', 'ip', '--json',
'a'],
+	outfunc => sub { $output .= shift; });
+
+    my $config = JSON::decode_json($output);
+
+    my $res;
+    for my $interface ($config->@*) {
+	my $obj = { name => $interface->{ifname} };
+	for my $ip ($interface->{addr_info}->@*) {
+	    $obj->{$ip->{family}} = $ip->{local} . "/" . $ip-
>{prefixlen};
+	}
+	$obj->{hwaddr} = $interface->{address};
+	push @$res, $obj
+    }
+
+    return $res;
+}
+
 sub update_ipconfig {
     my ($vmid, $conf, $opt, $eth, $newnet, $rootdir) = @_;
 


  reply	other threads:[~2023-11-14 16:44 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-15  9:43 [pve-devel] [PATCH v2 container manager] Show dynamic container IPs in GUI Leo Nunner
2023-06-15  9:43 ` [pve-devel] [PATCH v2 container] api: network: get interfaces from containers Leo Nunner
2023-11-14 16:43   ` DERUMIER, Alexandre [this message]
2023-11-14 17:00     ` Thomas Lamprecht
2023-11-14 17:34       ` DERUMIER, Alexandre
2023-11-14 18:23   ` [pve-devel] applied: " Thomas Lamprecht
2023-06-15  9:43 ` [pve-devel] [PATCH v2 manager 1/2] lxc: show dynamically assigned IPs in network tab Leo Nunner
2023-11-15 20:51   ` DERUMIER, Alexandre
2023-06-15  9:43 ` [pve-devel] [PATCH v2 manager 2/2] lxc: show IPs in summary view Leo Nunner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=316d54c09c624013ab5d6501710e2fcce9580370.camel@groupe-cyllene.com \
    --to=alexandre.derumier@groupe-cyllene.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal