Fix version conflicts

This commit is contained in:
Pascal Vizeli 2018-02-23 11:35:43 +01:00
commit 1e11359c71
10 changed files with 94 additions and 51 deletions

21
API.md
View File

@ -124,6 +124,13 @@ Output is the raw docker log.
- POST `/snapshots/new/upload` - POST `/snapshots/new/upload`
return:
```json
{
"slug": ""
}
```
- POST `/snapshots/new/full` - POST `/snapshots/new/full`
```json ```json
@ -133,6 +140,13 @@ Output is the raw docker log.
} }
``` ```
return:
```json
{
"slug": ""
}
```
- POST `/snapshots/new/partial` - POST `/snapshots/new/partial`
```json ```json
@ -144,6 +158,13 @@ Output is the raw docker log.
} }
``` ```
return:
```json
{
"slug": ""
}
```
- POST `/snapshots/reload` - POST `/snapshots/reload`
- GET `/snapshots/{slug}/info` - GET `/snapshots/{slug}/info`

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -109,16 +109,24 @@ class APISnapshots(CoreSysAttributes):
async def snapshot_full(self, request): async def snapshot_full(self, request):
"""Full-Snapshot a snapshot.""" """Full-Snapshot a snapshot."""
body = await api_validate(SCHEMA_SNAPSHOT_FULL, request) body = await api_validate(SCHEMA_SNAPSHOT_FULL, request)
return await asyncio.shield( snapshot = await asyncio.shield(
self._snapshots.do_snapshot_full(**body), loop=self._loop) self._snapshots.do_snapshot_full(**body), loop=self._loop)
if snapshot:
return {ATTR_SLUG: snapshot.slug}
return False
@api_process @api_process
async def snapshot_partial(self, request): async def snapshot_partial(self, request):
"""Partial-Snapshot a snapshot.""" """Partial-Snapshot a snapshot."""
body = await api_validate(SCHEMA_SNAPSHOT_PARTIAL, request) body = await api_validate(SCHEMA_SNAPSHOT_PARTIAL, request)
return await asyncio.shield( snapshot = await asyncio.shield(
self._snapshots.do_snapshot_partial(**body), loop=self._loop) self._snapshots.do_snapshot_partial(**body), loop=self._loop)
if snapshot:
return {ATTR_SLUG: snapshot.slug}
return False
@api_process @api_process
async def restore_full(self, request): async def restore_full(self, request):
"""Full-Restore a snapshot.""" """Full-Restore a snapshot."""
@ -174,5 +182,9 @@ class APISnapshots(CoreSysAttributes):
except asyncio.CancelledError: except asyncio.CancelledError:
return False return False
return await asyncio.shield( snapshot = await asyncio.shield(
self._snapshots.import_snapshot(tar_file), loop=self._loop) self._snapshots.import_snapshot(tar_file), loop=self._loop)
if snapshot:
return {ATTR_SLUG: snapshot.slug}
return False

View File

@ -2,7 +2,7 @@
from pathlib import Path from pathlib import Path
from ipaddress import ip_network from ipaddress import ip_network
HASSIO_VERSION = '0.91' HASSIO_VERSION = '0.92'
URL_HASSIO_VERSION = ('https://raw.githubusercontent.com/home-assistant/' URL_HASSIO_VERSION = ('https://raw.githubusercontent.com/home-assistant/'
'hassio/{}/version.json') 'hassio/{}/version.json')

View File

