impuls/lib/python3.11/site-packages/openstack/dns/v2/_proxy.py

694 lines
27 KiB
Python

# 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.
from openstack.dns.v2 import floating_ip as _fip
from openstack.dns.v2 import recordset as _rs
from openstack.dns.v2 import zone as _zone
from openstack.dns.v2 import zone_export as _zone_export
from openstack.dns.v2 import zone_import as _zone_import
from openstack.dns.v2 import zone_share as _zone_share
from openstack.dns.v2 import zone_transfer as _zone_transfer
from openstack import proxy
class Proxy(proxy.Proxy):
_resource_registry = {
"floating_ip": _fip.FloatingIP,
"recordset": _rs.Recordset,
"zone": _zone.Zone,
"zone_export": _zone_export.ZoneExport,
"zone_import": _zone_import.ZoneImport,
"zone_share": _zone_share.ZoneShare,
"zone_transfer_request": _zone_transfer.ZoneTransferRequest,
}
# ======== Zones ========
def zones(self, **query):
"""Retrieve a generator of zones
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `name`: Zone Name field.
* `type`: Zone Type field.
* `email`: Zone email field.
* `status`: Status of the zone.
* `ttl`: TTL field filter.abs
* `description`: Zone description field filter.
:returns: A generator of zone
:class:`~openstack.dns.v2.zone.Zone` instances.
"""
return self._list(_zone.Zone, **query)
def create_zone(self, **attrs):
"""Create a new zone from attributes
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.zone.Zone`,
comprised of the properties on the Zone class.
:returns: The results of zone creation.
:rtype: :class:`~openstack.dns.v2.zone.Zone`
"""
return self._create(_zone.Zone, prepend_key=False, **attrs)
def get_zone(self, zone):
"""Get a zone
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:returns: Zone instance.
:rtype: :class:`~openstack.dns.v2.zone.Zone`
"""
return self._get(_zone.Zone, zone)
def delete_zone(self, zone, ignore_missing=True, delete_shares=False):
"""Delete a zone
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
the zone does not exist.
When set to ``True``, no exception will be set when attempting to
delete a nonexistent zone.
:param bool delete_shares: When True, delete the zone shares along with
the zone.
:returns: Zone been deleted
:rtype: :class:`~openstack.dns.v2.zone.Zone`
"""
return self._delete(
_zone.Zone,
zone,
ignore_missing=ignore_missing,
delete_shares=delete_shares,
)
def update_zone(self, zone, **attrs):
"""Update zone attributes
:param zone: The id or an instance of
:class:`~openstack.dns.v2.zone.Zone`.
:param dict attrs: attributes for update on
:class:`~openstack.dns.v2.zone.Zone`.
:rtype: :class:`~openstack.dns.v2.zone.Zone`
"""
return self._update(_zone.Zone, zone, **attrs)
def find_zone(self, name_or_id, ignore_missing=True):
"""Find a single zone
:param name_or_id: The name or ID of a zone
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised
when the zone does not exist.
When set to ``True``, no exception will be set when attempting
to delete a nonexistent zone.
:returns: :class:`~openstack.dns.v2.zone.Zone`
"""
return self._find(
_zone.Zone, name_or_id, ignore_missing=ignore_missing
)
def abandon_zone(self, zone, **attrs):
"""Abandon Zone
:param zone: The value can be the ID of a zone to be abandoned
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:returns: None
"""
zone = self._get_resource(_zone.Zone, zone)
return zone.abandon(self)
def xfr_zone(self, zone, **attrs):
"""Trigger update of secondary Zone
:param zone: The value can be the ID of a zone to be abandoned
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:returns: None
"""
zone = self._get_resource(_zone.Zone, zone)
return zone.xfr(self)
# ======== Recordsets ========
def recordsets(self, zone=None, **query):
"""Retrieve a generator of recordsets
:param zone: The optional value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance. If it is not
given all recordsets for all zones of the tenant would be
retrieved
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `name`: Recordset Name field.
* `type`: Type field.
* `status`: Status of the recordset.
* `ttl`: TTL field filter.
* `description`: Recordset description field filter.
:returns: A generator of zone
(:class:`~openstack.dns.v2.recordset.Recordset`) instances
"""
base_path = None
if not zone:
base_path = '/recordsets'
else:
zone = self._get_resource(_zone.Zone, zone)
query.update({'zone_id': zone.id})
return self._list(_rs.Recordset, base_path=base_path, **query)
def create_recordset(self, zone, **attrs):
"""Create a new recordset in the zone
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.recordset.Recordset`,
comprised of the properties on the Recordset class.
:returns: The results of zone creation
:rtype: :class:`~openstack.dns.v2.recordset.Recordset`
"""
zone = self._get_resource(_zone.Zone, zone)
attrs.update({'zone_id': zone.id})
return self._create(_rs.Recordset, prepend_key=False, **attrs)
def update_recordset(self, recordset, **attrs):
"""Update Recordset attributes
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.recordset.Recordset`,
comprised of the properties on the Recordset class.
:returns: The results of zone creation
:rtype: :class:`~openstack.dns.v2.recordset.Recordset`
"""
return self._update(_rs.Recordset, recordset, **attrs)
def get_recordset(self, recordset, zone):
"""Get a recordset
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param recordset: The value can be the ID of a recordset
or a :class:`~openstack.dns.v2.recordset.Recordset` instance.
:returns: Recordset instance
:rtype: :class:`~openstack.dns.v2.recordset.Recordset`
"""
zone = self._get_resource(_zone.Zone, zone)
return self._get(_rs.Recordset, recordset, zone_id=zone.id)
def delete_recordset(self, recordset, zone=None, ignore_missing=True):
"""Delete a zone
:param recordset: The value can be the ID of a recordset
or a :class:`~openstack.dns.v2.recordset.Recordset`
instance.
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
the zone does not exist. When set to ``True``, no exception will
be set when attempting to delete a nonexistent zone.
:returns: Recordset instance been deleted
:rtype: :class:`~openstack.dns.v2.recordset.Recordset`
"""
if zone:
zone = self._get_resource(_zone.Zone, zone)
recordset = self._get(_rs.Recordset, recordset, zone_id=zone.id)
return self._delete(
_rs.Recordset, recordset, ignore_missing=ignore_missing
)
def find_recordset(self, zone, name_or_id, ignore_missing=True, **query):
"""Find a single recordset
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param name_or_id: The name or ID of a zone
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised
when the zone does not exist.
When set to ``True``, no exception will be set when attempting
to delete a nonexistent zone.
:returns: :class:`~openstack.dns.v2.recordset.Recordset`
"""
zone = self._get_resource(_zone.Zone, zone)
return self._find(
_rs.Recordset,
name_or_id,
ignore_missing=ignore_missing,
zone_id=zone.id,
**query,
)
# ======== Zone Imports ========
def zone_imports(self, **query):
"""Retrieve a generator of zone imports
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `zone_id`: Zone I field.
* `message`: Message field.
* `status`: Status of the zone import record.
:returns: A generator of zone
:class:`~openstack.dns.v2.zone_import.ZoneImport` instances.
"""
return self._list(_zone_import.ZoneImport, **query)
def create_zone_import(self, **attrs):
"""Create a new zone import from attributes
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.zone_import.ZoneImport`,
comprised of the properties on the ZoneImport class.
:returns: The results of zone creation.
:rtype: :class:`~openstack.dns.v2.zone_import.ZoneImport`
"""
return self._create(
_zone_import.ZoneImport, prepend_key=False, **attrs
)
def get_zone_import(self, zone_import):
"""Get a zone import record
:param zone: The value can be the ID of a zone import
or a :class:`~openstack.dns.v2.zone_import.ZoneImport` instance.
:returns: ZoneImport instance.
:rtype: :class:`~openstack.dns.v2.zone_import.ZoneImport`
"""
return self._get(_zone_import.ZoneImport, zone_import)
def delete_zone_import(self, zone_import, ignore_missing=True):
"""Delete a zone import
:param zone_import: The value can be the ID of a zone import
or a :class:`~openstack.dns.v2.zone_import.ZoneImport` instance.
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
the zone does not exist.
When set to ``True``, no exception will be set when attempting to
delete a nonexistent zone.
:returns: None
"""
return self._delete(
_zone_import.ZoneImport, zone_import, ignore_missing=ignore_missing
)
# ======== Zone Exports ========
def zone_exports(self, **query):
"""Retrieve a generator of zone exports
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `zone_id`: Zone I field.
* `message`: Message field.
* `status`: Status of the zone import record.
:returns: A generator of zone
:class:`~openstack.dns.v2.zone_export.ZoneExport` instances.
"""
return self._list(_zone_export.ZoneExport, **query)
def create_zone_export(self, zone, **attrs):
"""Create a new zone export from attributes
:param zone: The value can be the ID of a zone to be exported
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.zone_export.ZoneExport`,
comprised of the properties on the ZoneExport class.
:returns: The results of zone creation.
:rtype: :class:`~openstack.dns.v2.zone_export.ZoneExport`
"""
zone = self._get_resource(_zone.Zone, zone)
return self._create(
_zone_export.ZoneExport,
base_path='/zones/%(zone_id)s/tasks/export',
prepend_key=False,
zone_id=zone.id,
**attrs,
)
def get_zone_export(self, zone_export):
"""Get a zone export record
:param zone: The value can be the ID of a zone import
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:returns: ZoneExport instance.
:rtype: :class:`~openstack.dns.v2.zone_export.ZoneExport`
"""
return self._get(_zone_export.ZoneExport, zone_export)
def get_zone_export_text(self, zone_export):
"""Get a zone export record as text
:param zone: The value can be the ID of a zone import
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:returns: ZoneExport instance.
:rtype: :class:`~openstack.dns.v2.zone_export.ZoneExport`
"""
return self._get(
_zone_export.ZoneExport,
zone_export,
base_path='/zones/tasks/export/%(id)s/export',
)
def delete_zone_export(self, zone_export, ignore_missing=True):
"""Delete a zone export
:param zone_export: The value can be the ID of a zone import
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
the zone does not exist.
When set to ``True``, no exception will be set when attempting to
delete a nonexistent zone.
:returns: None
"""
return self._delete(
_zone_export.ZoneExport, zone_export, ignore_missing=ignore_missing
)
# ======== FloatingIPs ========
def floating_ips(self, **query):
"""Retrieve a generator of recordsets
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `name`: Recordset Name field.
* `type`: Type field.
* `status`: Status of the recordset.
* `ttl`: TTL field filter.
* `description`: Recordset description field filter.
:returns: A generator of floatingips
(:class:`~openstack.dns.v2.floating_ip.FloatingIP`) instances
"""
return self._list(_fip.FloatingIP, **query)
def get_floating_ip(self, floating_ip):
"""Get a Floating IP
:param floating_ip: The value can be the ID of a floating ip
or a :class:`~openstack.dns.v2.floating_ip.FloatingIP` instance.
The ID is in format "region_name:floatingip_id"
:returns: FloatingIP instance.
:rtype: :class:`~openstack.dns.v2.floating_ip.FloatingIP`
"""
return self._get(_fip.FloatingIP, floating_ip)
def update_floating_ip(self, floating_ip, **attrs):
"""Update floating ip attributes
:param floating_ip: The id or an instance of
:class:`~openstack.dns.v2.fip.FloatingIP`.
:param dict attrs: attributes for update on
:class:`~openstack.dns.v2.fip.FloatingIP`.
:rtype: :class:`~openstack.dns.v2.fip.FloatingIP`
"""
return self._update(_fip.FloatingIP, floating_ip, **attrs)
def unset_floating_ip(self, floating_ip):
"""Unset a Floating IP PTR record
:param floating_ip: ID for the floatingip associated with the
project.
:returns: FloatingIP PTR record.
:rtype: :class:`~openstack.dns.v2.fip.FloatipgIP`
"""
# concat `region:floating_ip_id` as id
attrs = {'ptrdname': None}
return self._update(_fip.FloatingIP, floating_ip, **attrs)
# ======== Zone Transfer ========
def zone_transfer_requests(self, **query):
"""Retrieve a generator of zone transfer requests
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `status`: Status of the recordset.
:returns: A generator of transfer requests
(:class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`)
instances
"""
return self._list(_zone_transfer.ZoneTransferRequest, **query)
def get_zone_transfer_request(self, request):
"""Get a ZoneTransfer Request info
:param request: The value can be the ID of a transfer request
or a :class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`
instance.
:returns: Zone transfer request instance.
:rtype: :class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`
"""
return self._get(_zone_transfer.ZoneTransferRequest, request)
def create_zone_transfer_request(self, zone, **attrs):
"""Create a new ZoneTransfer Request from attributes
:param zone: The value can be the ID of a zone to be transferred
or a :class:`~openstack.dns.v2.zone_export.ZoneExport` instance.
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`,
comprised of the properties on the ZoneTransferRequest class.
:returns: The results of zone transfer request creation.
:rtype: :class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`
"""
zone = self._get_resource(_zone.Zone, zone)
return self._create(
_zone_transfer.ZoneTransferRequest,
base_path='/zones/%(zone_id)s/tasks/transfer_requests',
prepend_key=False,
zone_id=zone.id,
**attrs,
)
def update_zone_transfer_request(self, request, **attrs):
"""Update ZoneTransfer Request attributes
:param floating_ip: The id or an instance of
:class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`.
:param dict attrs: attributes for update on
:class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`.
:rtype: :class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`
"""
return self._update(
_zone_transfer.ZoneTransferRequest, request, **attrs
)
def delete_zone_transfer_request(self, request, ignore_missing=True):
"""Delete a ZoneTransfer Request
:param request: The value can be the ID of a zone transfer request
or a :class:`~openstack.dns.v2.zone_transfer.ZoneTransferRequest`
instance.
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
the zone does not exist.
When set to ``True``, no exception will be set when attempting to
delete a nonexistent zone.
:returns: None
"""
return self._delete(
_zone_transfer.ZoneTransferRequest,
request,
ignore_missing=ignore_missing,
)
def zone_transfer_accepts(self, **query):
"""Retrieve a generator of zone transfer accepts
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `status`: Status of the recordset.
:returns: A generator of transfer accepts
(:class:`~openstack.dns.v2.zone_transfer.ZoneTransferAccept`)
instances
"""
return self._list(_zone_transfer.ZoneTransferAccept, **query)
def get_zone_transfer_accept(self, accept):
"""Get a ZoneTransfer Accept info
:param request: The value can be the ID of a transfer accept
or a :class:`~openstack.dns.v2.zone_transfer.ZoneTransferAccept`
instance.
:returns: Zone transfer request instance.
:rtype: :class:`~openstack.dns.v2.zone_transfer.ZoneTransferAccept`
"""
return self._get(_zone_transfer.ZoneTransferAccept, accept)
def create_zone_transfer_accept(self, **attrs):
"""Create a new ZoneTransfer Accept from attributes
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.zone_transfer.ZoneTransferAccept`,
comprised of the properties on the ZoneTransferAccept class.
:returns: The results of zone transfer request creation.
:rtype: :class:`~openstack.dns.v2.zone_transfer.ZoneTransferAccept`
"""
return self._create(_zone_transfer.ZoneTransferAccept, **attrs)
# ======== Zone Shares ========
def zone_shares(self, zone, **query):
"""Retrieve a generator of zone sharess
:param zone: The zone ID or a
:class:`~openstack.dns.v2.zone.Zone` instance
:param dict query: Optional query parameters to be sent to limit the
resources being returned.
* `target_project_id`: The target project ID field.
:returns: A generator of zone shares
:class:`~openstack.dns.v2.zone_share.ZoneShare` instances.
"""
zone_obj = self._get_resource(_zone.Zone, zone)
return self._list(_zone_share.ZoneShare, zone_id=zone_obj.id, **query)
def get_zone_share(self, zone, zone_share):
"""Get a zone share
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param zone_share: The zone_share can be either the ID of the zone
share or a :class:`~openstack.dns.v2.zone_share.ZoneShare` instance
that the zone share belongs to.
:returns: ZoneShare instance.
:rtype: :class:`~openstack.dns.v2.zone_share.ZoneShare`
"""
zone_obj = self._get_resource(_zone.Zone, zone)
return self._get(
_zone_share.ZoneShare, zone_share, zone_id=zone_obj.id
)
def find_zone_share(self, zone, zone_share_id, ignore_missing=True):
"""Find a single zone share
:param zone: The value can be the ID of a zone
or a :class:`~openstack.dns.v2.zone.Zone` instance.
:param zone_share_id: The zone share ID
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised
when the zone share does not exist.
When set to ``True``, None will be returned when attempting to
find a nonexistent zone share.
:returns: :class:`~openstack.dns.v2.zone_share.ZoneShare`
"""
zone_obj = self._get_resource(_zone.Zone, zone)
return self._find(
_zone_share.ZoneShare,
zone_share_id,
ignore_missing=ignore_missing,
zone_id=zone_obj.id,
)
def create_zone_share(self, zone, **attrs):
"""Create a new zone share from attributes
:param zone: The zone ID or a
:class:`~openstack.dns.v2.zone.Zone` instance
:param dict attrs: Keyword arguments which will be used to create
a :class:`~openstack.dns.v2.zone_share.ZoneShare`,
comprised of the properties on the ZoneShare class.
:returns: The results of zone share creation
:rtype: :class:`~openstack.dns.v2.zone_share.ZoneShare`
"""
zone_obj = self._get_resource(_zone.Zone, zone)
return self._create(
_zone_share.ZoneShare, zone_id=zone_obj.id, **attrs
)
def delete_zone_share(self, zone, zone_share, ignore_missing=True):
"""Delete a zone share
:param zone: The zone ID or a
:class:`~openstack.dns.v2.zone.Zone` instance
:param zone_share: The zone_share can be either the ID of the zone
share or a :class:`~openstack.dns.v2.zone_share.ZoneShare` instance
that the zone share belongs to.
:param bool ignore_missing: When set to ``False``
:class:`~openstack.exceptions.ResourceNotFound` will be raised when
the zone share does not exist.
When set to ``True``, no exception will be set when attempting to
delete a nonexistent zone share.
:returns: ``None``
"""
zone_obj = self._get_resource(_zone.Zone, zone)
self._delete(
_zone_share.ZoneShare,
zone_share,
ignore_missing=ignore_missing,
zone_id=zone_obj.id,
)
def _get_cleanup_dependencies(self):
# DNS may depend on floating ip
return {'dns': {'before': ['network']}}
def _service_cleanup(
self,
dry_run=True,
client_status_queue=False,
identified_resources=None,
filters=None,
resource_evaluation_fn=None,
):
# Delete all zones
for obj in self.zones():
self._service_cleanup_del_res(
self.delete_zone,
obj,
dry_run=dry_run,
client_status_queue=client_status_queue,
identified_resources=identified_resources,
filters=filters,
resource_evaluation_fn=resource_evaluation_fn,
)
# Unset all floatingIPs
# NOTE: FloatingIPs are not cleaned when filters are set
for obj in self.floating_ips():
self._service_cleanup_del_res(
self.unset_floating_ip,
obj,
dry_run=dry_run,
client_status_queue=client_status_queue,
identified_resources=identified_resources,
filters=filters,
resource_evaluation_fn=resource_evaluation_fn,
)