Merge "Add create, delete, find, list and UPDATE example connect code"
This commit is contained in:
commit
4b39899a10
@ -5,14 +5,105 @@ Before working with the DNS service, you'll need to create a connection
|
|||||||
to your OpenStack cloud by following the :doc:`connect` user guide. This will
|
to your OpenStack cloud by following the :doc:`connect` user guide. This will
|
||||||
provide you with the ``conn`` variable used in the examples below.
|
provide you with the ``conn`` variable used in the examples below.
|
||||||
|
|
||||||
.. TODO(gtema): Implement this guide
|
.. contents:: Table of Contents
|
||||||
|
:local:
|
||||||
|
|
||||||
|
The primary resource of the DNS service is the server.
|
||||||
|
|
||||||
List Zones
|
List Zones
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
**Zone** is a logical grouping of DNS records for a domain, allowing for the
|
||||||
|
centralized management of DNS resources, including domain names,
|
||||||
|
nameservers, and DNS queries.
|
||||||
|
|
||||||
.. literalinclude:: ../examples/dns/list.py
|
.. literalinclude:: ../examples/dns/list.py
|
||||||
:pyobject: list_zones
|
:pyobject: list_zones
|
||||||
|
|
||||||
Full example: `dns resource list`_
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
List Recordsets
|
||||||
|
---------------
|
||||||
|
|
||||||
|
**Recordsets** allow for the centralized management of various DNS records
|
||||||
|
within a Zone, helping to define how a domain responds to different types
|
||||||
|
of DNS queries.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/list.py
|
||||||
|
:pyobject: list_recordsets
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
Create Zone
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Create a zone.
|
||||||
|
It allows users to define and manage the DNS namespace for a particular domain.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/create.py
|
||||||
|
:pyobject: create_zone
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
Create Recordset
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Create a recordset. It accepts several parameters that define the DNS
|
||||||
|
record's properties and sends an API request to OpenStack to create the
|
||||||
|
recordset within a specified DNS zone.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/create.py
|
||||||
|
:pyobject: create_recordset
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
Delete Zone
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Delete a zone.
|
||||||
|
It allows users to completely delete the DNS management for a specified domain.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/delete.py
|
||||||
|
:pyobject: delete_zone
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
Delete Recordset
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Delete a recordset.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/delete.py
|
||||||
|
:pyobject: delete_recordset
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
Find Zone
|
||||||
|
---------
|
||||||
|
|
||||||
|
The find_zone function searches for and returns a DNS zone by its name
|
||||||
|
using a given connection object.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/find.py
|
||||||
|
:pyobject: find_zone
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
|
Find Recordset
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The find_recordset function searches for a DNS recordset
|
||||||
|
with a specific name and type
|
||||||
|
within a given zone. If multiple recordsets
|
||||||
|
with the same name exist,
|
||||||
|
the record type can be specified to find the exact match.
|
||||||
|
|
||||||
|
.. literalinclude:: ../examples/dns/find.py
|
||||||
|
:pyobject: find_recordset
|
||||||
|
|
||||||
|
Full example: `dns resource list`_
|
||||||
|
|
||||||
.. _dns resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/dns/list.py
|
.. _dns resource list: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/dns/list.py
|
||||||
|
.. _dns resource create: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/dns/create.py
|
||||||
|
.. _dns resource delete: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/dns/delete.py
|
||||||
|
.. _dns resource find: https://opendev.org/openstack/openstacksdk/src/branch/master/examples/dns/find.py
|
||||||
|
69
examples/dns/create.py
Normal file
69
examples/dns/create.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Create resources from the DNS service.
|
||||||
|
|
||||||
|
For a full guide see
|
||||||
|
https://docs.openstack.org/openstacksdk/latest/user/guides/dns.html
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def create_zone(
|
||||||
|
conn,
|
||||||
|
name,
|
||||||
|
email,
|
||||||
|
ttl=3600,
|
||||||
|
description="Default description",
|
||||||
|
zone_type="PRIMARY",
|
||||||
|
):
|
||||||
|
print("Create Zone: ")
|
||||||
|
|
||||||
|
zone = {
|
||||||
|
"name": name,
|
||||||
|
"email": email,
|
||||||
|
"ttl": ttl,
|
||||||
|
"description": description,
|
||||||
|
"type": zone_type,
|
||||||
|
}
|
||||||
|
|
||||||
|
print(conn.dns.create_zone(**zone))
|
||||||
|
|
||||||
|
|
||||||
|
def create_recordset(
|
||||||
|
conn,
|
||||||
|
name_or_id,
|
||||||
|
recordset_name,
|
||||||
|
recordset_type="A",
|
||||||
|
records=["192.168.1.1"],
|
||||||
|
ttl=3600,
|
||||||
|
description="Default description",
|
||||||
|
):
|
||||||
|
print("Create Recordset: ")
|
||||||
|
|
||||||
|
zone = conn.dns.find_zone(name_or_id)
|
||||||
|
|
||||||
|
if not zone:
|
||||||
|
print("Zone not found.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
zone_id = zone.id
|
||||||
|
|
||||||
|
recordset_data = {
|
||||||
|
"name": recordset_name,
|
||||||
|
"type": recordset_type,
|
||||||
|
"records": records,
|
||||||
|
"ttl": ttl,
|
||||||
|
"description": description,
|
||||||
|
}
|
||||||
|
|
||||||
|
print(conn.dns.create_recordset(zone_id, **recordset_data))
|
47
examples/dns/delete.py
Normal file
47
examples/dns/delete.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Delete resources from the DNS service.
|
||||||
|
|
||||||
|
For a full guide see
|
||||||
|
https://docs.openstack.org/openstacksdk/latest/user/guides/dns.html
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def delete_zone(conn, name_or_id):
|
||||||
|
print(f"Delete Zone: {name_or_id}")
|
||||||
|
|
||||||
|
zone = conn.dns.find_zone(name_or_id)
|
||||||
|
|
||||||
|
if zone:
|
||||||
|
conn.dns.delete_zone(zone.id)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def delete_recordset(conn, name_or_id, recordset_name):
|
||||||
|
print(f"Deleting Recordset: {recordset_name} in Zone: {name_or_id}")
|
||||||
|
|
||||||
|
zone = conn.dns.find_zone(name_or_id)
|
||||||
|
|
||||||
|
if zone:
|
||||||
|
try:
|
||||||
|
recordset = conn.dns.find_recordset(zone.id, recordset_name)
|
||||||
|
if recordset:
|
||||||
|
conn.dns.delete_recordset(recordset, zone.id)
|
||||||
|
else:
|
||||||
|
print("Recordset not found")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"{e}")
|
||||||
|
else:
|
||||||
|
return None
|
62
examples/dns/find.py
Normal file
62
examples/dns/find.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Find resources from the DNS service.
|
||||||
|
|
||||||
|
For a full guide see
|
||||||
|
https://docs.openstack.org/openstacksdk/latest/user/guides/dns.html
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def find_zone(conn, name_or_id):
|
||||||
|
print(f"Find Zone: {name_or_id}")
|
||||||
|
|
||||||
|
zone = conn.dns.find_zone(name_or_id)
|
||||||
|
|
||||||
|
if zone:
|
||||||
|
print(zone)
|
||||||
|
return zone
|
||||||
|
else:
|
||||||
|
print("Zone not found.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def find_recordset(conn, name_or_id, recordset_name, recordset_type=None):
|
||||||
|
print(f"Find Recordset: {recordset_name} in Zone: {name_or_id}")
|
||||||
|
|
||||||
|
zone = conn.dns.find_zone(name_or_id)
|
||||||
|
|
||||||
|
if not zone:
|
||||||
|
print("Zone not found.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
zone_id = zone.id
|
||||||
|
|
||||||
|
try:
|
||||||
|
if recordset_type:
|
||||||
|
recordset = conn.dns.find_recordset(
|
||||||
|
zone_id, recordset_name, type=recordset_type
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
recordset = conn.dns.find_recordset(zone_id, recordset_name)
|
||||||
|
|
||||||
|
if recordset:
|
||||||
|
print(recordset)
|
||||||
|
return recordset
|
||||||
|
else:
|
||||||
|
print("Recordset not found in Zone.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"{e}")
|
||||||
|
return None
|
@ -23,3 +23,18 @@ def list_zones(conn):
|
|||||||
|
|
||||||
for zone in conn.dns.zones():
|
for zone in conn.dns.zones():
|
||||||
print(zone)
|
print(zone)
|
||||||
|
|
||||||
|
|
||||||
|
def list_recordsets(conn, name_or_id):
|
||||||
|
print("List Recordsets for Zone")
|
||||||
|
|
||||||
|
zone = conn.dns.find_zone(name_or_id)
|
||||||
|
|
||||||
|
if zone:
|
||||||
|
zone_id = zone.id
|
||||||
|
recordsets = conn.dns.recordsets(zone_id)
|
||||||
|
|
||||||
|
for recordset in recordsets:
|
||||||
|
print(recordset)
|
||||||
|
else:
|
||||||
|
print("Zone not found.")
|
||||||
|
Loading…
Reference in New Issue
Block a user