feat: display per-VM/LXC guest IPs in table rows
- Fetch IPs from /status/guest API for running VMs/LXCs (requires guest agent) - IPs displayed below the name column in the table - Gracefully handles missing guest agent (quietly skips) - Backlog: mark Per-VM IP Addresses as done Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { getNodes, getLXC } from '@/lib/proxmox';
|
||||
import { getNodes, getLXC, getGuestIPs } from '@/lib/proxmox';
|
||||
|
||||
const PROXMOX_WEB_URL = process.env.PROXMOX_WEB_URL || process.env.PROXMOX_API_URL?.replace('/api2/json', '');
|
||||
const PROXMOX_CONSOLE_TOKEN = process.env.PROXMOX_CONSOLE_TOKEN || process.env.PROXMOX_TOKEN_ID;
|
||||
|
||||
/** @param {import('next').Request} _req */
|
||||
export async function GET(_req) {
|
||||
@@ -13,13 +12,20 @@ export async function GET(_req) {
|
||||
for (const node of nodes) {
|
||||
try {
|
||||
const lxcs = await getLXC(node.name);
|
||||
allLXC.push(
|
||||
...lxcs.map((lxc) => ({
|
||||
for (const lxc of lxcs) {
|
||||
let ips = [];
|
||||
if (lxc.status === 'running') {
|
||||
try {
|
||||
ips = await getGuestIPs(node.name, lxc.vmid, 'lxc');
|
||||
} catch { /* guest agent not available */ }
|
||||
}
|
||||
allLXC.push({
|
||||
...lxc,
|
||||
node: node.name,
|
||||
consoleUrl: `${PROXMOX_WEB_URL}/?console=lxc&vmid=${lxc.vmid}&node=${encodeURIComponent(node.name)}&resize=scale&xtermjs=1`,
|
||||
})),
|
||||
);
|
||||
ips,
|
||||
});
|
||||
}
|
||||
} catch { /* skip node */ }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { getNodes, getVMs } from '@/lib/proxmox';
|
||||
import { getNodes, getVMs, getGuestIPs } from '@/lib/proxmox';
|
||||
|
||||
const PROXMOX_WEB_URL = process.env.PROXMOX_WEB_URL || process.env.PROXMOX_API_URL?.replace('/api2/json', '');
|
||||
const PROXMOX_CONSOLE_TOKEN = process.env.PROXMOX_CONSOLE_TOKEN || process.env.PROXMOX_TOKEN_ID;
|
||||
|
||||
/** @param {import('next').Request} _req */
|
||||
export async function GET(_req) {
|
||||
@@ -13,13 +12,20 @@ export async function GET(_req) {
|
||||
for (const node of nodes) {
|
||||
try {
|
||||
const vms = await getVMs(node.name);
|
||||
allVMs.push(
|
||||
...vms.map((vm) => ({
|
||||
for (const vm of vms) {
|
||||
let ips = [];
|
||||
if (vm.status === 'running') {
|
||||
try {
|
||||
ips = await getGuestIPs(node.name, vm.vmid, 'qemu');
|
||||
} catch { /* guest agent not available */ }
|
||||
}
|
||||
allVMs.push({
|
||||
...vm,
|
||||
node: node.name,
|
||||
consoleUrl: `${PROXMOX_WEB_URL}/?console=qemu&vmid=${vm.vmid}&node=${encodeURIComponent(node.name)}&resize=scale&novnc=1`,
|
||||
})),
|
||||
);
|
||||
ips,
|
||||
});
|
||||
}
|
||||
} catch { /* skip node */ }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user