diff options
-rw-r--r-- | roles/lib_dyn/library/dyn_record.py | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/roles/lib_dyn/library/dyn_record.py b/roles/lib_dyn/library/dyn_record.py index 7b80064f4..a52ed7c41 100644 --- a/roles/lib_dyn/library/dyn_record.py +++ b/roles/lib_dyn/library/dyn_record.py @@ -85,7 +85,7 @@ options: - 'Record's "Time to live". Number of seconds the record remains cached' - 'in DNS servers or c(0) to use the default TTL for the zone.' required: false - default: 0 + default: 3600 notes: - The module makes a broad assumption that there will be only one record per "node" (FQDN). @@ -96,18 +96,18 @@ author: "Russell Harrison" ''' EXAMPLES = ''' +# Attempting to cname www.example.com to web1.example.com - name: Update CNAME record - local_action: - module: dyn_record + dyn_record: state: present record_fqdn: www.example.com zone: example.com record_type: CNAME record_value: web1.example.com + record_ttl: 7200 - name: Update A record - local_action: - module: dyn_record + dyn_record: state: present record_fqdn: web1.example.com zone: example.com @@ -144,7 +144,10 @@ def get_record_type(record_key): return record_key.replace('_records', '').upper() def get_record_key(record_type): - '''Get the key to look up records in the dictionary returned from get_any_records.''' + '''Get the key to look up records in the dictionary returned from get_any_records. + example: + 'cname_records' + ''' return record_type.lower() + '_records' def get_any_records(module, node): @@ -187,7 +190,7 @@ def main(): record_type=dict(required=False, type='str', choices=[ 'A', 'AAAA', 'CNAME', 'PTR', 'TXT']), record_value=dict(required=False, type='str'), - record_ttl=dict(required=False, default=0, type='int'), + record_ttl=dict(required=False, default=3600, type='int'), ), required_together=( ['record_fqdn', 'record_value', 'record_ttl', 'record_type'] @@ -233,28 +236,26 @@ def main(): # All states will need a list of the exiting records for the zone. dyn_node_records = get_any_records(module, dyn_node) + dyn_values = get_record_values(dyn_node_records) + + # get_record_values() + if module.params['state'] == 'list': - module.exit_json(changed=False, - records=get_record_values( - dyn_node_records, - )) + module.exit_json(changed=False, records=dyn_values) if module.params['state'] == 'present': # First get a list of existing records for the node - values = get_record_values(dyn_node_records) - value_key = get_record_key(module.params['record_type']) + record_type_key = get_record_key(module.params['record_type']) param_value = module.params['record_value'] # Check to see if the record is already in place before doing anything. - if (dyn_node_records and - dyn_node_records[value_key][0].ttl == module.params['record_ttl'] and - (param_value in values[value_key] or - param_value + '.' in values[value_key])): + if dyn_node_records and \ + int(dyn_node_records[record_type_key][0].ttl) == int(module.params['record_ttl']) \ + and ((param_value in dyn_values[record_type_key]) or param_value + '.' in dyn_values[record_type_key]): module.exit_json(changed=False) - # Working on the assumption that there is only one record per # node we will first delete the node if there are any records before # creating the correct record @@ -270,8 +271,13 @@ def main(): # Now publish the zone since we've updated it. dyn_zone.publish() - module.exit_json(changed=True, - msg="Created node %s in zone %s" % (dyn_node_name, module.params['zone'])) + + rmsg = "Created node [%s] " % dyn_node_name + rmsg += "in zone: %s, " % module.params['zone'] + rmsg += "record_type: %s, " % module.params['record_type'] + rmsg += "record_value: %s, " % module.params['record_value'] + rmsg += "record_ttl: %s" % module.params['record_ttl'] + module.exit_json(changed=True, msg=rmsg) if module.params['state'] == 'absent': # If there are any records present we'll want to delete the node. |