
Add support for the DNS service. There are still some unimplemented resources (tld, pools, limits, tsigkey, blacklist, quota, service_status). They would be added in the follow-up, since this change is already very big for a review. Change-Id: I4acab7c4cace63b4ea7d719854e159bd41d49039
495 lines
20 KiB
Python
495 lines
20 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 import proxy
|
|
from openstack.dns.v2 import recordset as _rs
|
|
from openstack.dns.v2 import zone as _zone
|
|
from openstack.dns.v2 import zone_import as _zone_import
|
|
from openstack.dns.v2 import zone_export as _zone_export
|
|
from openstack.dns.v2 import zone_transfer as _zone_transfer
|
|
from openstack.dns.v2 import floating_ip as _fip
|
|
|
|
|
|
class Proxy(proxy.Proxy):
|
|
|
|
# ======== 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 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.
|
|
|
|
:returns: Zone been deleted
|
|
:rtype: :class:`~openstack.dns.v2.zone.Zone`
|
|
"""
|
|
return self._delete(_zone.Zone, zone, ignore_missing=ignore_missing)
|
|
|
|
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)
|
|
|
|
# ======== 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)
|
|
|
|
# ======== 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)
|