mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-24 09:36:31 +00:00
Update HassIO API
This commit is contained in:
parent
e454b8ded9
commit
3ded742f90
@ -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())
|
||||
|
@ -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():
|
||||
|
@ -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
|
||||
|
||||
|
@ -3,6 +3,7 @@ import asyncio
|
||||
|
||||
import docker
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
class DockerBase(object):
|
||||
"""Docker hassio wrapper."""
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user