@ -90,30 +90,36 @@ class SnapshotManager(CoreSysAttributes):
# Read meta data # Read meta data
if not await snapshot.load(): if not await snapshot.load():
return False return None
# Allready exists? # Allready exists?
if snapshot.slug in self.snapshots_obj: if snapshot.slug in self.snapshots_obj:
_LOGGER.error("Snapshot %s allready exists!", snapshot.slug) _LOGGER.error("Snapshot %s allready exists!", snapshot.slug)
return False return None
# Move snapshot to backup # Move snapshot to backup
tar_origin = Path(self._config.path_backup, f"{snapshot.slug}.tar")
try: try:
snapshot.tarfile.rename( snapshot.tarfile.rename(tar_origin)
Path(self._config.path_backup, f"{snapshot.slug}.tar"))
except OSError as err: except OSError as err:
_LOGGER.error("Can't move snapshot file to storage: %s", err) _LOGGER.error("Can't move snapshot file to storage: %s", err)
return False return None
await self.reload() # Load new snapshot
return True snapshot = Snapshot(self.coresys, tar_origin)
if not await snapshot.load():
return None
_LOGGER.info("Success import %s", snapshot.slug)
self.snapshots_obj[snapshot.slug] = snapshot
return snapshot
async def do_snapshot_full(self, name="", password=None): async def do_snapshot_full(self, name="", password=None):
"""Create a full snapshot.""" """Create a full snapshot."""
if self.lock.locked(): if self.lock.locked():
_LOGGER.error("It is already a snapshot/restore process running") _LOGGER.error("It is already a snapshot/restore process running")
return False return None
snapshot = self._create_snapshot(name, SNAPSHOT_FULL, password) snapshot = self._create_snapshot(name, SNAPSHOT_FULL, password)
_LOGGER.info("Full-Snapshot %s start", snapshot.slug) _LOGGER.info("Full-Snapshot %s start", snapshot.slug)
@ -132,12 +138,12 @@ class SnapshotManager(CoreSysAttributes):
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Snapshot %s error", snapshot.slug) _LOGGER.exception("Snapshot %s error", snapshot.slug)
return False return None
else: else:
_LOGGER.info("Full-Snapshot %s done", snapshot.slug) _LOGGER.info("Full-Snapshot %s done", snapshot.slug)
self.snapshots_obj[snapshot.slug] = snapshot self.snapshots_obj[snapshot.slug] = snapshot
return True return snapshot
finally: finally:
self._scheduler.suspend = False self._scheduler.suspend = False
@ -148,7 +154,7 @@ class SnapshotManager(CoreSysAttributes):
"""Create a partial snapshot.""" """Create a partial snapshot."""
if self.lock.locked(): if self.lock.locked():
_LOGGER.error("It is already a snapshot/restore process running") _LOGGER.error("It is already a snapshot/restore process running")
return False return None
addons = addons or [] addons = addons or []
folders = folders or [] folders = folders or []
@ -178,12 +184,12 @@ class SnapshotManager(CoreSysAttributes):
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Snapshot %s error", snapshot.slug) _LOGGER.exception("Snapshot %s error", snapshot.slug)
return False return None
else: else:
_LOGGER.info("Partial-Snapshot %s done", snapshot.slug) _LOGGER.info("Partial-Snapshot %s done", snapshot.slug)
self.snapshots_obj[snapshot.slug] = snapshot self.snapshots_obj[snapshot.slug] = snapshot
return True return snapshot
finally: finally:
self._scheduler.suspend = False self._scheduler.suspend = False

@ -1 +1 @@
Subproject commit c3e35a27bad1a40ce1a12a78e91209f349b9f9c8 Subproject commit 0ffb31999e97a7acbd07945fa5e0245d5a425817

View File

@ -42,7 +42,7 @@ setup(
install_requires=[ install_requires=[
'async_timeout==2.0.0', 'async_timeout==2.0.0',
'aiohttp==2.3.10', 'aiohttp==2.3.10',
'docker==3.0.1', 'docker==3.1.0',
'colorlog==3.1.2', 'colorlog==3.1.2',
'voluptuous==0.11.1', 'voluptuous==0.11.1',
'gitpython==2.1.8', 'gitpython==2.1.8',

View File

@ -1,5 +1,5 @@
{ {
"hassio": "0.91", "hassio": "0.92",
"homeassistant": "0.63.3", "homeassistant": "0.63.3",
"resinos": "1.1", "resinos": "1.1",
"resinhup": "0.3", "resinhup": "0.3",