---
title: Charmhub | Deploy Bind using Charmhub - The Open Operator Collection
description: Deploy the latest version of Bind on any cloud.
url: https://charmhub.io/bind/libraries/dns_record
---

# Bind

[Canonical IS DevOps](https://charmhub.io/publisher/canonical-is-devops "View all packages from Canonical IS DevOps")

* [Canonical IS DevOps](https://charmhub.io/publisher/canonical-is-devops "View all packages from Canonical IS DevOps")

Platform:

22.04

edge 82

```
juju deploy bind --channel edge
```

[Learn to deploy on juju >](https://juju.is/docs/juju/manage-applications)

[Toggle side navigation](https://charmhub.io/bind/libraries/dns_record#drawer)

## charms.bind.v0.dns\_record

* [*Docstrings*Docstrings](https://charmhub.io/bind/libraries/dns_record)
  [*Code*Source code](https://charmhub.io/bind/libraries/dns_record/source-code)
* + Download

    Fetch library

    ```
    charmcraft fetch-lib charms.bind.v0.dns_record
    ```

    [Download dns\_record.py](https://charmhub.io/bind/libraries/dns_record/download)
  + *Last updated* 09 Dec 2024
  + *Revision* Library version 0.3

Library to manage the integration with the Bind charm.

This library contains the Requires and Provides classes for handling the integration
between an application and a charm providing the `dns_record` integration.

###### Requirer Charm

```
from charms.bind.v0.dns_record import DNSRecordRequires

class DNSRecordRequirerCharm(ops.CharmBase):
    def __init__(self, *args):
        super().__init__(*args)
        self.dns_record = DNSRecordRequires(self)
        self.framework.observe(self.dns_record.on.dns_record_request_processed, self._handler)
        ...

    def _handler(self, events: DNSRecordRequestProcessed) -> None:
        ...
```

As shown above, the library provides a custom event to handle the scenario in
which new DNS data has been added or updated.

The DNSRecordRequires provides an `update_relation_data` method to update the relation data by
passing a `DNSRecordRequirerData` data object, requesting new DNS records.

###### Provider Charm

Following the previous example, this is an example of the provider charm.

```
from charms.bind.v0.dns_record import DNSRecordProvides

class DNSRecordProviderCharm(ops.CharmBase):
    def __init__(self, *args):
        super().__init__(*args)
        self.dns_record = DNSRecordProvides(self)
        ...
```

The DNSRecordProvides object wraps the list of relations into a `relations` property
and provides an `update_relation_data` method to update the relation data by passing
a `DNSRecordRelationData` data object.

```
class DNSRecordProviderCharm(ops.CharmBase):
    ...

    def _on_config_changed(self, _) -> None:
        for relation in self.model.relations[self.dns_record.relation_name]:
            self.dns_record.update_relation_data(relation, self._get_dns_record_data())
```

---

Index

* [class Status](https://charmhub.io/bind/libraries/dns_record#status)
* + [def \_missing\_(
    cls,
    \_)](https://charmhub.io/bind/libraries/dns_record#status-_missing_)
* [class RecordType](https://charmhub.io/bind/libraries/dns_record#recordtype)
* [class RecordClass](https://charmhub.io/bind/libraries/dns_record#recordclass)
* [class DNSProviderData](https://charmhub.io/bind/libraries/dns_record#dnsproviderdata)
* [class DNSRecordProviderData](https://charmhub.io/bind/libraries/dns_record#dnsrecordproviderdata)
* + [def to\_relation\_data(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordproviderdata-to_relation_data)
* + [def from\_relation(
    cls,
    relation)](https://charmhub.io/bind/libraries/dns_record#dnsrecordproviderdata-from_relation)
* [class RequirerEntry](https://charmhub.io/bind/libraries/dns_record#requirerentry)
* + [def validate\_dns\_entry(
    self,
    \_)](https://charmhub.io/bind/libraries/dns_record#requirerentry-validate_dns_entry)
* [class DNSRecordRequirerData](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequirerdata)
* + [def to\_relation\_data(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequirerdata-to_relation_data)
* + [def from\_relation(
    cls,
    relation)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequirerdata-from_relation)
* [class DNSRecordRequestProcessed](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestprocessed)
* + [def get\_dns\_record\_provider\_relation\_data(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestprocessed-get_dns_record_provider_relation_data)
* + [def dns\_entries(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestprocessed-dns_entries)
* [class DNSRecordRequestReceived](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestreceived)
* + [def dns\_record\_requirer\_relation\_data(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestreceived-dns_record_requirer_relation_data)
* + [def dns\_entries(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestreceived-dns_entries)
* + [def processed\_entries(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequestreceived-processed_entries)
* [class DNSRecordRequiresEvents](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequiresevents)
* [class DNSRecordRequires](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequires)
* + [def \_\_init\_\_(
    self,
    charm,
    relation\_name)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequires-__init__)
* + [def get\_remote\_relation\_data(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequires-get_remote_relation_data)
* + [def update\_relation\_data(
    self,
    relation,
    dns\_record\_requirer\_data)](https://charmhub.io/bind/libraries/dns_record#dnsrecordrequires-update_relation_data)
* [class DNSRecordProvidesEvents](https://charmhub.io/bind/libraries/dns_record#dnsrecordprovidesevents)
* [class DNSRecordProvides](https://charmhub.io/bind/libraries/dns_record#dnsrecordprovides)
* + [def \_\_init\_\_(
    self,
    charm,
    relation\_name)](https://charmhub.io/bind/libraries/dns_record#dnsrecordprovides-__init__)
* + [def get\_remote\_relation\_data(
    self)](https://charmhub.io/bind/libraries/dns_record#dnsrecordprovides-get_remote_relation_data)
* + [def update\_relation\_data(
    self,
    relation,
    dns\_record\_provider\_data)](https://charmhub.io/bind/libraries/dns_record#dnsrecordprovides-update_relation_data)

#### class Status

Represent the status values.

Attributes

APPROVED

approved

PERMISSION\_DENIED

permission\_denied

CONFLICT

conflict

INVALID\_DATA

invalid\_data

FAILURE

failure

UNKNOWN

unknown

PENDING

pending

Methods

Status.
\_missing\_(

cls

,
\_: object
)

Handle the enum when the value is missing.

Returns

value

Status.UNKNOWN.

#### class RecordType

Represent the DNS record types.

Attributes

A

A

AAAA

AAAA

CNAME

CNAME

MX

MX

DKIM

DKIM

SPF

SPF

DMARC

DMARC

TXT

TXT

CAA

CAA

SRV

SRV

SVCB

SVCB

HTTPS

HTTPS

PTR

PTR

SOA

SOA

NS

NS

DS

DS

DNSKEY

DNSKEY

#### class RecordClass

Represent the DNS record classes.

Attributes

IN

IN

#### class DNSProviderData

Represent the DNS provider data.

Attributes

uuid

UUID for the domain request.

status

status for the domain request.

description

status description for the domain request.

#### class DNSRecordProviderData

List of entries for the provider to manage.

Attributes

dns\_entries

list of entries to manage.

Methods

DNSRecordProviderData.
to\_relation\_data(

*self*
)

Convert an instance of DNSRecordProviderData to the relation representation.

Returns

Dict containing the representation.

DNSRecordProviderData.
from\_relation(

cls

,
relation
)

Initialize a new instance of the DNSRecordProviderData class from the relation.

Arguments

relation

the relation.

Returns

A DNSRecordProviderData instance.

#### class RequirerEntry

DNS requirer entries requested.

Attributes

domain

the domain name.

host\_label

host label.

ttl

TTL.

record\_class

DNS record class.

record\_type

DNS record type.

record\_data

the record value.

uuid

UUID for this entry.

Methods

RequirerEntry.
validate\_dns\_entry(

*self*

,
\_: ValidationInfo
)

Validate DNS entries.

Returns

the DNS entry if valid.

#### class DNSRecordRequirerData

List of domains for the provider to manage.

Attributes

dns\_entries

list of entries to manage.

Methods

DNSRecordRequirerData.
to\_relation\_data(

*self*
)

Convert an instance of DNSRecordRequirerData to the relation representation.

Returns

Dict containing the representation.

DNSRecordRequirerData.
from\_relation(

cls

,
relation
)

Get a Tuple of DNSRecordRequirerData and DNSRecordProviderData from the relation data.

Arguments

relation

the relation.

Returns

the relation data and the processed entries for it.

#### class DNSRecordRequestProcessed

DNS event emitted when a new request is processed.

Attributes

dns\_entries

list of processed entries.

Methods

DNSRecordRequestProcessed.
get\_dns\_record\_provider\_relation\_data(

*self*
)

Get a DNSRecordProviderData for the relation data.

Returns

the DNSRecordProviderData for the relation data.

DNSRecordRequestProcessed.
dns\_entries(

*self*
)

Description

Fetch the DNS entries from the relation. None

#### class DNSRecordRequestReceived

DNS event emitted when a new request is made.

Attributes

dns\_record\_requirer\_relation\_data

the DNS requirer relation data.

dns\_entries

list of requested entries.

processed\_entries

list of processed entries from the original request.

Methods

DNSRecordRequestReceived.
dns\_record\_requirer\_relation\_data(

*self*
)

Description

Get the requirer data and corresponding provider data the relation data. None

DNSRecordRequestReceived.
dns\_entries(

*self*
)

Description

Fetch the DNS entries from the relation. None

DNSRecordRequestReceived.
processed\_entries(

*self*
)

Description

Fetch the processed DNS entries. None

#### class DNSRecordRequiresEvents

DNS record requirer events.

Attributes

dns\_record\_request\_processed

the DNSRecordRequestProcessed.

Description

This class defines the events that a DNS record requirer can emit.

#### class DNSRecordRequires

Requirer side of the DNS requires relation.

Attributes

on

events the provider can emit.

Methods

DNSRecordRequires.
\_\_init\_\_(

*self*

,
charm

,
relation\_name: str
)

Construct.

Arguments

charm

the provider charm.

relation\_name

the relation name.

DNSRecordRequires.
get\_remote\_relation\_data(

*self*
)

Retrieve the remote relation data.

Returns

DNSRecordProviderData

the relation data.

DNSRecordRequires.
update\_relation\_data(

*self*

,
relation

,
dns\_record\_requirer\_data: DNSRecordRequirerData
)

Update the relation data.

Arguments

relation

the relation for which to update the data.

dns\_record\_requirer\_data

DNSRecordRequirerData wrapping the data to be updated.

#### class DNSRecordProvidesEvents

DNS record provider events.

Attributes

dns\_record\_request\_received

the DNSRecordRequestReceived.

Description

This class defines the events that a DNS record provider can emit.

#### class DNSRecordProvides

Provider side of the DNS record relation.

Attributes

on

events the provider can emit.

Methods

DNSRecordProvides.
\_\_init\_\_(

*self*

,
charm

,
relation\_name: str
)

Construct.

Arguments

charm

the provider charm.

relation\_name

the relation name.

DNSRecordProvides.
get\_remote\_relation\_data(

*self*
)

Retrieve all the remote relations data.

Returns

the relation data and the processed entries for it.

DNSRecordProvides.
update\_relation\_data(

*self*

,
relation

,
dns\_record\_provider\_data: DNSRecordProviderData
)

Update the relation data.

Arguments

relation

the relation for which to update the data.

dns\_record\_provider\_data

a DNSRecordProviderData instance wrapping the data to be
updated.
