mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-18 22:56:31 +00:00
Hassio 0.1
This commit is contained in:
parent
17eff21755
commit
45601ed2cd
3
.gitignore
vendored
3
.gitignore
vendored
@ -87,3 +87,6 @@ ENV/
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# pylint
|
||||
.pylint.d/
|
||||
|
@ -8,6 +8,7 @@ import hassio.core as core
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# pylint: disable=invalid-name
|
||||
if __name__ == "__main__":
|
||||
bootstrap.initialize_logging()
|
||||
|
||||
|
@ -68,7 +68,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(os.environ['DOCKER_SOCKET']):
|
||||
_LOGGER.fatal("Can't find docker socket!")
|
||||
return False
|
||||
|
||||
|
@ -5,8 +5,8 @@ import logging
|
||||
import aiohttp
|
||||
import docker
|
||||
|
||||
import .bootstrap
|
||||
import .tools
|
||||
import hassio.bootstrap as bootstrap
|
||||
import hassio.tools as tools
|
||||
from .const import CONF_HOMEASSISTANT_TAG
|
||||
from .docker.homeassistant import DockerHomeAssistant
|
||||
from .docker.supervisor import DockerSupervisor
|
||||
@ -29,8 +29,8 @@ async def run_hassio(loop):
|
||||
|
||||
# init HomeAssistant Docker
|
||||
docker_hass = DockerHomeAssistant(
|
||||
config, loop, dock, config.homeassistant_image,
|
||||
config.homeassistant_tag
|
||||
config, loop, dock, image=config.homeassistant_image,
|
||||
tag=config.homeassistant_tag
|
||||
)
|
||||
|
||||
# first start of supervisor?
|
||||
@ -44,10 +44,12 @@ async def run_hassio(loop):
|
||||
if current and CONF_HOMEASSISTANT_TAG in current:
|
||||
if await docker_hass.install(current[CONF_HOMEASSISTANT_TAG]):
|
||||
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)
|
||||
|
||||
config.homeassistant_tag = current[CONF_HOMEASSISTANT_TAG]
|
||||
else:
|
||||
_LOGGER.info("HomeAssistant docker is exists.")
|
||||
|
||||
# run HomeAssistant
|
||||
await docker_hass.run()
|
||||
|
@ -3,13 +3,15 @@ import logging
|
||||
|
||||
import docker
|
||||
|
||||
from ..tools import get_version_from_env, extract_image_name
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DockerBase(object):
|
||||
"""Docker hassio wrapper."""
|
||||
|
||||
def __init__(self, config, loop, dock, image, tag=None):
|
||||
def __init__(self, config, loop, dock, image=None, tag=None):
|
||||
"""Initialize docker base wrapper."""
|
||||
self.config = config
|
||||
self.loop = loop
|
||||
@ -66,6 +68,40 @@ class DockerBase(object):
|
||||
return False
|
||||
return self.container.status == 'running'
|
||||
|
||||
def attach(self):
|
||||
"""Attach to running docker container.
|
||||
|
||||
Return a Future.
|
||||
"""
|
||||
return self.loop.run_in_executor(None, self._attach)
|
||||
|
||||
def _attach(self):
|
||||
"""Attach to running docker container.
|
||||
|
||||
Need run inside executor.
|
||||
"""
|
||||
try:
|
||||
self.container = self.dock.containers.get(self.docker_name)
|
||||
self.image, self.tag = self.image = extract_image_name(
|
||||
self.container.attrs['Config']['Image'])
|
||||
except (docker.errors.DockerException, KeyError):
|
||||
_LOGGER.fatal(
|
||||
"Can't attach to %s docker container!", self.docker_name)
|
||||
|
||||
async def get_version(self):
|
||||
"""Read VERSION tag from ENV docker.
|
||||
|
||||
Is a coroutine.
|
||||
"""
|
||||
if self.container:
|
||||
try:
|
||||
self.version = get_version_from_env(
|
||||
self.container.attrs['Config']['Env'])
|
||||
except KeyError:
|
||||
_LOGGER.error("Can't read VERSION from docker env.")
|
||||
|
||||
return None
|
||||
|
||||
def run(self):
|
||||
"""Run docker image.
|
||||
|
||||
|
@ -1,43 +1,11 @@
|
||||
"""Init file for HassIO docker object."""
|
||||
import logging
|
||||
|
||||
import docker
|
||||
|
||||
from . import DockerBase
|
||||
from ..const import HASSIO_DOCKER
|
||||
from ..tools import get_version_from_env, extract_image_name
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DockerSupervisor(DockerBase):
|
||||
"""Docker hassio wrapper for HomeAssistant."""
|
||||
|
||||
def __init__(self, config, loop, dock):
|
||||
"""Initialize docker base wrapper."""
|
||||
super().__init__(config, loop, dock, None):
|
||||
|
||||
def attach(self):
|
||||
"""Pull docker image.
|
||||
|
||||
Return a Future.
|
||||
"""
|
||||
return self.loop.run_in_executor(None, self._attach)
|
||||
|
||||
def _attach(self):
|
||||
"""Attach object to supervisor container.
|
||||
|
||||
Need run inside executor.
|
||||
"""
|
||||
try:
|
||||
self.container = dock.containers.get(self.docker_name)
|
||||
self.image, self.tag = self.image = extract_image_name(
|
||||
self.container.attrs['Config']['Image'])
|
||||
self.version = get_version_from_env(
|
||||
self.container.attrs['Config']['Env'])
|
||||
except (docker.errors.DockerException, KeyError):
|
||||
_LOGGER.fatal("Can't attach to supervisor docker container!")
|
||||
|
||||
@property
|
||||
def docker_name(self):
|
||||
"""Return name of docker container."""
|
||||
|
@ -33,6 +33,7 @@ def get_version_from_env(env_list):
|
||||
_LOGGER.error("Can't find VERSION in env")
|
||||
return None
|
||||
|
||||
|
||||
def extract_image_name(image):
|
||||
"""Extract image name and tag from docker attrs."""
|
||||
data = _RE_IMAGE.match(image)
|
||||
|
Loading…
x
Reference in New Issue
Block a user