mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-24 09:36:31 +00:00
Add MySQL service support (#1448)
This commit is contained in:
parent
5d17e1011a
commit
745af3c039
@ -103,7 +103,7 @@ _LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
RE_VOLUME = re.compile(r"^(config|ssl|addons|backup|share)(?::(rw|ro))?$")
|
||||
RE_SERVICE = re.compile(r"^(?P<service>mqtt):(?P<rights>provide|want|need)$")
|
||||
RE_SERVICE = re.compile(r"^(?P<service>mqtt|mysql):(?P<rights>provide|want|need)$")
|
||||
|
||||
V_STR = "str"
|
||||
V_INT = "int"
|
||||
|
@ -2,12 +2,13 @@
|
||||
from typing import Dict, List
|
||||
|
||||
from ..coresys import CoreSys, CoreSysAttributes
|
||||
from .const import SERVICE_MQTT
|
||||
from .const import SERVICE_MQTT, SERVICE_MYSQL
|
||||
from .data import ServicesData
|
||||
from .interface import ServiceInterface
|
||||
from .modules.mqtt import MQTTService
|
||||
from .modules.mysql import MySQLService
|
||||
|
||||
AVAILABLE_SERVICES = {SERVICE_MQTT: MQTTService}
|
||||
AVAILABLE_SERVICES = {SERVICE_MQTT: MQTTService, SERVICE_MYSQL: MySQLService}
|
||||
|
||||
|
||||
class ServiceManager(CoreSysAttributes):
|
||||
|
@ -9,3 +9,4 @@ ATTR_SSL = "ssl"
|
||||
ATTR_USERNAME = "username"
|
||||
|
||||
SERVICE_MQTT = "mqtt"
|
||||
SERVICE_MYSQL = "mysql"
|
||||
|
@ -3,7 +3,7 @@ from typing import Any, Dict
|
||||
|
||||
from ..const import FILE_HASSIO_SERVICES
|
||||
from ..utils.json import JsonConfig
|
||||
from .const import SERVICE_MQTT
|
||||
from .const import SERVICE_MQTT, SERVICE_MYSQL
|
||||
from .validate import SCHEMA_SERVICES_CONFIG
|
||||
|
||||
|
||||
@ -18,3 +18,8 @@ class ServicesData(JsonConfig):
|
||||
def mqtt(self) -> Dict[str, Any]:
|
||||
"""Return settings for MQTT service."""
|
||||
return self._data[SERVICE_MQTT]
|
||||
|
||||
@property
|
||||
def mysql(self) -> Dict[str, Any]:
|
||||
"""Return settings for MySQL service."""
|
||||
return self._data[SERVICE_MYSQL]
|
||||
|
77
hassio/services/modules/mysql.py
Normal file
77
hassio/services/modules/mysql.py
Normal file
@ -0,0 +1,77 @@
|
||||
"""Provide the MySQL Service."""
|
||||
import logging
|
||||
from typing import Any, Dict
|
||||
|
||||
from hassio.addons.addon import Addon
|
||||
from hassio.exceptions import ServicesError
|
||||
from hassio.validate import network_port
|
||||
import voluptuous as vol
|
||||
|
||||
from ..const import (
|
||||
ATTR_ADDON,
|
||||
ATTR_HOST,
|
||||
ATTR_PASSWORD,
|
||||
ATTR_PORT,
|
||||
ATTR_USERNAME,
|
||||
SERVICE_MYSQL,
|
||||
)
|
||||
from ..interface import ServiceInterface
|
||||
|
||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# pylint: disable=no-value-for-parameter
|
||||
SCHEMA_SERVICE_MYSQL = vol.Schema(
|
||||
{
|
||||
vol.Required(ATTR_HOST): vol.Coerce(str),
|
||||
vol.Required(ATTR_PORT): network_port,
|
||||
vol.Optional(ATTR_USERNAME): vol.Coerce(str),
|
||||
vol.Optional(ATTR_PASSWORD): vol.Coerce(str),
|
||||
}
|
||||
)
|
||||
|
||||
SCHEMA_CONFIG_MYSQL = SCHEMA_SERVICE_MYSQL.extend(
|
||||
{vol.Required(ATTR_ADDON): vol.Coerce(str)}
|
||||
)
|
||||
|
||||
|
||||
class MySQLService(ServiceInterface):
|
||||
"""Provide MySQL services."""
|
||||
|
||||
@property
|
||||
def slug(self) -> str:
|
||||
"""Return slug of this service."""
|
||||
return SERVICE_MYSQL
|
||||
|
||||
@property
|
||||
def _data(self) -> Dict[str, Any]:
|
||||
"""Return data of this service."""
|
||||
return self.sys_services.data.mysql
|
||||
|
||||
@property
|
||||
def schema(self) -> vol.Schema:
|
||||
"""Return data schema of this service."""
|
||||
return SCHEMA_SERVICE_MYSQL
|
||||
|
||||
def set_service_data(self, addon: Addon, data: Dict[str, Any]) -> None:
|
||||
"""Write the data into service object."""
|
||||
if self.enabled:
|
||||
_LOGGER.error(
|
||||
"There is already a MySQL in use from %s", self._data[ATTR_ADDON]
|
||||
)
|
||||
raise ServicesError()
|
||||
|
||||
self._data.update(data)
|
||||
self._data[ATTR_ADDON] = addon.slug
|
||||
|
||||
_LOGGER.info("Set %s as service provider for MySQL", addon.slug)
|
||||
self.save()
|
||||
|
||||
def del_service_data(self, addon: Addon) -> None:
|
||||
"""Remove the data from service object."""
|
||||
if not self.enabled:
|
||||
_LOGGER.warning("Can't remove not exists services")
|
||||
raise ServicesError()
|
||||
|
||||
self._data.clear()
|
||||
self.save()
|
@ -2,11 +2,13 @@
|
||||
import voluptuous as vol
|
||||
|
||||
from ..utils.validate import schema_or
|
||||
from .const import SERVICE_MQTT
|
||||
from .const import SERVICE_MQTT, SERVICE_MYSQL
|
||||
from .modules.mqtt import SCHEMA_CONFIG_MQTT
|
||||
from .modules.mysql import SCHEMA_CONFIG_MYSQL
|
||||
|
||||
|
||||
SCHEMA_SERVICES_CONFIG = vol.Schema(
|
||||
{vol.Optional(SERVICE_MQTT, default=dict): schema_or(SCHEMA_CONFIG_MQTT)},
|
||||
{vol.Optional(SERVICE_MYSQL, default=dict): schema_or(SCHEMA_CONFIG_MYSQL)},
|
||||
extra=vol.REMOVE_EXTRA,
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user