Work on HostControll

This commit is contained in:
pvizeli 2017-03-28 17:48:26 +02:00
parent ffe8c13cb0
commit 8094b6beb4
9 changed files with 63 additions and 47 deletions

View File

@ -23,15 +23,20 @@ Communicate over unix socket with a host daemon.
- Answer - Answer
``` ```
[{}] {}|OK|ERROR
OK|ERROR
``` ```
## HassIO REST API ## HassIO REST API
Interface for HomeAssistant to controll things from supervisor. Interface for HomeAssistant to controll things from supervisor.
### host ### HassIO
- `/host/update`
Payload: {'version': '0.XX'}
If version is None it read last version from server.
### Host
- `/host/network` - `/host/network`
Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask': '', 'gateway': ''} Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask': '', 'gateway': ''}
@ -41,30 +46,33 @@ Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask':
- `/host/info` - `/host/info`
- `/host/update`
On some device we support host upates. Like ResinOS.
### /homeassistant/info ### HomeAssistant
### /homeassistant/update - `/homeassistant/info`
- Payload: {'version': '0.XX.Y'}
- `/homeassistant/update`
Payload: {'version': '0.XX.Y'}
If version is None it read last version from server. If version is None it read last version from server.
## REST API addons ### REST API addons
### /addons/info - `/addons/info`
### /addons/reload - `/addons/reload`
### /addons/{addon}/start - `/addons/{addon}/start`
- Payload: {'options': {}} Payload: {'options': {}}
### /addons/{addon}/stop - `/addons/{addon}/stop`
### /addons/{addon}/install - `/addons/{addon}/install`
- Payload: {'version': 'x.x'} Payload: {'version': 'x.x'}
### /addons/{addon}/uninstall - `/addons/{addon}/uninstall`
### /addons/{addon}/update
- Payload: {'version': 'x.x'}
- `/addons/{addon}/update`
Payload: {'version': 'x.x'}
If version is None it read last version from server. If version is None it read last version from server.

View File

@ -5,7 +5,7 @@ import os
from colorlog import ColoredFormatter from colorlog import ColoredFormatter
from .const import FILE_HASSIO_ADDONS from .const import FILE_HASSIO_ADDONS, SOCKET_DOCKER
from .config import CoreConfig from .config import CoreConfig
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -61,7 +61,7 @@ def initialize_logging():
def check_environment(): def check_environment():
"""Check if all environment are exists.""" """Check if all environment are exists."""
for key in ('SUPERVISOR_SHARE', 'SUPERVISOR_NAME', 'DOCKER_SOCKET', for key in ('SUPERVISOR_SHARE', 'SUPERVISOR_NAME',
'HOMEASSISTANT_REPOSITORY'): 'HOMEASSISTANT_REPOSITORY'):
try: try:
os.environ[key] os.environ[key]
@ -69,7 +69,7 @@ def check_environment():
_LOGGER.fatal("Can't find %s in env!", key) _LOGGER.fatal("Can't find %s in env!", key)
return False return False
if not os.path.isfile(os.environ['DOCKER_SOCKET']): if not os.path.isfile(SOCKET_DOCKER):
_LOGGER.fatal("Can't find docker socket!") _LOGGER.fatal("Can't find docker socket!")
return False return False

View File

@ -4,9 +4,9 @@ import logging
import os import os
from .const import ( from .const import (
FILE_HASSIO_CONFIG, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE, FILE_HASSIO_CONFIG, HOMEASSISTANT_TAG, HOMEASSISTANT_IMAGE,
CONF_HOMEASSISTANT_TAG, CONF_HOMEASSISTANT_IMAGE, HOMEASSISTANT_SSL, HOMEASSISTANT_SSL, HOMEASSISTANT_CONFIG, HASSIO_SHARE_EXT,
HOMEASSISTANT_CONFIG, HASSIO_SHARE_EXT, HASSIO_SHARE_INT) HASSIO_SHARE_INT)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -29,9 +29,8 @@ class CoreConfig(object):
if not self._data: if not self._data:
self._data.update({ self._data.update({
CONF_HOMEASSISTANT_IMAGE: HOMEASSISTANT_IMAGE: os.environ['HOMEASSISTANT_REPOSITORY'],
os.environ['HOMEASSISTANT_REPOSITORY'], HOMEASSISTANT_TAG: '',
CONF_HOMEASSISTANT_TAG: '',
}) })
def save(self): def save(self):
@ -45,17 +44,17 @@ class CoreConfig(object):
@property @property
def homeassistant_image(self): def homeassistant_image(self):
"""Return docker homeassistant repository.""" """Return docker homeassistant repository."""
return self._data.get(CONF_HOMEASSISTANT_IMAGE) return self._data.get(HOMEASSISTANT_IMAGE)
@property @property
def homeassistant_tag(self): def homeassistant_tag(self):
"""Return docker homeassistant tag.""" """Return docker homeassistant tag."""
return self._data.get(CONF_HOMEASSISTANT_TAG) return self._data.get(HOMEASSISTANT_TAG)
@homeassistant_tag.setter @homeassistant_tag.setter
def homeassistant_tag(self, value): def homeassistant_tag(self, value):
"""Set docker homeassistant tag.""" """Set docker homeassistant tag."""
self._data[CONF_HOMEASSISTANT_TAG] = value self._data[HOMEASSISTANT_TAG] = value
self.save() self.save()
@property @property

View File

