mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Tag backups created when updating addon with supervisor.addon_update (#136690)
This commit is contained in:
parent
be7a7c94f6
commit
b1abf50a31
@ -672,6 +672,7 @@ class BackupManager:
|
|||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
agent_ids: list[str],
|
agent_ids: list[str],
|
||||||
|
extra_metadata: dict[str, bool | str] | None = None,
|
||||||
include_addons: list[str] | None,
|
include_addons: list[str] | None,
|
||||||
include_all_addons: bool,
|
include_all_addons: bool,
|
||||||
include_database: bool,
|
include_database: bool,
|
||||||
@ -684,6 +685,7 @@ class BackupManager:
|
|||||||
"""Create a backup."""
|
"""Create a backup."""
|
||||||
new_backup = await self.async_initiate_backup(
|
new_backup = await self.async_initiate_backup(
|
||||||
agent_ids=agent_ids,
|
agent_ids=agent_ids,
|
||||||
|
extra_metadata=extra_metadata,
|
||||||
include_addons=include_addons,
|
include_addons=include_addons,
|
||||||
include_all_addons=include_all_addons,
|
include_all_addons=include_all_addons,
|
||||||
include_database=include_database,
|
include_database=include_database,
|
||||||
@ -717,6 +719,7 @@ class BackupManager:
|
|||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
agent_ids: list[str],
|
agent_ids: list[str],
|
||||||
|
extra_metadata: dict[str, bool | str] | None = None,
|
||||||
include_addons: list[str] | None,
|
include_addons: list[str] | None,
|
||||||
include_all_addons: bool,
|
include_all_addons: bool,
|
||||||
include_database: bool,
|
include_database: bool,
|
||||||
@ -741,6 +744,7 @@ class BackupManager:
|
|||||||
try:
|
try:
|
||||||
return await self._async_create_backup(
|
return await self._async_create_backup(
|
||||||
agent_ids=agent_ids,
|
agent_ids=agent_ids,
|
||||||
|
extra_metadata=extra_metadata,
|
||||||
include_addons=include_addons,
|
include_addons=include_addons,
|
||||||
include_all_addons=include_all_addons,
|
include_all_addons=include_all_addons,
|
||||||
include_database=include_database,
|
include_database=include_database,
|
||||||
@ -764,6 +768,7 @@ class BackupManager:
|
|||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
agent_ids: list[str],
|
agent_ids: list[str],
|
||||||
|
extra_metadata: dict[str, bool | str] | None,
|
||||||
include_addons: list[str] | None,
|
include_addons: list[str] | None,
|
||||||
include_all_addons: bool,
|
include_all_addons: bool,
|
||||||
include_database: bool,
|
include_database: bool,
|
||||||
@ -790,6 +795,7 @@ class BackupManager:
|
|||||||
name
|
name
|
||||||
or f"{'Automatic' if with_automatic_settings else 'Custom'} backup {HAVERSION}"
|
or f"{'Automatic' if with_automatic_settings else 'Custom'} backup {HAVERSION}"
|
||||||
)
|
)
|
||||||
|
extra_metadata = extra_metadata or {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
(
|
(
|
||||||
@ -798,7 +804,8 @@ class BackupManager:
|
|||||||
) = await self._reader_writer.async_create_backup(
|
) = await self._reader_writer.async_create_backup(
|
||||||
agent_ids=agent_ids,
|
agent_ids=agent_ids,
|
||||||
backup_name=backup_name,
|
backup_name=backup_name,
|
||||||
extra_metadata={
|
extra_metadata=extra_metadata
|
||||||
|
| {
|
||||||
"instance_id": await instance_id.async_get(self.hass),
|
"instance_id": await instance_id.async_get(self.hass),
|
||||||
"with_automatic_settings": with_automatic_settings,
|
"with_automatic_settings": with_automatic_settings,
|
||||||
},
|
},
|
||||||
|
@ -509,6 +509,7 @@ async def backup_addon_before_update(
|
|||||||
try:
|
try:
|
||||||
await backup_manager.async_create_backup(
|
await backup_manager.async_create_backup(
|
||||||
agent_ids=[await _default_agent(client)],
|
agent_ids=[await _default_agent(client)],
|
||||||
|
extra_metadata={"supervisor.addon_update": addon},
|
||||||
include_addons=[addon],
|
include_addons=[addon],
|
||||||
include_all_addons=False,
|
include_all_addons=False,
|
||||||
include_database=False,
|
include_database=False,
|
||||||
|
@ -90,13 +90,13 @@ def generate_backup_id_fixture() -> Generator[MagicMock]:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("mock_backup_generation")
|
@pytest.mark.usefixtures("mock_backup_generation")
|
||||||
async def test_async_create_backup(
|
async def test_create_backup_service(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
caplog: pytest.LogCaptureFixture,
|
caplog: pytest.LogCaptureFixture,
|
||||||
mocked_json_bytes: Mock,
|
mocked_json_bytes: Mock,
|
||||||
mocked_tarfile: Mock,
|
mocked_tarfile: Mock,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test create backup."""
|
"""Test create backup service."""
|
||||||
assert await async_setup_component(hass, DOMAIN, {})
|
assert await async_setup_component(hass, DOMAIN, {})
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
@ -137,6 +137,128 @@ async def test_async_create_backup(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("mock_backup_generation")
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("manager_kwargs", "expected_writer_kwargs"),
|
||||||
|
[
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"agent_ids": ["backup.local"],
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"name": None,
|
||||||
|
"password": None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"agent_ids": ["backup.local"],
|
||||||
|
"backup_name": "Custom backup 2025.1.0",
|
||||||
|
"extra_metadata": {
|
||||||
|
"instance_id": ANY,
|
||||||
|
"with_automatic_settings": False,
|
||||||
|
},
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"on_progress": ANY,
|
||||||
|
"password": None,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"agent_ids": ["backup.local"],
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"name": None,
|
||||||
|
"password": None,
|
||||||
|
"with_automatic_settings": True,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"agent_ids": ["backup.local"],
|
||||||
|
"backup_name": "Automatic backup 2025.1.0",
|
||||||
|
"extra_metadata": {
|
||||||
|
"instance_id": ANY,
|
||||||
|
"with_automatic_settings": True,
|
||||||
|
},
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"on_progress": ANY,
|
||||||
|
"password": None,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
"agent_ids": ["backup.local"],
|
||||||
|
"extra_metadata": {"custom": "data"},
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"name": None,
|
||||||
|
"password": None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"agent_ids": ["backup.local"],
|
||||||
|
"backup_name": "Custom backup 2025.1.0",
|
||||||
|
"extra_metadata": {
|
||||||
|
"custom": "data",
|
||||||
|
"instance_id": ANY,
|
||||||
|
"with_automatic_settings": False,
|
||||||
|
},
|
||||||
|
"include_addons": None,
|
||||||
|
"include_all_addons": False,
|
||||||
|
"include_database": True,
|
||||||
|
"include_folders": None,
|
||||||
|
"include_homeassistant": True,
|
||||||
|
"on_progress": ANY,
|
||||||
|
"password": None,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_async_create_backup(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
caplog: pytest.LogCaptureFixture,
|
||||||
|
mocked_json_bytes: Mock,
|
||||||
|
mocked_tarfile: Mock,
|
||||||
|
manager_kwargs: dict[str, Any],
|
||||||
|
expected_writer_kwargs: dict[str, Any],
|
||||||
|
) -> None:
|
||||||
|
"""Test create backup."""
|
||||||
|
assert await async_setup_component(hass, DOMAIN, {})
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
manager = hass.data[DATA_MANAGER]
|
||||||
|
|
||||||
|
new_backup = NewBackup(backup_job_id="time-123")
|
||||||
|
backup_task = AsyncMock(
|
||||||
|
return_value=WrittenBackup(
|
||||||
|
backup=TEST_BACKUP_ABC123,
|
||||||
|
open_stream=AsyncMock(),
|
||||||
|
release_stream=AsyncMock(),
|
||||||
|
),
|
||||||
|
)() # call it so that it can be awaited
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.backup.manager.CoreBackupReaderWriter.async_create_backup",
|
||||||
|
return_value=(new_backup, backup_task),
|
||||||
|
) as create_backup:
|
||||||
|
await manager.async_create_backup(**manager_kwargs)
|
||||||
|
|
||||||
|
assert create_backup.called
|
||||||
|
assert create_backup.call_args == call(**expected_writer_kwargs)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("mock_backup_generation")
|
@pytest.mark.usefixtures("mock_backup_generation")
|
||||||
async def test_create_backup_when_busy(
|
async def test_create_backup_when_busy(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -240,6 +240,7 @@ async def test_update_addon(hass: HomeAssistant, update_addon: AsyncMock) -> Non
|
|||||||
None,
|
None,
|
||||||
{
|
{
|
||||||
"agent_ids": ["hassio.local"],
|
"agent_ids": ["hassio.local"],
|
||||||
|
"extra_metadata": {"supervisor.addon_update": "test"},
|
||||||
"include_addons": ["test"],
|
"include_addons": ["test"],
|
||||||
"include_all_addons": False,
|
"include_all_addons": False,
|
||||||
"include_database": False,
|
"include_database": False,
|
||||||
@ -254,6 +255,7 @@ async def test_update_addon(hass: HomeAssistant, update_addon: AsyncMock) -> Non
|
|||||||
"my_nas",
|
"my_nas",
|
||||||
{
|
{
|
||||||
"agent_ids": ["hassio.my_nas"],
|
"agent_ids": ["hassio.my_nas"],
|
||||||
|
"extra_metadata": {"supervisor.addon_update": "test"},
|
||||||
"include_addons": ["test"],
|
"include_addons": ["test"],
|
||||||
"include_all_addons": False,
|
"include_all_addons": False,
|
||||||
"include_database": False,
|
"include_database": False,
|
||||||
@ -281,6 +283,7 @@ async def test_update_addon(hass: HomeAssistant, update_addon: AsyncMock) -> Non
|
|||||||
None,
|
None,
|
||||||
{
|
{
|
||||||
"agent_ids": ["hassio.local"],
|
"agent_ids": ["hassio.local"],
|
||||||
|
"extra_metadata": {"supervisor.addon_update": "test"},
|
||||||
"include_addons": ["test"],
|
"include_addons": ["test"],
|
||||||
"include_all_addons": False,
|
"include_all_addons": False,
|
||||||
"include_database": False,
|
"include_database": False,
|
||||||
|
@ -360,6 +360,7 @@ async def test_update_addon(
|
|||||||
None,
|
None,
|
||||||
{
|
{
|
||||||
"agent_ids": ["hassio.local"],
|
"agent_ids": ["hassio.local"],
|
||||||
|
"extra_metadata": {"supervisor.addon_update": "test"},
|
||||||
"include_addons": ["test"],
|
"include_addons": ["test"],
|
||||||
"include_all_addons": False,
|
"include_all_addons": False,
|
||||||
"include_database": False,
|
"include_database": False,
|
||||||
@ -374,6 +375,7 @@ async def test_update_addon(
|
|||||||
"my_nas",
|
"my_nas",
|
||||||
{
|
{
|
||||||
"agent_ids": ["hassio.my_nas"],
|
"agent_ids": ["hassio.my_nas"],
|
||||||
|
"extra_metadata": {"supervisor.addon_update": "test"},
|
||||||
"include_addons": ["test"],
|
"include_addons": ["test"],
|
||||||
"include_all_addons": False,
|
"include_all_addons": False,
|
||||||
"include_database": False,
|
"include_database": False,
|
||||||
@ -401,6 +403,7 @@ async def test_update_addon(
|
|||||||
None,
|
None,
|
||||||
{
|
{
|
||||||
"agent_ids": ["hassio.local"],
|
"agent_ids": ["hassio.local"],
|
||||||
|
"extra_metadata": {"supervisor.addon_update": "test"},
|
||||||
"include_addons": ["test"],
|
"include_addons": ["test"],
|
||||||
"include_all_addons": False,
|
"include_all_addons": False,
|
||||||
"include_database": False,
|
"include_database": False,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user