Ejemplo n.º 1
0
def main():
    argument_spec = openstack_full_argument_spec(
        zone=dict(required=True),
        name=dict(required=True),
        recordset_type=dict(required=False,
                            choices=[
                                'a', 'aaaa', 'mx', 'cname', 'txt', 'ns', 'srv',
                                'ptr', 'caa'
                            ]),
        records=dict(required=False, type='list', elements='str'),
        description=dict(required=False, default=None),
        ttl=dict(required=False, type='int'),
        state=dict(default='present', choices=['absent', 'present']),
    )

    module_kwargs = openstack_module_kwargs()
    module = AnsibleModule(argument_spec,
                           required_if=[('state', 'present',
                                         ['recordset_type', 'records'])],
                           supports_check_mode=True,
                           **module_kwargs)

    module.module_min_sdk_version = '0.28.0'
    zone = module.params.get('zone')
    name = module.params.get('name')
    state = module.params.get('state')

    sdk, cloud = openstack_cloud_from_module(module)
    recordsets = cloud.search_recordsets(zone, name_or_id=name)

    if recordsets:
        recordset = recordsets[0]
        try:
            recordset_id = recordset['id']
        except KeyError as e:
            module.fail_json(msg=str(e))
    else:
        # recordsets is filtered by type and should never be more than 1 return
        recordset = None

    if state == 'present':
        recordset_type = module.params.get('recordset_type').upper()
        records = module.params.get('records')
        description = module.params.get('description')
        ttl = module.params.get('ttl')

        kwargs = {}
        if description:
            kwargs['description'] = description
        kwargs['records'] = records

        if module.check_mode:
            module.exit_json(changed=_system_state_change(
                state, records, description, ttl, recordset))

        if recordset is None:
            if ttl:
                kwargs['ttl'] = ttl
            else:
                kwargs['ttl'] = 300

            recordset = cloud.create_recordset(zone=zone,
                                               name=name,
                                               recordset_type=recordset_type,
                                               **kwargs)
            changed = True
        else:

            if ttl:
                kwargs['ttl'] = ttl

            pre_update_recordset = recordset
            changed = _system_state_change(state, records, description, ttl,
                                           pre_update_recordset)
            if changed:
                recordset = cloud.update_recordset(zone=zone,
                                                   name_or_id=recordset_id,
                                                   **kwargs)

        module.exit_json(changed=changed, recordset=recordset)

    elif state == 'absent':
        if module.check_mode:
            module.exit_json(changed=_system_state_change(
                state, None, None, None, recordset))

        if recordset is None:
            changed = False
        else:
            cloud.delete_recordset(zone, recordset_id)
            changed = True
        module.exit_json(changed=changed)