@ -1,7 +1,7 @@
"""Const file for HassIO.""" """Const file for HassIO."""
import os import os
URL_SUPERVISOR_VERSION = \ URL_HASSIO_VERSION = \
'https://raw.githubusercontent.com/pvizeli/hassio/master/version.json' 'https://raw.githubusercontent.com/pvizeli/hassio/master/version.json'
URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons' URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons'
@ -15,12 +15,13 @@ HASSIO_SHARE_EXT = os.environ['SUPERVISOR_SHARE']
HASSIO_SHARE_INT = '/data' HASSIO_SHARE_INT = '/data'
HASSIO_DOCKER = os.environ['SUPERVISOR_NAME'] HASSIO_DOCKER = os.environ['SUPERVISOR_NAME']
SOCKET_DOCKER = "/var/run/docker.sock"
SOCKET_HC = "/var/run/hassio-hc.sock"
HOMEASSISTANT_CONFIG = "{}/homeassistant_config" HOMEASSISTANT_CONFIG = "{}/homeassistant_config"
HOMEASSISTANT_SSL = "{}/homeassistant_ssl" HOMEASSISTANT_SSL = "{}/homeassistant_ssl"
HTTP_PORT = 9123 HTTP_PORT = 9123
CONF_SUPERVISOR_IMAGE = 'supervisor_image' HOMEASSISTANT_IMAGE = 'homeassistant_image'
CONF_SUPERVISOR_TAG = 'supervisor_tag' HOMEASSISTANT_TAG = 'homeassistant_tag'
CONF_HOMEASSISTANT_IMAGE = 'homeassistant_image'
CONF_HOMEASSISTANT_TAG = 'homeassistant_tag'

View File

@ -5,9 +5,8 @@ import logging
import aiohttp import aiohttp
import docker import docker
import hassio.bootstrap as bootstrap from . import bootstrap, tools
import hassio.tools as tools from .const import HOMEASSISTANT_TAG, SOCKET_DOCKER
from .const import CONF_HOMEASSISTANT_TAG
from .docker.homeassistant import DockerHomeAssistant from .docker.homeassistant import DockerHomeAssistant
from .docker.supervisor import DockerSupervisor from .docker.supervisor import DockerSupervisor
@ -18,7 +17,7 @@ async def run_hassio(loop):
"""Start HassIO.""" """Start HassIO."""
websession = aiohttp.ClientSession(loop=loop) websession = aiohttp.ClientSession(loop=loop)
dock = docker.DockerClient( dock = docker.DockerClient(
base_url='unix://var/run/docker.sock', version='auto') base_url="unix:/{}".format(SOCKET_DOCKER), version='auto')
# init system # init system
config = bootstrap.initialize_system_data() config = bootstrap.initialize_system_data()
@ -42,12 +41,12 @@ async def run_hassio(loop):
while True: while True:
current = await tools.fetch_current_versions(websession) current = await tools.fetch_current_versions(websession)
if current and CONF_HOMEASSISTANT_TAG in current: if current and CONF_HOMEASSISTANT_TAG in current:
if await docker_hass.install(current[CONF_HOMEASSISTANT_TAG]): if await docker_hass.install(current[HOMEASSISTANT_TAG]):
break break
_LOGGER.warning("Can't fetch info from github. Retry in 60.") _LOGGER.warning("Can't fetch info from github. Retry in 60.")
await asyncio.sleep(60, loop=loop) await asyncio.sleep(60, loop=loop)
config.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG] config.homeassistant_tag = current[HOMEASSISTANT_TAG]
else: else:
_LOGGER.info("HomeAssistant docker is exists.") _LOGGER.info("HomeAssistant docker is exists.")

View File

@ -0,0 +1,13 @@
"""Host controll for HassIO."""
import asyncio
import logging
from .const import SOCKET_HC
_LOGGER = logging.getLogger(__name__)
class HostControll(object):
"""Manage host function."""
def __init__(self, loop):
"""Initialize host controll."""

View File

@ -4,7 +4,7 @@ import re
import async_timeout import async_timeout
from .const import URL_SUPERVISOR_VERSION from .const import URL_HASSIO_VERSION
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -16,7 +16,7 @@ async def fetch_current_versions(websession):
"""Fetch current versions from github.""" """Fetch current versions from github."""
try: try:
with async_timeout.timeout(10, loop=websession.loop): with async_timeout.timeout(10, loop=websession.loop):
async with websession.get(URL_SUPERVISOR_VERSION) as request: async with websession.get(URL_HASSIO_VERSION) as request:
return await request.json() return await request.json()
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except

View File

@ -13,8 +13,6 @@ runSupervisor() {
-v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \ -v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \
-v /resin-data:/data \ -v /resin-data:/data \
-v /var/log/supervisor-log:/var/log \ -v /var/log/supervisor-log:/var/log \
-e DOCKER_SOCKET=/var/run/docker.sock \
-e HASSIO_HC_SOCKET=/var/run/hassio-hc.sock \
-e SUPERVISOR_SHARE=/resin-data \ -e SUPERVISOR_SHARE=/resin-data \
-e SUPERVISOR_NAME=resin_supervisor \ -e SUPERVISOR_NAME=resin_supervisor \
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \ -e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \

View File

@ -13,8 +13,6 @@ docker run --privileged --name resin_supervisor \
-v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \ -v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock \
-v /resin-data:/data \ -v /resin-data:/data \
-v /var/log/supervisor-log:/var/log \ -v /var/log/supervisor-log:/var/log \
-e DOCKER_SOCKET=/var/run/docker.sock \
-e HASSIO_HC_SOCKET=/var/run/hassio-hc.sock \
-e SUPERVISOR_SHARE=/resin-data \ -e SUPERVISOR_SHARE=/resin-data \
-e SUPERVISOR_NAME=resin_supervisor \ -e SUPERVISOR_NAME=resin_supervisor \
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \ -e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \