def zone_absent(domain, profile): ''' Ensures a record is absent. :param domain: Zone name, i.e. the domain name :type domain: ``str`` :param profile: The profile key :type profile: ``str`` ''' zones = libcloud_dns_module.list_zones(profile) matching_zone = [z for z in zones if z.domain == domain] if len(matching_zone) == 0: return state_result(True, "Zone already absent") else: result = libcloud_dns_module.delete_zone(matching_zone[0].id, profile) return state_result(result, "Deleted zone")
def record_absent(name, zone, type, data, profile): ''' Ensures a record is absent. :param name: Record name without the domain name (e.g. www). Note: If you want to create a record for a base domain name, you should specify empty string ('') for this argument. :type name: ``str`` :param zone: Zone where the requested record is created, the domain name :type zone: ``str`` :param type: DNS record type (A, AAAA, ...). :type type: ``str`` :param data: Data for the record (depends on the record type). :type data: ``str`` :param profile: The profile key :type profile: ``str`` ''' zones = libcloud_dns_module.list_zones(profile) try: matching_zone = [z for z in zones if z.domain == zone][0] except IndexError: return state_result(False, "Zone could not be found") records = libcloud_dns_module.list_records(matching_zone.id, profile) matching_records = [record for record in records if record.name == name and record.type == type and record.data == data] if len(matching_records) > 0: result = [] for record in matching_records: result.append(libcloud_dns_module.delete_record( matching_zone.id, record.id, profile)) return state_result(all(result), "Removed {0} records".format(len(result))) else: return state_result(True, "Records already absent")
def record_present(name, zone, type, data, profile): ''' Ensures a record is present. :param name: Record name without the domain name (e.g. www). Note: If you want to create a record for a base domain name, you should specify empty string ('') for this argument. :type name: ``str`` :param zone: Zone where the requested record is created, the domain name :type zone: ``str`` :param type: DNS record type (A, AAAA, ...). :type type: ``str`` :param data: Data for the record (depends on the record type). :type data: ``str`` :param profile: The profile key :type profile: ``str`` ''' zones = libcloud_dns_module.list_zones(profile) try: matching_zone = [z for z in zones if z.domain == zone][0] except IndexError: return state_result(False, "Could not locate zone") records = libcloud_dns_module.list_records(matching_zone.id, profile) matching_records = [record for record in records if record.name == name and record.type == type and record.data == data] if len(matching_records) == 0: result = libcloud_dns_module.create_record( name, matching_zone.id, type, data, profile) return state_result(result, "Created new record") else: return state_result(True, "Record already exists")
def zone_present(domain, type, profile): ''' Ensures a record is present. :param domain: Zone name, i.e. the domain name :type domain: ``str`` :param type: Zone type (master / slave), defaults to master :type type: ``str`` :param profile: The profile key :type profile: ``str`` ''' zones = libcloud_dns_module.list_zones(profile) if not type: type = 'master' matching_zone = [z for z in zones if z.domain == domain] if len(matching_zone) > 0: return state_result(True, "Zone already exists") else: result = libcloud_dns_module.create_zone(domain, profile, type) return state_result(result, "Created new zone")