|
|
@ -18,6 +18,16 @@ from ..record import Record |
|
|
from .base import BaseProvider |
|
|
from .base import BaseProvider |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def escape_semicolon(s): |
|
|
|
|
|
assert s |
|
|
|
|
|
return s.replace(';', '\\;') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unescape_semicolon(s): |
|
|
|
|
|
assert s |
|
|
|
|
|
return s.replace('\\;', ';') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _AzureRecord(object): |
|
|
class _AzureRecord(object): |
|
|
'''Wrapper for OctoDNS record for AzureProvider to make dns_client calls. |
|
|
'''Wrapper for OctoDNS record for AzureProvider to make dns_client calls. |
|
|
|
|
|
|
|
|
@ -123,9 +133,9 @@ class _AzureRecord(object): |
|
|
|
|
|
|
|
|
def _params_for_TXT(self, data, key_name, azure_class): |
|
|
def _params_for_TXT(self, data, key_name, azure_class): |
|
|
try: # API for TxtRecord has list of str, even for singleton |
|
|
try: # API for TxtRecord has list of str, even for singleton |
|
|
values = data['values'] |
|
|
|
|
|
|
|
|
values = [unescape_semicolon(v) for v in data['values']] |
|
|
except KeyError: |
|
|
except KeyError: |
|
|
values = [data['value']] |
|
|
|
|
|
|
|
|
values = [unescape_semicolon(data['value'])] |
|
|
return {key_name: [azure_class([v]) for v in values]} |
|
|
return {key_name: [azure_class([v]) for v in values]} |
|
|
|
|
|
|
|
|
def _equals(self, b): |
|
|
def _equals(self, b): |
|
|
@ -394,7 +404,8 @@ class AzureProvider(BaseProvider): |
|
|
for ar in azrecord.srv_records]} |
|
|
for ar in azrecord.srv_records]} |
|
|
|
|
|
|
|
|
def _data_for_TXT(self, azrecord): |
|
|
def _data_for_TXT(self, azrecord): |
|
|
return {'values': [reduce((lambda a, b: a + b), ar.value) |
|
|
|
|
|
|
|
|
return {'values': [escape_semicolon(reduce((lambda a, b: a + b), |
|
|
|
|
|
ar.value)) |
|
|
for ar in azrecord.txt_records]} |
|
|
for ar in azrecord.txt_records]} |
|
|
|
|
|
|
|
|
def _apply_Create(self, change): |
|
|
def _apply_Create(self, change): |
|
|
|