mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-04-18 01:52:20 +00:00
Update notification service
This commit is contained in:
@@ -71,9 +71,10 @@ _PROXMOX_NODE_CACHE_TTL = 300 # seconds (5 minutes)
|
||||
|
||||
def get_proxmox_node_name() -> str:
|
||||
"""
|
||||
Retrieve the real Proxmox node name.
|
||||
Retrieve the real Proxmox node name for the LOCAL node.
|
||||
|
||||
- First tries reading from: `pvesh get /nodes`
|
||||
- In a cluster, matches the local hostname against the node list
|
||||
- Uses an in-memory cache to avoid repeated API calls
|
||||
- Falls back to the short hostname if the API call fails
|
||||
"""
|
||||
@@ -85,6 +86,9 @@ def get_proxmox_node_name() -> str:
|
||||
if cached_name and (now - float(cached_ts)) < _PROXMOX_NODE_CACHE_TTL:
|
||||
return str(cached_name)
|
||||
|
||||
# Get local hostname for matching
|
||||
local_hostname = socket.gethostname().split(".", 1)[0].lower()
|
||||
|
||||
# Try Proxmox API
|
||||
try:
|
||||
result = subprocess.run(
|
||||
@@ -98,19 +102,36 @@ def get_proxmox_node_name() -> str:
|
||||
if result.returncode == 0 and result.stdout:
|
||||
nodes = json.loads(result.stdout)
|
||||
if isinstance(nodes, list) and nodes:
|
||||
node_name = nodes[0].get("node")
|
||||
if node_name:
|
||||
_PROXMOX_NODE_CACHE["name"] = node_name
|
||||
_PROXMOX_NODE_CACHE["timestamp"] = now
|
||||
return node_name
|
||||
# In a cluster, find the node that matches local hostname
|
||||
# Node names in Proxmox typically match the hostname
|
||||
for node_info in nodes:
|
||||
node_name = node_info.get("node", "")
|
||||
if node_name.lower() == local_hostname:
|
||||
_PROXMOX_NODE_CACHE["name"] = node_name
|
||||
_PROXMOX_NODE_CACHE["timestamp"] = now
|
||||
return node_name
|
||||
|
||||
# If no exact match, try partial match (hostname might be truncated)
|
||||
for node_info in nodes:
|
||||
node_name = node_info.get("node", "")
|
||||
if local_hostname.startswith(node_name.lower()) or node_name.lower().startswith(local_hostname):
|
||||
_PROXMOX_NODE_CACHE["name"] = node_name
|
||||
_PROXMOX_NODE_CACHE["timestamp"] = now
|
||||
return node_name
|
||||
|
||||
# Last resort: if single node cluster, use that node
|
||||
if len(nodes) == 1:
|
||||
node_name = nodes[0].get("node")
|
||||
if node_name:
|
||||
_PROXMOX_NODE_CACHE["name"] = node_name
|
||||
_PROXMOX_NODE_CACHE["timestamp"] = now
|
||||
return node_name
|
||||
|
||||
except Exception as exc:
|
||||
logger.warning("Failed to get Proxmox node name from API: %s", exc)
|
||||
|
||||
# Fallback: short hostname (without domain)
|
||||
hostname = socket.gethostname()
|
||||
short_hostname = hostname.split(".", 1)[0]
|
||||
return short_hostname
|
||||
return local_hostname
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user