Add optional ttl config to route53 component (#18135)

* Add optional ttl config to route53 component

* linting :)
This commit is contained in:
Pascal de Ladurantaye 2018-11-02 23:41:26 -04:00 committed by Aaron Bach
parent 03d94df3cd
commit 6a5f9faa33
2 changed files with 28 additions and 5 deletions

View File

@ -6,10 +6,11 @@ https://home-assistant.io/components/route53/
""" """
from datetime import timedelta from datetime import timedelta
import logging import logging
from typing import List
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_DOMAIN, CONF_ZONE from homeassistant.const import CONF_DOMAIN, CONF_TTL, CONF_ZONE
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_time_interval from homeassistant.helpers.event import track_time_interval
@ -24,6 +25,7 @@ CONF_RECORDS = 'records'
DOMAIN = 'route53' DOMAIN = 'route53'
INTERVAL = timedelta(minutes=60) INTERVAL = timedelta(minutes=60)
DEFAULT_TTL = 300
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.Schema({
@ -32,6 +34,7 @@ CONFIG_SCHEMA = vol.Schema({
vol.Required(CONF_RECORDS): vol.All(cv.ensure_list, [cv.string]), vol.Required(CONF_RECORDS): vol.All(cv.ensure_list, [cv.string]),
vol.Required(CONF_SECRET_ACCESS_KEY): cv.string, vol.Required(CONF_SECRET_ACCESS_KEY): cv.string,
vol.Required(CONF_ZONE): cv.string, vol.Required(CONF_ZONE): cv.string,
vol.Optional(CONF_TTL, default=DEFAULT_TTL): cv.positive_int,
}) })
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -43,16 +46,29 @@ def setup(hass, config):
zone = config[DOMAIN][CONF_ZONE] zone = config[DOMAIN][CONF_ZONE]
aws_access_key_id = config[DOMAIN][CONF_ACCESS_KEY_ID] aws_access_key_id = config[DOMAIN][CONF_ACCESS_KEY_ID]
aws_secret_access_key = config[DOMAIN][CONF_SECRET_ACCESS_KEY] aws_secret_access_key = config[DOMAIN][CONF_SECRET_ACCESS_KEY]
ttl = config[DOMAIN][CONF_TTL]
def update_records_interval(now): def update_records_interval(now):
"""Set up recurring update.""" """Set up recurring update."""
_update_route53( _update_route53(
aws_access_key_id, aws_secret_access_key, zone, domain, records) aws_access_key_id,
aws_secret_access_key,
zone,
domain,
records,
ttl
)
def update_records_service(now): def update_records_service(now):
"""Set up service for manual trigger.""" """Set up service for manual trigger."""
_update_route53( _update_route53(
aws_access_key_id, aws_secret_access_key, zone, domain, records) aws_access_key_id,
aws_secret_access_key,
zone,
domain,
records,
ttl
)
track_time_interval(hass, update_records_interval, INTERVAL) track_time_interval(hass, update_records_interval, INTERVAL)
@ -61,7 +77,13 @@ def setup(hass, config):
def _update_route53( def _update_route53(
aws_access_key_id, aws_secret_access_key, zone, domain, records): aws_access_key_id: str,
aws_secret_access_key: str,
zone: str,
domain: str,
records: List[str],
ttl: int,
):
import boto3 import boto3
from ipify import get_ip from ipify import get_ip
from ipify import exceptions from ipify import exceptions
@ -95,7 +117,7 @@ def _update_route53(
'ResourceRecordSet': { 'ResourceRecordSet': {
'Name': '{}.{}'.format(record, domain), 'Name': '{}.{}'.format(record, domain),
'Type': 'A', 'Type': 'A',
'TTL': 300, 'TTL': ttl,
'ResourceRecords': [ 'ResourceRecords': [
{'Value': ipaddress}, {'Value': ipaddress},
], ],

View File

@ -140,6 +140,7 @@ CONF_TIME_ZONE = 'time_zone'
CONF_TIMEOUT = 'timeout' CONF_TIMEOUT = 'timeout'
CONF_TOKEN = 'token' CONF_TOKEN = 'token'
CONF_TRIGGER_TIME = 'trigger_time' CONF_TRIGGER_TIME = 'trigger_time'
CONF_TTL = 'ttl'
CONF_TYPE = 'type' CONF_TYPE = 'type'
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement' CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
CONF_UNIT_SYSTEM = 'unit_system' CONF_UNIT_SYSTEM = 'unit_system'