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
|
# Rope project settings
|
||||||
.ropeproject
|
.ropeproject
|
||||||
|
|
||||||
|
# pylint
|
||||||
|
.pylint.d/
|
||||||
|
@ -8,6 +8,7 @@ import hassio.core as core
|
|||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
bootstrap.initialize_logging()
|
bootstrap.initialize_logging()
|
||||||
|
|
||||||
|
@ -68,7 +68,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(os.environ['DOCKER_SOCKET']):
|
||||||
_LOGGER.fatal("Can't find docker socket!")
|
_LOGGER.fatal("Can't find docker socket!")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ import logging
|
|||||||
import aiohttp
|
import aiohttp
|
||||||
import docker
|
import docker
|
||||||
|
|
||||||
import .bootstrap
|
import hassio.bootstrap as bootstrap
|
||||||
import .tools
|
import hassio.tools as tools
|
||||||
from .const import CONF_HOMEASSISTANT_TAG
|
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
|
||||||
@ -29,8 +29,8 @@ async def run_hassio(loop):
|
|||||||
|
|
||||||
# init HomeAssistant Docker
|
# init HomeAssistant Docker
|
||||||
docker_hass = DockerHomeAssistant(
|
docker_hass = DockerHomeAssistant(
|
||||||
config, loop, dock, config.homeassistant_image,
|
config, loop, dock, image=config.homeassistant_image,
|
||||||
config.homeassistant_tag
|
tag=config.homeassistant_tag
|
||||||
)
|
)
|
||||||
|
|
||||||
# first start of supervisor?
|
# first start of supervisor?
|
||||||
@ -44,10 +44,12 @@ async def run_hassio(loop):
|
|||||||
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[CONF_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[CONF_HOMEASSISTANT_TAG]
|
||||||
|
else:
|
||||||
|
_LOGGER.info("HomeAssistant docker is exists.")
|
||||||
|
|
||||||
# run HomeAssistant
|
# run HomeAssistant
|
||||||
await docker_hass.run()
|
await docker_hass.run()
|
||||||
|
@ -3,13 +3,15 @@ import logging
|
|||||||
|
|
||||||
import docker
|
import docker
|
||||||
|
|
||||||
|
from ..tools import get_version_from_env, extract_image_name
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class DockerBase(object):
|
class DockerBase(object):
|
||||||
"""Docker hassio wrapper."""
|
"""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."""
|
"""Initialize docker base wrapper."""
|
||||||
self.config = config
|
self.config = config
|
||||||
self.loop = loop
|
self.loop = loop
|
||||||
@ -66,6 +68,40 @@ class DockerBase(object):
|
|||||||
return False
|
return False
|
||||||
return self.container.status == 'running'
|
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):
|
def run(self):
|
||||||
"""Run docker image.
|
"""Run docker image.
|
||||||
|
|
||||||
|
@ -1,43 +1,11 @@
|
|||||||
"""Init file for HassIO docker object."""
|
"""Init file for HassIO docker object."""
|
||||||
import logging
|
|
||||||
|
|
||||||
import docker
|
|
||||||
|
|
||||||
from . import DockerBase
|
from . import DockerBase
|
||||||
from ..const import HASSIO_DOCKER
|
from ..const import HASSIO_DOCKER
|
||||||
from ..tools import get_version_from_env, extract_image_name
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class DockerSupervisor(DockerBase):
|
class DockerSupervisor(DockerBase):
|
||||||
"""Docker hassio wrapper for HomeAssistant."""
|
"""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
|
@property
|
||||||
def docker_name(self):
|
def docker_name(self):
|
||||||
"""Return name of docker container."""
|
"""Return name of docker container."""
|
||||||
|
@ -33,6 +33,7 @@ def get_version_from_env(env_list):
|
|||||||
_LOGGER.error("Can't find VERSION in env")
|
_LOGGER.error("Can't find VERSION in env")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def extract_image_name(image):
|
def extract_image_name(image):
|
||||||
"""Extract image name and tag from docker attrs."""
|
"""Extract image name and tag from docker attrs."""
|
||||||
data = _RE_IMAGE.match(image)
|
data = _RE_IMAGE.match(image)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user