update hassio api

This commit is contained in:
Pascal Vizeli 2017-03-22 21:58:59 +01:00
parent d9046ac0bc
commit 950459b708
6 changed files with 72 additions and 39 deletions

View File

@ -24,16 +24,16 @@ def main():
dock = docker.Client(base_url='unix://var/run/docker.sock', version='auto') dock = docker.Client(base_url='unix://var/run/docker.sock', version='auto')
# init system # init system
conf_version = bootstrap.initialize_system_data() config = bootstrap.initialize_system_data()
# init HomeAssistant Docker # init HomeAssistant Docker
docker_hass = DockerHomeAssistant( docker_hass = DockerHomeAssistant(
loop, dock, conf_version.homeassistant_image, config, loop, dock, config.homeassistant_image,
conf_version.homeassistant_tag config.homeassistant_tag
) )
# first start of supervisor? # first start of supervisor?
if conf_version.homeassistant_tag is None: if config.homeassistant_tag is None:
_LOGGER.info("First start of supervisor, read version from github.") _LOGGER.info("First start of supervisor, read version from github.")
# read homeassistant tag and install it # read homeassistant tag and install it
@ -46,7 +46,7 @@ def main():
_LOGGER.waring("Can't fetch info from github. Retry in 60") _LOGGER.waring("Can't fetch info from github. Retry in 60")
await asyncio.sleep(60, loop=loop) await asyncio.sleep(60, loop=loop)
conf_version.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG] config.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG]
# run HomeAssistant # run HomeAssistant
docker_hass.run() docker_hass.run()

View File

@ -6,35 +6,33 @@ import os
from colorlog import ColoredFormatter from colorlog import ColoredFormatter
from .const import FILE_HASSIO_ADDONS, HOMEASSISTANT_CONFIG, HOMEASSISTANT_SSL from .const import FILE_HASSIO_ADDONS
from .version import Version from .version import CoreConfig
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
def initialize_system_data(): def initialize_system_data():
"""Setup default config and create folders.""" """Setup default config and create folders."""
config = CoreConfig()
# homeassistant config folder # homeassistant config folder
if not os.path.isdir(HOMEASSISTANT_CONFIG): if not os.path.isdir(config.path_config):
_LOGGER.info( _LOGGER.info(
"Create Home-Assistant config folder %s", HOMEASSISTANT_CONFIG) "Create Home-Assistant config folder %s", config.path_config)
os.mkdir(HOMEASSISTANT_CONFIG) os.mkdir(config.path_config)
# homeassistant ssl folder # homeassistant ssl folder
if not os.path.isdir(HOMEASSISTANT_SSL): if not os.path.isdir(config.path_ssl):
_LOGGER.info( _LOGGER.info("Create Home-Assistant ssl folder %s", config.path_ssl)
"Create Home-Assistant ssl folder %s", HOMEASSISTANT_SSL) os.mkdir(config.path_ssl)
os.mkdir(HOMEASSISTANT_SSL)
# installed addons # installed addons
if not os.path.isfile(FILE_HASSIO_ADDONS): if not os.path.isfile(FILE_HASSIO_ADDONS):
with open(FILE_HASSIO_ADDONS) as addons_file: with open(FILE_HASSIO_ADDONS) as addons_file:
addons_file.write(json.dumps({})) addons_file.write(json.dumps({}))
# supervisor/homeassistant image/tag versions return config
conf_version = Version()
return conf_version
def initialize_logging(): def initialize_logging():

View File

@ -1,28 +1,26 @@
"""Bootstrap HassIO.""" """Bootstrap HassIO."""
import asyncio
import json import json
import logging import logging
import os import os
from colorlog import ColoredFormatter
from .const import ( from .const import (
FILE_HASSIO_VERSION, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE, FILE_HASSIO_CONFIG, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE,
CONF_HOMEASSISTANT_TAG, CONF_HOMEASSISTANT_IMAGE) CONF_HOMEASSISTANT_TAG, CONF_HOMEASSISTANT_IMAGE, HOMEASSISTANT_SSL,
HOMEASSISTANT_CONFIG, HASSIO_SHARE_EXT, HASSIO_SHARE_INT)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
class Version(Object): class CoreConfig(Object):
"""Hold all version data.""" """Hold all config data."""
def __init__(self, config_file=FILE_HASSIO_VERSION): def __init__(self, config_file=FILE_HASSIO_CONFIG):
"""Initialize version object.""" """Initialize config object."""
self._data = {} self._data = {}
self._filename = config_file self._filename = config_file
# init or load data # init or load data
if os.path.isfile(FILE_HASSIO_VERSION): if os.path.isfile(self._filename):
try: try:
with open(self._filename 'r') as cfile: with open(self._filename 'r') as cfile:
self._data = json.loads(cfile.read()) self._data = json.loads(cfile.read())
@ -77,3 +75,23 @@ class Version(Object):
def supervisor_tag(self): def supervisor_tag(self):
"""Return docker supervisor tag.""" """Return docker supervisor tag."""
return self._data.get(CONF_SUPERVISOR_TAG) return self._data.get(CONF_SUPERVISOR_TAG)
@property
def path_config_docker(self):
"""Return config path extern for docker."""
return HOMEASSISTANT_CONFIG.format(HASSIO_SHARE_EXT)
@property
def path_config(self):
"""Return config path inside supervisor."""
return HOMEASSISTANT_CONFIG.format(HASSIO_SHARE_INT)
@property
def path_ssl_docker(self):
"""Return SSL path extern for docker."""
return HOMEASSISTANT_SSL.format(HASSIO_SHARE_EXT)
@property
def path_ssl(self):
"""Return SSL path inside supervisor."""
return HOMEASSISTANT_SSL.format(HASSIO_SHARE_INT)

