# Managing Records

While zones are used to break up the DNS namespace into a hierarchy, ‘resource records’, or simply ‘records’, are used to store data within the namespace. Each record has a

- Name: the string that indicates its location in the DNS namespace.

- Type: the set of letter codes that identify the record’s usage. For example `A` for an address record or `CNAME` for a canonical name record.

- Class: the set of letter codes that specify the namespace for the record. Typically, this is `IN` for internet, though other namespaces do exist.

- TTL: the duration in seconds that the record remains valid.

- Rdata: the data for the record, such as an IP address for an `A` type record or another record name for a `CNAME` type record.

## Recordsets in Designate

DNS records in Designate are managed using `Recordsets`, which represent one or more DNS records with the same Name and Type, but potentially different data. For example, a recordset named `www.example.com`, with a type of `A`, that contains the data `192.0.2.1` and `192.0.2.2` might reflect two web servers hosting `www.example.com` located at those two IP addresses.

You must create Recordsets within a zone. If you delete a zone that contains recordsets, those recordsets within the zone are also deleted.

### Creating a recordset

By default, any user can create Recordsets in zones that their project owns. In this example, a user has created a zone named `example.org.`.

Recordsets are created using the `openstack recordset create` command and require a zone, a name, a type, and data for the record. To recreate the earlier example using the OpenStack client with the Designate plugin, the user would run:

    $ openstack recordset create --type A --record 192.0.2.1 example.org. www
    +-------------+--------------------------------------+
    | Field       | Value                                |
    +-------------+--------------------------------------+
    | action      | CREATE                               |
    | created_at  | 2021-05-03T03:13:46.000000           |
    | description | None                                 |
    | id          | 549c3e83-443f-474b-b467-6bcd7cb9f37d |
    | name        | www.example.org.                     |
    | project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
    | records     | 192.0.2.1                            |
    | status      | PENDING                              |
    | ttl         | None                                 |
    | type        | A                                    |
    | updated_at  | None                                 |
    | version     | 1                                    |
    | zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
    | zone_name   | example.org.                         |
    +-------------+--------------------------------------+

As the final argument `www` is not a fully qualified domain name (FQDN) it is prepended to the zone name. You can achieve the same result using the FQDN, `www.example.org.`. Note that the trailing `.` is required when using the FQDN. Omitting it results in the name, `"www.example.org.example.org."`.

You can supply the `--record` argument multiple times to create multiple records within the recordset. A typical use for this is Round-robin DNS.

    $ openstack recordset create --type A --record 192.0.2.1 --record 192.0.2.2 example.org. web
    +-------------+--------------------------------------+
    | Field       | Value                                |
    +-------------+--------------------------------------+
    | action      | CREATE                               |
    | created_at  | 2021-05-03T03:26:43.000000           |
    | description | None                                 |
    | id          | 9e0fba43-ca67-44ed-b9d9-fc1242920319 |
    | name        | web.example.org.                     |
    | project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
    | records     | 192.0.2.1                            |
    |             | 192.0.2.2                            |
    | status      | PENDING                              |
    | ttl         | None                                 |
    | type        | A                                    |
    | updated_at  | None                                 |
    | version     | 1                                    |
    | zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
    | zone_name   | example.org.                         |
    +-------------+--------------------------------------+

You can view the recordsets for a zone using the `openstack recordset list` command:

    $ openstack recordset list example.org.
    +--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+
    | id                                   | name             | type | records                                                             | status | action |
    +--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+
    | 3bebbd03-07d7-4274-a784-39c32a2be8c6 | example.org.     | SOA  | ns1.example.net. admin.example.org. 1620012616 3599 600 86400 3600  | ACTIVE | NONE   |
    | 7d34e4d3-a2f1-4af0-831c-ba52a8312c6a | example.org.     | NS   | ns1.example.net.                                                    | ACTIVE | NONE   |
    | 9e0fba43-ca67-44ed-b9d9-fc1242920319 | web.example.org. | A    | 192.0.2.1                                                           | ACTIVE | NONE   |
    |                                      |                  |      | 192.0.2.2                                                           |        |        |
    | 549c3e83-443f-474b-b467-6bcd7cb9f37d | www.example.org. | A    | 192.0.2.1                                                           | ACTIVE | NONE   |
    +--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+

The `SOA` and `NS` records for the zone are also visible here, but cannot be modified.

The authoritative nameserver for the zone is listed as the record data for the `NS` type record of the zone, which in this example is `ns1.example.net.`. To verify this you can query the nameserver using `dig` for the `NS` type:

    $ dig @ns1.example.net example.org. -t NS +short
    ns1.devstack.org.

You can also verify the `A` recordsets. You don’t need the `-t` option because it is the default:

    $ dig @ns1.example.net web.example.org. +short
    192.0.2.2
    192.0.2.1
    $ dig @ns1.example.net www.example.org. +short
    192.0.2.1

If you want to construct a `TXT` record that exceeds the 255-octet maximum length of a character-string, it has to be split into multiple strings as defined in RFC7208 section 3.3. For example, `"v=DKIM1; .... firstsecond string..."` can become `"v=DKIM1; .... first" "second string..."`. If you provide a record data with less than 255 characters, it will be treated as a single character-string and validated for empty spaces outside quotes and unescaped double quotation marks as in RFC1035 section 5.1.

For example, to create a `TXT` record made of one string of 410 characters you can split it into 2 to like this:

    $ openstack recordset create --type TXT --record '"210 characters string" "200 characters string"' example.org. _domainkey

### Updating a recordset

You can modify a recordset by using the `openstack recordset set` command. When updating a recordset by name, you must use the FQDN. As with most OpenStack commands, you can also use recordset ID. For example, to update the recordset `www.example.org.` to contain two records, you could use the following:

    $ openstack recordset set example.org. www.example.org. --record 192.0.2.1 --record 192.0.2.2
    +-------------+--------------------------------------+
    | Field       | Value                                |
    +-------------+--------------------------------------+
    | action      | UPDATE                               |
    | created_at  | 2021-05-03T03:30:16.000000           |
    | description | None                                 |
    | id          | 549c3e83-443f-474b-b467-6bcd7cb9f37d |
    | name        | www.example.org.                     |
    | project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
    | records     | 192.0.2.2                            |
    |             | 192.0.2.1                            |
    | status      | PENDING                              |
    | ttl         | None                                 |
    | type        | A                                    |
    | updated_at  | 2021-05-03T03:44:16.000000           |
    | version     | 5                                    |
    | zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
    | zone_name   | example.org.                         |
    +-------------+--------------------------------------+

### Deleting a recordset

You can use the `openstack recordset delete` command to remove recordsets using the zone and either the FQDN or the recordset ID.

    $ openstack recordset delete example.org. web.example.org.
    +-------------+--------------------------------------+
    | Field       | Value                                |
    +-------------+--------------------------------------+
    | action      | DELETE                               |
    | created_at  | 2021-05-03T03:47:00.000000           |
    | description | None                                 |
    | id          | 5ab3418f-5377-47eb-b967-9e9ff7f3c26b |
    | name        | web.example.org.                     |
    | project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
    | records     | 192.0.2.1                            |
    |             | 192.0.2.2                            |
    | status      | PENDING                              |
    | ttl         | None                                 |
    | type        | A                                    |
    | updated_at  | 2021-05-03T03:47:13.000000           |
    | version     | 2                                    |
    | zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
    | zone_name   | example.org.                         |
    +-------------+--------------------------------------+

this page last updated: 2026-08-19 02:25:39

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.

found an error? report a bug