88description:
99- Create, update or delete a PowerDNS records using API
1010options:
11+ content:
12+ description:
13+ - Content of the record
14+ - Could be an ip address or hostname
1115 name:
1216 description:
1317 - Record name
18+ - If name is not an FQDN, zone will be added at the end to create an FQDN
1419 required: true
1520 server:
1621 description:
17- - Server name
22+ - Server name.
1823 required: false
1924 default: localhost
25+ ttl:
26+ description:
27+ - Record TTL
28+ required: false
29+ default: 86400
2030 type:
2131 description:
2232 - Record type
2333 required: false
24- choices: ['A', 'AAAA', 'PTR']
34+ choices: ['A', 'AAAA', 'CNAME', 'MX', ' PTR', 'SRV ']
2535 default: None
2636 zone:
2737 description:
3949 default: 8081
4050 pdns_prot:
4151 description:
42- - Protocol used to connect to PowerDNS API
52+ - Protocol used by PowerDNS API
4353 required: false
4454 default: http
4555 choices: ['http', 'https']
@@ -115,42 +125,52 @@ def get_zone(self, server, name):
115125 return None
116126 return self ._handle_request (req )
117127
118- def create_record (self , server , zone , name , rtype , content ):
128+ def get_record (self , server , zone , name ):
129+ return dict ()
130+
131+ def create_record (self , server , zone , name , rtype , content , disabled , ttl ):
119132 url = self ._get_zone_url (server = server , name = zone )
120133 record_content = list ()
121- record_content .append (dict (content = content , disabled = 'false' , name = name , ttl = 86400 , type = rtype ))
134+ record_content .append (dict (content = content , disabled = disabled , name = name , ttl = ttl , type = rtype ))
122135 record = dict (name = name , type = rtype , changetype = 'REPLACE' , records = record_content )
123136 rrsets = list ()
124137 rrsets .append (record )
125138 data = dict (rrsets = rrsets )
139+ # module.fail_json(msg='{data} {url}'.format(data=json.dumps(data), url=url))
126140 req = requests .patch (url = url , data = json .dumps (data ), headers = self .headers )
127141 return self ._handle_request (req )
128142
129143
130144def ensure (module , pdns_client ):
131145 content = module .params ['content' ]
132- rtype = module .params ['type' ]
133- zone = module .params ['zone' ]
146+ disabled = module .params ['disabled' ]
134147 name = module .params ['name' ]
135- if not zone in name :
136- name = '{name}.{zone}' .format (name = name , zone = zone )
148+ rtype = module .params ['type' ]
149+ ttl = module .params ['ttl' ]
150+ zone_name = module .params ['zone' ]
151+
152+ if not zone_name in name :
153+ name = '{name}.{zone}' .format (name = name , zone = zone_name )
137154 server = module .params ['server' ]
138155 state = module .params ['state' ]
139156
140157 try :
141- zone = pdns_client .get_zone (server , zone )
158+ zone = pdns_client .get_zone (server , zone_name )
142159 except PowerDNSError as e :
143160 module .fail_json (
144- msg = 'Could not get zone {name}: HTTP {code}: {err}' .format (name = zone , code = e .status_code , err = e .message ))
161+ msg = 'Could not get zone {name}: HTTP {code}: {err}' .format (name = zone_name , code = e .status_code ,
162+ err = e .message ))
145163
146164 if not zone :
147- module .fail_json (msg = 'Zone not found: {name}' .format (zone = zone ))
165+ module .fail_json (msg = 'Zone not found: {name}' .format (zone = zone_name ))
148166
149167 records = zone .get ('records' )
150168 record = next ((item for item in records if item ['content' ] == content ), None )
151169 if not record and state == 'present' :
152170 try :
153- pdns_client .create_record (server = server , zone = zone , name = name , rtype = rtype , content = content )
171+ pdns_client .create_record (server = server , zone = zone_name , name = name , rtype = rtype , content = content , ttl = ttl ,
172+ disabled = disabled )
173+ return True , pdns_client .get_record (server = server , zone = zone_name , name = name )
154174 except PowerDNSError as e :
155175 module .fail_json (
156176 msg = 'Could not create record {name}: HTTP {code}: {err}' .format (name = name , code = e .status_code ,
@@ -159,14 +179,16 @@ def ensure(module, pdns_client):
159179
160180
161181def main ():
162- global module
182+ # global module
163183 module = AnsibleModule (
164184 argument_spec = dict (
165185 content = dict (type = 'str' , required = False ),
186+ disabled = dict (type = 'bool' , default = False ),
166187 name = dict (type = 'str' , required = True ),
167188 server = dict (type = 'str' , default = 'localhost' ),
168189 state = dict (type = 'str' , default = 'present' , choices = ['present' , 'absent' ]),
169- type = dict (type = 'str' , required = False , choices = ['A' , 'AAAA' , 'PTR' ]),
190+ ttl = dict (type = 'int' , default = 86400 ),
191+ type = dict (type = 'str' , required = False , choices = ['A' , 'AAAA' , 'CNAME' , 'MX' , 'PTR' , 'SRV' ]),
170192 zone = dict (type = 'str' , required = True ),
171193 pdns_host = dict (type = 'str' , default = '127.0.0.1' ),
172194 pdns_port = dict (type = 'int' , default = 8081 ),
0 commit comments