View File

@ -6,15 +6,17 @@ URL_SUPERVISOR_VERSION = \
URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons' URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons'
FILE_RESIN_CONFIG = '/boot/config.json' FILE_HOST_CONFIG = '/boot/config.json'
FILE_HOST_NETWORK = '/boot/network'
FILE_HASSIO_ADDONS = '/data/addons.json' FILE_HASSIO_ADDONS = '/data/addons.json'
FILE_HASSIO_VERSION = '/data/version.json' FILE_HASSIO_CONFIG = '/data/config.json'
HASSIO_SHARE = os.environ['SUPERVISOR_SHARE'] HASSIO_SHARE_EXT = os.environ['SUPERVISOR_SHARE']
HASSIO_SHARE_INT = '/shared-data'
HASSIO_DOCKER = os.environ['SUPERVISOR_NAME'] HASSIO_DOCKER = os.environ['SUPERVISOR_NAME']
HOMEASSISTANT_CONFIG = "{}/homeassistant_config".format(HASSIO_SHARE) HOMEASSISTANT_CONFIG = "{}/homeassistant_config"
HOMEASSISTANT_SSL = "{}/homeassistant_ssl".format(HASSIO_SHARE) HOMEASSISTANT_SSL = "{}/homeassistant_ssl"
HTTP_PORT = 9123 HTTP_PORT = 9123

View File

@ -1,21 +1,28 @@
"""Init file for HassIO docker object.""" """Init file for HassIO docker object."""
import asyncio import logging
import docker import docker
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
class DockerBase(object): class DockerBase(object):
"""Docker hassio wrapper.""" """Docker hassio wrapper."""
def __init__(self, loop, dock, image, tag=None): def __init__(self, config, loop, dock, image, tag=None):
"""Initialize docker base wrapper.""" """Initialize docker base wrapper."""
self.config = config
self.loop = loop self.loop = loop
self.dock = dock self.dock = dock
self.image = image self.image = image
self.tag = tag self.tag = tag
self.container = None self.container = None
@property
def docker_name(self):
"""Return name of docker container."""
return None
def install(self, tag='latest'): def install(self, tag='latest'):
"""Pull docker image. """Pull docker image.

View File

@ -4,14 +4,20 @@ import asyncio
import docker import docker
import . from DockerBase import . from DockerBase
from ..const.py import HOMEASSISTANT_CONFIG, HOMEASSISTANT_SSL, HASSIO_DOCKER from ..const.py import HASSIO_DOCKER
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
HASS_DOCKER_NAME = 'homeassistant' HASS_DOCKER_NAME = 'homeassistant'
class DockerHomeAssistant(DockerBase): class DockerHomeAssistant(DockerBase):
"""Docker hassio wrapper for HomeAssistant.""" """Docker hassio wrapper for HomeAssistant."""
@property
def docker_name(self):
"""Return name of docker container."""
return HASS_DOCKER_NAME
def _run(): def _run():
"""Run docker image. """Run docker image.
@ -20,7 +26,7 @@ class DockerHomeAssistant(DockerBase):
try: try:
self.container = self.dock.containers.run( self.container = self.dock.containers.run(
self.image, self.image,
name=HASS_DOCKER_NAME, name=self.docker_nme,
remove=True, remove=True,
network_mode='host', network_mode='host',
restart_policy={ restart_policy={
@ -29,8 +35,10 @@ class DockerHomeAssistant(DockerBase):
}, },
links={HASSIO_DOCKER: 'HASSIO'}, links={HASSIO_DOCKER: 'HASSIO'},
volumes={ volumes={
HOMEASSISTANT_CONFIG: {'bind': '/config', 'mode': 'rw'}, self.config.path_config_docker:
HOMEASSISTANT_SSL: {'bind': '/ssl', 'mode': 'rw'}, {'bind': '/config', 'mode': 'rw'},
self.config.path_ssl_docker:
{'bind': '/ssl', 'mode': 'rw'},
}) })
except docker.errors.APIError as err: except docker.errors.APIError as err:
_LOGGER.error("Can't run %s", self.image) _LOGGER.error("Can't run %s", self.image)