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
```
[{}]
OK|ERROR
{}|OK|ERROR
```
## HassIO REST API
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`
Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask': '', 'gateway': ''}
@ -41,30 +46,33 @@ Payload: {'hostname': '', 'mode': 'dhcp|fixed', 'ssid': '', 'ip': '', 'netmask':
- `/host/info`
- `/host/update`
On some device we support host upates. Like ResinOS.
### /homeassistant/info
### HomeAssistant
### /homeassistant/update
- Payload: {'version': '0.XX.Y'}
- `/homeassistant/info`
- `/homeassistant/update`
Payload: {'version': '0.XX.Y'}
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
- Payload: {'options': {}}
- `/addons/{addon}/start`
Payload: {'options': {}}
### /addons/{addon}/stop
- `/addons/{addon}/stop`
### /addons/{addon}/install
- Payload: {'version': 'x.x'}
- `/addons/{addon}/install`
Payload: {'version': 'x.x'}
### /addons/{addon}/uninstall
### /addons/{addon}/update
- Payload: {'version': 'x.x'}
- `/addons/{addon}/uninstall`
- `/addons/{addon}/update`
Payload: {'version': 'x.x'}
If version is None it read last version from server.

View File

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

View File

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

View File

@ -1,7 +1,7 @@
"""Const file for HassIO."""
import os
URL_SUPERVISOR_VERSION = \
URL_HASSIO_VERSION = \
'https://raw.githubusercontent.com/pvizeli/hassio/master/version.json'
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_DOCKER = os.environ['SUPERVISOR_NAME']
SOCKET_DOCKER = "/var/run/docker.sock"
SOCKET_HC = "/var/run/hassio-hc.sock"
HOMEASSISTANT_CONFIG = "{}/homeassistant_config"
HOMEASSISTANT_SSL = "{}/homeassistant_ssl"
HTTP_PORT = 9123
CONF_SUPERVISOR_IMAGE = 'supervisor_image'
CONF_SUPERVISOR_TAG = 'supervisor_tag'
CONF_HOMEASSISTANT_IMAGE = 'homeassistant_image'
CONF_HOMEASSISTANT_TAG = 'homeassistant_tag'
HOMEASSISTANT_IMAGE = 'homeassistant_image'
HOMEASSISTANT_TAG = 'homeassistant_tag'

View File

@ -5,9 +5,8 @@ import logging
import aiohttp
import docker
import hassio.bootstrap as bootstrap
import hassio.tools as tools
from .const import CONF_HOMEASSISTANT_TAG
from . import bootstrap, tools
from .const import HOMEASSISTANT_TAG, SOCKET_DOCKER
from .docker.homeassistant import DockerHomeAssistant
from .docker.supervisor import DockerSupervisor
@ -18,7 +17,7 @@ async def run_hassio(loop):
"""Start HassIO."""
websession = aiohttp.ClientSession(loop=loop)
dock = docker.DockerClient(
base_url='unix://var/run/docker.sock', version='auto')
base_url="unix:/{}".format(SOCKET_DOCKER), version='auto')
# init system
config = bootstrap.initialize_system_data()
@ -42,12 +41,12 @@ async def run_hassio(loop):
while True:
current = await tools.fetch_current_versions(websession)
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
_LOGGER.warning("Can't fetch info from github. Retry in 60.")
await asyncio.sleep(60, loop=loop)
config.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG]
config.homeassistant_tag = current[HOMEASSISTANT_TAG]
else:
_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
from .const import URL_SUPERVISOR_VERSION
from .const import URL_HASSIO_VERSION
_LOGGER = logging.getLogger(__name__)
@ -16,7 +16,7 @@ async def fetch_current_versions(websession):
"""Fetch current versions from github."""
try:
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()
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 /resin-data:/data \
-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_NAME=resin_supervisor \
-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 /resin-data:/data \
-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_NAME=resin_supervisor \
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \