mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-16 13:46:31 +00:00
Allow map special device to homeassistant docker (#75)
* Allow map special device to homeassistant docker * fix lint * fix '/dev/'
This commit is contained in:
parent
1aa24e40ae
commit
d15b6f0294
10
API.md
10
API.md
@ -203,7 +203,8 @@ Optional:
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"version": "INSTALL_VERSION",
|
"version": "INSTALL_VERSION",
|
||||||
"last_version": "LAST_VERSION"
|
"last_version": "LAST_VERSION",
|
||||||
|
"devices": []
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -221,6 +222,13 @@ Output the raw docker log
|
|||||||
|
|
||||||
- POST `/homeassistant/restart`
|
- POST `/homeassistant/restart`
|
||||||
|
|
||||||
|
- POST `/homeassistant/options`
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"devices": [],
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### REST API addons
|
### REST API addons
|
||||||
|
|
||||||
- GET `/addons/{addon}/info`
|
- GET `/addons/{addon}/info`
|
||||||
|
@ -65,6 +65,7 @@ class RestAPI(object):
|
|||||||
api_hass = APIHomeAssistant(self.config, self.loop, dock_homeassistant)
|
api_hass = APIHomeAssistant(self.config, self.loop, dock_homeassistant)
|
||||||
|
|
||||||
self.webapp.router.add_get('/homeassistant/info', api_hass.info)
|
self.webapp.router.add_get('/homeassistant/info', api_hass.info)
|
||||||
|
self.webapp.router.add_post('/homeassistant/options', api_hass.options)
|
||||||
self.webapp.router.add_post('/homeassistant/update', api_hass.update)
|
self.webapp.router.add_post('/homeassistant/update', api_hass.update)
|
||||||
self.webapp.router.add_post('/homeassistant/restart', api_hass.restart)
|
self.webapp.router.add_post('/homeassistant/restart', api_hass.restart)
|
||||||
self.webapp.router.add_get('/homeassistant/logs', api_hass.logs)
|
self.webapp.router.add_get('/homeassistant/logs', api_hass.logs)
|
||||||
|
@ -5,10 +5,15 @@ import logging
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from .util import api_process, api_process_raw, api_validate
|
from .util import api_process, api_process_raw, api_validate
|
||||||
from ..const import ATTR_VERSION, ATTR_LAST_VERSION
|
from ..const import ATTR_VERSION, ATTR_LAST_VERSION, ATTR_DEVICES
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
SCHEMA_OPTIONS = vol.Schema({
|
||||||
|
vol.Optional(ATTR_DEVICES): [vol.Coerce(str)],
|
||||||
|
})
|
||||||
|
|
||||||
SCHEMA_VERSION = vol.Schema({
|
SCHEMA_VERSION = vol.Schema({
|
||||||
vol.Optional(ATTR_VERSION): vol.Coerce(str),
|
vol.Optional(ATTR_VERSION): vol.Coerce(str),
|
||||||
})
|
})
|
||||||
@ -29,8 +34,19 @@ class APIHomeAssistant(object):
|
|||||||
return {
|
return {
|
||||||
ATTR_VERSION: self.homeassistant.version,
|
ATTR_VERSION: self.homeassistant.version,
|
||||||
ATTR_LAST_VERSION: self.config.last_homeassistant,
|
ATTR_LAST_VERSION: self.config.last_homeassistant,
|
||||||
|
ATTR_DEVICES: self.config.homeassistant_devices,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@api_process
|
||||||
|
async def options(self, request):
|
||||||
|
"""Set homeassistant options."""
|
||||||
|
body = await api_validate(SCHEMA_OPTIONS, request)
|
||||||
|
|
||||||
|
if ATTR_DEVICES in body:
|
||||||
|
self.config.homeassistant_devices = body[ATTR_DEVICES]
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def update(self, request):
|
async def update(self, request):
|
||||||
"""Update homeassistant."""
|
"""Update homeassistant."""
|
||||||
|
@ -18,6 +18,7 @@ DATETIME_FORMAT = "%Y%m%d %H:%M:%S"
|
|||||||
|
|
||||||
HOMEASSISTANT_CONFIG = PurePath("homeassistant")
|
HOMEASSISTANT_CONFIG = PurePath("homeassistant")
|
||||||
HOMEASSISTANT_LAST = 'homeassistant_last'
|
HOMEASSISTANT_LAST = 'homeassistant_last'
|
||||||
|
HOMEASSISTANT_DEVICES = 'homeassistant_devices'
|
||||||
|
|
||||||
HASSIO_SSL = PurePath("ssl")
|
HASSIO_SSL = PurePath("ssl")
|
||||||
HASSIO_LAST = 'hassio_last'
|
HASSIO_LAST = 'hassio_last'
|
||||||
@ -49,6 +50,7 @@ SCHEMA_CONFIG = vol.Schema({
|
|||||||
vol.Optional(API_ENDPOINT): vol.Coerce(str),
|
vol.Optional(API_ENDPOINT): vol.Coerce(str),
|
||||||
vol.Optional(TIMEZONE, default='UTC'): validate_timezone,
|
vol.Optional(TIMEZONE, default='UTC'): validate_timezone,
|
||||||
vol.Optional(HOMEASSISTANT_LAST): vol.Coerce(str),
|
vol.Optional(HOMEASSISTANT_LAST): vol.Coerce(str),
|
||||||
|
vol.Optional(HOMEASSISTANT_DEVICES, default=[]): [vol.Coerce(str)],
|
||||||
vol.Optional(HASSIO_LAST): vol.Coerce(str),
|
vol.Optional(HASSIO_LAST): vol.Coerce(str),
|
||||||
vol.Optional(ADDONS_CUSTOM_LIST, default=[]): [vol.Url()],
|
vol.Optional(ADDONS_CUSTOM_LIST, default=[]): [vol.Url()],
|
||||||
vol.Optional(SECURITY_INITIALIZE, default=False): vol.Boolean(),
|
vol.Optional(SECURITY_INITIALIZE, default=False): vol.Boolean(),
|
||||||
@ -134,6 +136,7 @@ class CoreConfig(Config):
|
|||||||
def upstream_beta(self, value):
|
def upstream_beta(self, value):
|
||||||
"""Set beta upstream mode."""
|
"""Set beta upstream mode."""
|
||||||
self._data[UPSTREAM_BETA] = bool(value)
|
self._data[UPSTREAM_BETA] = bool(value)
|
||||||
|
self.save()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def timezone(self):
|
def timezone(self):
|
||||||
@ -146,6 +149,17 @@ class CoreConfig(Config):
|
|||||||
self._data[TIMEZONE] = value
|
self._data[TIMEZONE] = value
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def homeassistant_devices(self):
|
||||||
|
"""Return list of special device to map into homeassistant."""
|
||||||
|
return self._data[HOMEASSISTANT_DEVICES]
|
||||||
|
|
||||||
|
@homeassistant_devices.setter
|
||||||
|
def homeassistant_devices(self, value):
|
||||||
|
"""Set list of special device."""
|
||||||
|
self._data[HOMEASSISTANT_DEVICES] = value
|
||||||
|
self.save()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def homeassistant_image(self):
|
def homeassistant_image(self):
|
||||||
"""Return docker homeassistant repository."""
|
"""Return docker homeassistant repository."""
|
||||||
|
@ -22,6 +22,18 @@ class DockerHomeAssistant(DockerBase):
|
|||||||
"""Return name of docker container."""
|
"""Return name of docker container."""
|
||||||
return HASS_DOCKER_NAME
|
return HASS_DOCKER_NAME
|
||||||
|
|
||||||
|
@property
|
||||||
|
def devices(self):
|
||||||
|
"""Create list of special device to map into docker."""
|
||||||
|
if not self.config.homeassistant_devices:
|
||||||
|
return
|
||||||
|
|
||||||
|
devices = []
|
||||||
|
for device in self.config.homeassistant_devices:
|
||||||
|
devices.append("/dev/{0}:/dev/{0}:rwm".format(device))
|
||||||
|
|
||||||
|
return devices
|
||||||
|
|
||||||
def _run(self):
|
def _run(self):
|
||||||
"""Run docker image.
|
"""Run docker image.
|
||||||
|
|
||||||
@ -39,6 +51,7 @@ class DockerHomeAssistant(DockerBase):
|
|||||||
name=self.name,
|
name=self.name,
|
||||||
detach=True,
|
detach=True,
|
||||||
privileged=True,
|
privileged=True,
|
||||||
|
devices=self.devices,
|
||||||
network_mode='host',
|
network_mode='host',
|
||||||
environment={
|
environment={
|
||||||
'HASSIO': self.config.api_endpoint,
|
'HASSIO': self.config.api_endpoint,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user