Exemple #1
0
def commit(changes, retry_interval, wait, wait_timeout):
    """Commit changes, but retry PriorRequestNotComplete errors."""
    result = None
    retry = 10
    while True:
        try:
            retry -= 1
            result = changes.commit()
            break
        except boto.route53.exception.DNSServerError as e:
            code = e.body.split("<Code>")[1]
            code = code.split("</Code>")[0]
            if code != 'PriorRequestNotComplete' or retry < 0:
                raise e
            time.sleep(float(retry_interval))

    if wait:
        timeout_time = time.time() + wait_timeout
        connection = changes.connection
        change = result['ChangeResourceRecordSetsResponse']['ChangeInfo']
        status = Status(connection, change)
        while status.status != 'INSYNC' and time.time() < timeout_time:
            time.sleep(WAIT_RETRY_SLEEP)
            status.update()
        if time.time() >= timeout_time:
            raise TimeoutError()
        return result
Exemple #2
0
def commit(changes, retry_interval, wait, wait_timeout):
    """Commit changes, but retry PriorRequestNotComplete errors."""
    result = None
    retry = 10
    while True:
        try:
            retry -= 1
            result = changes.commit()
            break
        except boto.route53.exception.DNSServerError as e:
            code = e.body.split("<Code>")[1]
            code = code.split("</Code>")[0]
            if code != 'PriorRequestNotComplete' or retry < 0:
                raise e
            time.sleep(float(retry_interval))

    if wait:
        timeout_time = time.time() + wait_timeout
        connection = changes.connection
        change = result['ChangeResourceRecordSetsResponse']['ChangeInfo']
        status = Status(connection, change)
        while status.status != 'INSYNC' and time.time() < timeout_time:
            time.sleep(WAIT_RETRY_SLEEP)
            status.update()
        if time.time() >= timeout_time:
            raise TimeoutError()
        return result
Exemple #3
0
    def update_alias_record(self,
                            old_record,
                            new_identifier=None,
                            alias_dns_name=None,
                            comment=""):
        """
        Update an existing alias record in this Zone.  Returns a Status object.

        :type old_record: ResourceRecord
        :param old_record: A ResourceRecord (e.g. returned by find_records)

        See _new_alias_record for additional parameter documentation.
        """
        record = copy.copy(old_record)
        changes = ResourceRecordSets(self.route53connection, self.id, comment)
        changes.add_change_record("DELETE", record)

        if alias_dns_name:
            self._new_alias_record(changes, record.type, record.name,
                                   new_identifier, record.alias_hosted_zone_id,
                                   alias_dns_name, comment)
        else:
            self._new_alias_record(changes, record.type, record.name,
                                   new_identifier, record.alias_hosted_zone_id,
                                   record.alias_dns_name, comment)

        return Status(self.route53connection, self._commit(changes))
Exemple #4
0
 def add_record(self, resource_type, name, value, ttl=60, identifier=None,
                comment=""):
     """
     Add a new record to this Zone.  See _new_record for parameter
     documentation.  Returns a Status object.
     """
     changes = ResourceRecordSets(self.route53connection, self.id, comment)
     self._new_record(changes, resource_type, name, value, ttl, identifier,
                      comment)
     return Status(self.route53connection, self._commit(changes))
Exemple #5
0
 def add_alias_record(self,
                      resource_type,
                      name,
                      alias_hosted_zone_id,
                      alias_dns_name,
                      identifier=None,
                      comment=""):
     """
     Add a new alias record to this Zone.  See _new_alias for parameter
     documentation.  Returns a Status object.
     """
     changes = ResourceRecordSets(self.route53connection, self.id, comment)
     self._new_alias_record(changes, resource_type, name, identifier,
                            alias_hosted_zone_id, alias_dns_name, comment)
     return Status(self.route53connection, self._commit(changes))
Exemple #6
0
    def delete_record(self, record, comment=""):
        """
        Delete one or more records from this Zone.  Returns a Status object.

        :param record: A ResourceRecord (e.g. returned by
           find_records) or list, tuple, or set of ResourceRecords.

        :type comment: str
        :param comment: A comment that will be stored with the change.
        """
        changes = ResourceRecordSets(self.route53connection, self.id, comment)
        if type(record) in [list, tuple, set]:
            for r in record:
                changes.add_change_record("DELETE", r)
        else:
            changes.add_change_record("DELETE", record)
        return Status(self.route53connection, self._commit(changes))
Exemple #7
0
    def update_record(self, old_record, new_value, new_ttl=None,
                      new_identifier=None, comment=""):
        """
        Update an existing record in this Zone.  Returns a Status object.

        :type old_record: ResourceRecord
        :param old_record: A ResourceRecord (e.g. returned by find_records)

        See _new_record for additional parameter documentation.
        """
        new_ttl = new_ttl or default_ttl
        record = copy.copy(old_record)
        changes = ResourceRecordSets(self.route53connection, self.id, comment)
        changes.add_change_record("DELETE", record)
        self._new_record(changes, record.type, record.name,
                         new_value, new_ttl, new_identifier, comment)
        return Status(self.route53connection, self._commit(changes))
Exemple #8
0
        try:
            retry -= 1
            result = changes.commit()
            break
        except boto.route53.exception.DNSServerError, e:
            code = e.body.split("<Code>")[1]
            code = code.split("</Code>")[0]
            if code != 'PriorRequestNotComplete' or retry < 0:
                raise e
            time.sleep(float(retry_interval))

    if wait:
        timeout_time = time.time() + wait_timeout
        connection = changes.connection
        change = result['ChangeResourceRecordSetsResponse']['ChangeInfo']
        status = Status(connection, change)
        while status.status != 'INSYNC' and time.time() < timeout_time:
            time.sleep(WAIT_RETRY_SLEEP)
            status.update()
        if time.time() >= timeout_time:
            raise TimeoutError()
    return result


def main():
    argument_spec = ec2_argument_spec()
    argument_spec.update(
        dict(
            command=dict(choices=['get', 'create', 'delete'], required=True),
            zone=dict(required=True),
            hosted_zone_id=dict(required=False, default=None),