694 lines
27 KiB
Python
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,
|
|
)
|