From 3ded742f90f4e51623e037d4a520834321687eb6 Mon Sep 17 00:00:00 2001 From: pvizeli Date: Wed, 22 Mar 2017 17:59:06 +0100 Subject: [PATCH] Update HassIO API --- hassio_api/hassio/__main__.py | 23 +++++++++++----- hassio_api/hassio/bootstrap.py | 33 +++++++---------------- hassio_api/hassio/const.py | 7 +++-- hassio_api/hassio/docker/__init__.py | 1 + hassio_api/hassio/docker/homeassistant.py | 8 +++++- 5 files changed, 39 insertions(+), 33 deletions(-) diff --git a/hassio_api/hassio/__main__.py b/hassio_api/hassio/__main__.py index 2c4c6702b..478fef4ca 100644 --- a/hassio_api/hassio/__main__.py +++ b/hassio_api/hassio/__main__.py @@ -9,6 +9,7 @@ import docker import .bootstrap import .tools from .docker.homeassistant import DockerHomeAssistant +from .const import CONF_HOMEASSISTANT_TAG _LOGGER = logging.getLogger(__name__) @@ -20,30 +21,38 @@ def main(): # init asyncio & aiohttp client loop = asyncio.get_event_loop() websession = aiohttp.ClientSession(loop=loop) - dock = docker.from_env() + dock = docker.Client(base_url='unix://var/run/docker.sock', version='auto') # init system - versions = bootstrap.initialize_system_data() + conf_version = bootstrap.initialize_system_data() # init HomeAssistant Docker docker_hass = DockerHomeAssistant( - loop, dock, versions[CONF_HOMEASSISTANT_IMAGE], - versions[CONF_HOMEASSISTANT_TAG]) + loop, dock, conf_version.homeassistant_image, + conf_version.homeassistant_tag + ) # first start of supervisor? - if versions['CONF_HOMEASSISTANT_TAG'] is None: + if conf_version.homeassistant_tag is None: _LOGGER.info("First start of supervisor, read version from github.") # read homeassistant tag and install it current = None while True: current = await tools.fetch_current_versions(websession) - if current and 'homeassistant_tag' in current: - if docker_hass.install(current['homeassistant_tag']): + if current and CONF_HOMEASSISTANT_TAG in current: + if docker_hass.install(current[CONF_SUPERVISOR_TAG]): break _LOGGER.waring("Can't fetch info from github. Retry in 60") await asyncio.sleep(60, loop=loop) + conf_version.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG] + + # run HomeAssistant + docker_hass.run() + + await loop.run_forever() + if __name__ == "__main__": sys.exit(main()) diff --git a/hassio_api/hassio/bootstrap.py b/hassio_api/hassio/bootstrap.py index b281860bb..7ee2b1a24 100644 --- a/hassio_api/hassio/bootstrap.py +++ b/hassio_api/hassio/bootstrap.py @@ -6,9 +6,8 @@ import os from colorlog import ColoredFormatter -from .const import ( - FILE_HASSIO_ADDONS, FILE_HASSIO_VERSION, FILE_RESIN_CONFIG, - HOMEASSISTANT_CONFIG, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE) +from .const import FILE_HASSIO_ADDONS, HOMEASSISTANT_CONFIG, HOMEASSISTANT_SSL +from .version import Version _LOGGER = logging.getLogger(__name__) @@ -21,33 +20,21 @@ def initialize_system_data(): "Create Home-Assistant config folder %s", HOMEASSISTANT_CONFIG) os.mkdir(HOMEASSISTANT_CONFIG) + # homeassistant ssl folder + if not os.path.isdir(HOMEASSISTANT_SSL): + _LOGGER.info( + "Create Home-Assistant ssl folder %s", HOMEASSISTANT_SSL) + os.mkdir(HOMEASSISTANT_SSL) + # installed addons if not os.path.isfile(FILE_HASSIO_ADDONS): with open(FILE_HASSIO_ADDONS) as addons_file: addons_file.write(json.dumps({})) # supervisor/homeassistant image/tag versions - versions = {} - if not os.path.isfile(FILE_HASSIO_VERSION): - versions.update({ - CONF_HOMEASSISTANT_IMAGE: os.environ['HOMEASSISTANT_REPOSITORY'], - CONF_HOMEASSISTANT_TAG: '', - }) - else: - with open(FILE_HASSIO_VERSION, 'r') as conf_file: - versions = json.loads(conf_file.read()) + conf_version = Version() - # update version - versions.update({ - CONF_SUPERVISOR_IMAGE: os.environ['SUPERVISOR_IMAGE'], - CONF_SUPERVISOR_TAG: os.environ['SUPERVISOR_TAG'], - }) - - with open(FILE_HASSIO_VERSION, 'w') as conf_file: - conf_file.write(json.dumps(versions)) - - _LOGGER("initialize system done: %s", versions) - return versions + return conf_version def initialize_logging(): diff --git a/hassio_api/hassio/const.py b/hassio_api/hassio/const.py index 2f049d86c..d7477f86d 100644 --- a/hassio_api/hassio/const.py +++ b/hassio_api/hassio/const.py @@ -10,8 +10,11 @@ FILE_RESIN_CONFIG = '/boot/config.json' FILE_HASSIO_ADDONS = '/data/addons.json' FILE_HASSIO_VERSION = '/data/version.json' -HOMEASSISTANT_SHARE = os.environ['SUPERVISOR_SHARE'] -HOMEASSISTANT_CONFIG = "{}/config".format(HOMEASSISTANT_SHARE) +HASSIO_SHARE = os.environ['SUPERVISOR_SHARE'] +HASSIO_DOCKER = os.environ['SUPERVISOR_NAME'] + +HOMEASSISTANT_CONFIG = "{}/homeassistant_config".format(HASSIO_SHARE) +HOMEASSISTANT_SSL = "{}/homeassistant_ssl".format(HASSIO_SHARE) HTTP_PORT = 9123 diff --git a/hassio_api/hassio/docker/__init__.py b/hassio_api/hassio/docker/__init__.py index eb7baf362..9414ccfc7 100644 --- a/hassio_api/hassio/docker/__init__.py +++ b/hassio_api/hassio/docker/__init__.py @@ -3,6 +3,7 @@ import asyncio import docker +_LOGGER = logging.getLogger(__name__) class DockerBase(object): """Docker hassio wrapper.""" diff --git a/hassio_api/hassio/docker/homeassistant.py b/hassio_api/hassio/docker/homeassistant.py index 4f016f18c..f4a43229e 100644 --- a/hassio_api/hassio/docker/homeassistant.py +++ b/hassio_api/hassio/docker/homeassistant.py @@ -4,7 +4,10 @@ import asyncio import docker import . from DockerBase +from ..const.py import HOMEASSISTANT_CONFIG, HOMEASSISTANT_SSL, HASSIO_DOCKER +_LOGGER = logging.getLogger(__name__) +HASS_DOCKER_NAME = 'homeassistant' class DockerHomeAssistant(DockerBase): """Docker hassio wrapper for HomeAssistant.""" @@ -17,14 +20,17 @@ class DockerHomeAssistant(DockerBase): try: self.container = self.dock.containers.run( self.image, + name=HASS_DOCKER_NAME, remove=True, network_mode='host', restart_policy={ "Name": "always", "MaximumRetryCount": 10, }, + links={HASSIO_DOCKER: 'HASSIO'}, volumes={ - '/data': {'bind': '/data', 'mode': 'rw'} + HOMEASSISTANT_CONFIG: {'bind': '/config', 'mode': 'rw'}, + HOMEASSISTANT_SSL: {'bind': '/ssl', 'mode': 'rw'}, }) except docker.errors.APIError as err: _LOGGER.error("Can't run %s", self.image)