1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-17 15:44:52 +01:00

Fix Proxmox offline node (#165986)

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
Erwin Douna
2026-03-25 15:04:31 +01:00
committed by GitHub
parent 15d7febffd
commit f4efc929d6
4 changed files with 44 additions and 0 deletions

View File

@@ -37,6 +37,7 @@ from .const import (
CONF_TOKEN_SECRET,
DEFAULT_VERIFY_SSL,
DOMAIN,
NODE_ONLINE,
)
type ProxmoxConfigEntry = ConfigEntry[ProxmoxCoordinator]
@@ -240,6 +241,13 @@ class ProxmoxCoordinator(DataUpdateCoordinator[dict[str, ProxmoxNodeData]]):
node: dict[str, Any],
) -> tuple[list[dict[str, Any]], list[dict[str, Any]], list[dict[str, Any]]]:
"""Get vms, containers, and backups for a node."""
if node.get("status") != NODE_ONLINE:
_LOGGER.debug(
"Node %s is offline, skipping VM/container fetch",
node[CONF_NODE],
)
return [], [], []
vms = self.proxmox.nodes(node[CONF_NODE]).qemu.get() or []
containers = self.proxmox.nodes(node[CONF_NODE]).lxc.get() or []
backups = (

View File

@@ -170,6 +170,7 @@ def mock_proxmox_client():
mock_instance.nodes = nodes_mock
mock_instance._node_mock = node_mock
mock_instance._nodes_mock = nodes_mock
mock_instance._all_nodes = all_nodes
yield mock_instance

View File

@@ -28,5 +28,20 @@
"maxdisk": 500000000000,
"disk": 120000000000,
"ssl_fingerprint": "7A:E1:DF:...:AC"
},
{
"id": "node/pve3",
"node": "pve3",
"status": "offline",
"level": "",
"type": "node",
"maxmem": 0,
"mem": 0,
"maxcpu": 0,
"cpu": 0,
"uptime": 0,
"maxdisk": 0,
"disk": 0,
"ssl_fingerprint": "3F:B9:CC:...:01"
}
]

View File

@@ -29,6 +29,8 @@ from homeassistant.const import (
CONF_PORT,
CONF_USERNAME,
CONF_VERIFY_SSL,
STATE_OFF,
STATE_ON,
)
from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
@@ -233,6 +235,24 @@ async def test_migration_v1_to_v3(
assert container_entity_after.unique_id == f"{entry.entry_id}_200_status"
async def test_offline_node(
hass: HomeAssistant,
mock_proxmox_client: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test that an offline node doesn't cause the entire update to fail."""
mock_proxmox_client.nodes.get.return_value = mock_proxmox_client._all_nodes
await setup_integration(hass, mock_config_entry)
assert mock_config_entry.state is ConfigEntryState.LOADED
state = hass.states.get("binary_sensor.pve1_status")
assert state.state == STATE_ON
state = hass.states.get("binary_sensor.pve3_status")
assert state.state == STATE_OFF
async def test_migration_v2_to_v3(
hass: HomeAssistant,
) -> None: