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:
@@ -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 = (
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user