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) = @_;
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox