mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-27 11:06:32 +00:00
Update HassIO API
This commit is contained in:
parent
e454b8ded9
commit
3ded742f90
@ -9,6 +9,7 @@ import docker
|
|||||||
import .bootstrap
|
import .bootstrap
|
||||||
import .tools
|
import .tools
|
||||||
from .docker.homeassistant import DockerHomeAssistant
|
from .docker.homeassistant import DockerHomeAssistant
|
||||||
|
from .const import CONF_HOMEASSISTANT_TAG
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -20,30 +21,38 @@ def main():
|
|||||||
# init asyncio & aiohttp client
|
# init asyncio & aiohttp client
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
websession = aiohttp.ClientSession(loop=loop)
|
websession = aiohttp.ClientSession(loop=loop)
|
||||||
dock = docker.from_env()
|
dock = docker.Client(base_url='unix://var/run/docker.sock', version='auto')
|
||||||
|
|
||||||
# init system
|
# init system
|
||||||
versions = bootstrap.initialize_system_data()
|
conf_version = bootstrap.initialize_system_data()
|
||||||
|
|
||||||
# init HomeAssistant Docker
|
# init HomeAssistant Docker
|
||||||
docker_hass = DockerHomeAssistant(
|
docker_hass = DockerHomeAssistant(
|
||||||
loop, dock, versions[CONF_HOMEASSISTANT_IMAGE],
|
loop, dock, conf_version.homeassistant_image,
|
||||||
versions[CONF_HOMEASSISTANT_TAG])
|
conf_version.homeassistant_tag
|
||||||
|
)
|
||||||
|
|
||||||
# first start of supervisor?
|
# 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.")
|
_LOGGER.info("First start of supervisor, read version from github.")
|
||||||
|
|
||||||
# read homeassistant tag and install it
|
# read homeassistant tag and install it
|
||||||
current = None
|
current = None
|
||||||
while True:
|
while True:
|
||||||
current = await tools.fetch_current_versions(websession)
|
current = await tools.fetch_current_versions(websession)
|
||||||
if current and 'homeassistant_tag' in current:
|
if current and CONF_HOMEASSISTANT_TAG in current:
|
||||||
if docker_hass.install(current['homeassistant_tag']):
|
if docker_hass.install(current[CONF_SUPERVISOR_TAG]):
|
||||||
break
|
break
|
||||||
_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]
|
||||||
|
|
||||||
|
# run HomeAssistant
|
||||||
|
docker_hass.run()
|
||||||
|
|
||||||
|
await loop.run_forever()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
@ -6,9 +6,8 @@ import os
|
|||||||
|
|
||||||
from colorlog import ColoredFormatter
|
from colorlog import ColoredFormatter
|
||||||
|
|
||||||
from .const import (
|
from .const import FILE_HASSIO_ADDONS, HOMEASSISTANT_CONFIG, HOMEASSISTANT_SSL
|
||||||
FILE_HASSIO_ADDONS, FILE_HASSIO_VERSION, FILE_RESIN_CONFIG,
|
from .version import Version
|
||||||
HOMEASSISTANT_CONFIG, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE)
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -21,33 +20,21 @@ def initialize_system_data():
|
|||||||
"Create Home-Assistant config folder %s", HOMEASSISTANT_CONFIG)
|
"Create Home-Assistant config folder %s", HOMEASSISTANT_CONFIG)
|
||||||
os.mkdir(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
|
# 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
|
# supervisor/homeassistant image/tag versions
|
||||||
versions = {}
|
conf_version = Version()
|
||||||
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())
|
|
||||||
|
|
||||||
# update version
|
return conf_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
|
|
||||||
|
|
||||||
|
|
||||||
def initialize_logging():
|
def initialize_logging():
|
||||||
|
@ -10,8 +10,11 @@ FILE_RESIN_CONFIG = '/boot/config.json'
|
|||||||
FILE_HASSIO_ADDONS = '/data/addons.json'
|
FILE_HASSIO_ADDONS = '/data/addons.json'
|
||||||
FILE_HASSIO_VERSION = '/data/version.json'
|
FILE_HASSIO_VERSION = '/data/version.json'
|
||||||
|
|
||||||
HOMEASSISTANT_SHARE = os.environ['SUPERVISOR_SHARE']
|
HASSIO_SHARE = os.environ['SUPERVISOR_SHARE']
|
||||||
HOMEASSISTANT_CONFIG = "{}/config".format(HOMEASSISTANT_SHARE)
|
HASSIO_DOCKER = os.environ['SUPERVISOR_NAME']
|
||||||
|
|
||||||
|
HOMEASSISTANT_CONFIG = "{}/homeassistant_config".format(HASSIO_SHARE)
|
||||||
|
HOMEASSISTANT_SSL = "{}/homeassistant_ssl".format(HASSIO_SHARE)
|
||||||
|
|
||||||
HTTP_PORT = 9123
|
HTTP_PORT = 9123
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import asyncio
|
|||||||
|
|
||||||
import docker
|
import docker
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
class DockerBase(object):
|
class DockerBase(object):
|
||||||
"""Docker hassio wrapper."""
|
"""Docker hassio wrapper."""
|
||||||
|
@ -4,7 +4,10 @@ import asyncio
|
|||||||
import docker
|
import docker
|
||||||
|
|
||||||
import . from DockerBase
|
import . from DockerBase
|
||||||
|
from ..const.py import HOMEASSISTANT_CONFIG, HOMEASSISTANT_SSL, HASSIO_DOCKER
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
HASS_DOCKER_NAME = 'homeassistant'
|
||||||
|
|
||||||
class DockerHomeAssistant(DockerBase):
|
class DockerHomeAssistant(DockerBase):
|
||||||
"""Docker hassio wrapper for HomeAssistant."""
|
"""Docker hassio wrapper for HomeAssistant."""
|
||||||
@ -17,14 +20,17 @@ 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,
|
||||||
remove=True,
|
remove=True,
|
||||||
network_mode='host',
|
network_mode='host',
|
||||||
restart_policy={
|
restart_policy={
|
||||||
"Name": "always",
|
"Name": "always",
|
||||||
"MaximumRetryCount": 10,
|
"MaximumRetryCount": 10,
|
||||||
},
|
},
|
||||||
|
links={HASSIO_DOCKER: 'HASSIO'},
|
||||||
volumes={
|
volumes={
|
||||||
'/data': {'bind': '/data', 'mode': 'rw'}
|
HOMEASSISTANT_CONFIG: {'bind': '/config', 'mode': 'rw'},
|
||||||
|
HOMEASSISTANT_SSL: {'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