Skip to content

Commit c8a2d78

Browse files
committed
Add ddns settings to the OpenWRT backend
1 parent 747b2fe commit c8a2d78

File tree

4 files changed

+196
-1
lines changed

4 files changed

+196
-1
lines changed

netjsonconfig/backends/openwrt/converters/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
from .rules import Rules
1010
from .switch import Switch
1111
from .wireless import Wireless
12+
from .ddns import Ddns
1213

1314
__all__ = ['Default', 'Interfaces', 'General',
1415
'Led', 'Ntp', 'OpenVpn', 'Radios',
1516
'Routes', 'Rules', 'Switch',
16-
'Wireless']
17+
'Wireless', 'Ddns']
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from collections import OrderedDict
2+
from ..schema import schema
3+
from .base import OpenWrtConverter
4+
5+
6+
class Ddns(OpenWrtConverter):
7+
netjson_key = 'ddns'
8+
intermediate_key = 'ddns'
9+
_uci_types = ['ddns', 'service']
10+
_schema = schema['properties']['ddns']
11+
12+
def to_intermediate_loop(self, block, result, index=None):
13+
if block:
14+
provider_list = self.__intermediate_providers(block.pop('providers', {}))
15+
block.update({
16+
'.type': 'ddns',
17+
'.name': block.pop('id', 'global'),
18+
})
19+
result.setdefault('ddns', [])
20+
result['ddns'] = [self.sorted_dict(block)] + provider_list
21+
return result
22+
23+
def __intermediate_providers(self, providers):
24+
"""
25+
converts NetJSON provider to
26+
UCI intermediate data structure
27+
"""
28+
result = []
29+
for provider in providers:
30+
uci_name = self._get_uci_name(provider['lookup_host'])
31+
resultdict = OrderedDict((('.name', uci_name),
32+
('.type', 'service')))
33+
for key, value in provider.items():
34+
resultdict[key] = value
35+
result.append(resultdict)
36+
return result
37+
38+
def to_netjson_loop(self, block, result, index):
39+
result['ddns'] = self.__netjson_ddns(block)
40+
return result
41+
42+
def __netjson_ddns(self, ddns):
43+
del ddns['.type']
44+
_name = ddns.pop('.name')
45+
if _name != 'ddns':
46+
ddns['id'] = _name
47+
return self.type_cast(ddns)

netjsonconfig/backends/openwrt/openwrt.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class OpenWrt(BaseBackend):
2121
converters.Radios,
2222
converters.Wireless,
2323
converters.OpenVpn,
24+
converters.Ddns,
2425
converters.Default,
2526
]
2627
parser = OpenWrtParser

netjsonconfig/backends/openwrt/schema.py

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,152 @@
454454
}
455455
}
456456
}
457+
},
458+
"ddns": {
459+
"type": "object",
460+
"title": "DDNS Settings",
461+
"additionalProperties": True,
462+
"propertyOrder": 12,
463+
"properties": {
464+
"upd_privateip": {
465+
"type": "boolean",
466+
"title": "upd_privateip",
467+
"default": False,
468+
"format": "checkbox",
469+
"propertyOrder": 1,
470+
},
471+
"ddns_dateformat": {
472+
"type": "string",
473+
"title": "ddns_dateformat",
474+
"default": "%F %R",
475+
"propertyOrder": 2,
476+
},
477+
"ddns_rundir": {
478+
"type": "string",
479+
"title": "ddns_rundir",
480+
"default": "/var/run/ddns",
481+
"propertyOrder": 3,
482+
},
483+
"ddns_logdir": {
484+
"type": "string",
485+
"title": "ddns_logdir",
486+
"default": "/var/log/ddns",
487+
"propertyOrder": 4,
488+
},
489+
"ddns_loglines": {
490+
"type": "integer",
491+
"title": "ddns_loglines",
492+
"default": 250,
493+
"propertyOrder": 5,
494+
},
495+
"use_curl": {
496+
"type": "boolean",
497+
"title": "use_curl",
498+
"default": False,
499+
"format": "checkbox",
500+
"propertyOrder": 6,
501+
},
502+
"providers": {
503+
"type": "array",
504+
"title": "Service Providers",
505+
"uniqueItems": True,
506+
"additionalItems": True,
507+
"propertyOrder": 7,
508+
"items": {
509+
"type": "object",
510+
"title": "DDNS provider",
511+
"additionalProperties": True,
512+
"required": [
513+
"enabled",
514+
"interface",
515+
"ip_source",
516+
"lookup_host",
517+
"domain",
518+
"username",
519+
"password",
520+
],
521+
"properties": {
522+
"enabled": {
523+
"type": "boolean",
524+
"title": "enabled",
525+
"default": False,
526+
"format": "checkbox",
527+
"propertyOrder": 1,
528+
},
529+
"interface": {
530+
"type": "string",
531+
"title": "interface",
532+
"propertyOrder": 2,
533+
},
534+
"ip_source": {
535+
"type": "string",
536+
"title": "ip_source",
537+
"default": "network",
538+
"propertyOrder": 3,
539+
},
540+
"lookup_host": {
541+
"type": "string",
542+
"title": "lookup_host",
543+
"propertyOrder": 4,
544+
},
545+
"domain": {
546+
"type": "string",
547+
"title": "domain",
548+
"propertyOrder": 5,
549+
},
550+
"username": {
551+
"type": "string",
552+
"title": "username",
553+
"propertyOrder": 6,
554+
},
555+
"password": {
556+
"type": "string",
557+
"title": "password",
558+
"propertyOrder": 7,
559+
},
560+
"service_name": {
561+
"type": "string",
562+
"title": "service_name",
563+
"propertyOrder": 8,
564+
},
565+
"update_url": {
566+
"type": "string",
567+
"title": "update_url",
568+
"propertyOrder": 9,
569+
},
570+
"update_script": {
571+
"type": "string",
572+
"title": "update_script",
573+
"propertyOrder": 10,
574+
},
575+
"ip_interface": {
576+
"type": "string",
577+
"title": "ip_interface",
578+
"propertyOrder": 11,
579+
},
580+
"use_syslog": {
581+
"type": "integer",
582+
"title": "use_syslog",
583+
"enum": [
584+
"disable",
585+
"info, notice, warning, errors",
586+
"notice, warning, errors",
587+
"warning, errors",
588+
"errors"
589+
],
590+
"default": 0,
591+
"propertyOrder": 12,
592+
},
593+
"use_logfile": {
594+
"type": "boolean",
595+
"title": "use_logfile",
596+
"default": True,
597+
"propertyOrder": 13,
598+
}
599+
}
600+
}
601+
}
602+
}
457603
}
458604
}
459605
})

0 commit comments

Comments
 (0)