mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-25 18:16:32 +00:00
update hassio api
This commit is contained in:
parent
d9046ac0bc
commit
950459b708
@ -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()
|
||||||
|
@ -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():
|
||||||
|
@ -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)
|
@ -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
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user