diff -Nru designate-2.0.0/AUTHORS designate-2.1.0/AUTHORS --- designate-2.0.0/AUTHORS 2016-04-07 07:32:10.000000000 +0000 +++ designate-2.1.0/AUTHORS 2017-02-22 05:59:40.000000000 +0000 @@ -1,5 +1,6 @@ Akihiro Motoki Alex Barclay +Alex Monk Alexander Maretskiy Alok Jani Andreas Jaeger @@ -10,6 +11,7 @@ Angus Lees Artom Lifshitz Atsushi SAKAI +AvnishPal Bertrand Lallau Bertrand Lallau Betsy Luzader @@ -29,6 +31,7 @@ Davide Guerri Dirk Mueller Doug Hellmann +Elena Ezhova Endre Karlson Endre Karlson Endre Karlson @@ -48,6 +51,7 @@ Ihar Hrachyshka JC Martin James Li +Jeff Feng Jeremy Stanley Joe Gordon Joe Harrison @@ -85,6 +89,8 @@ Ryan Bak Ryan Petrello Sascha Peilicke +Selvakumar S +Selvakumar S Sergey Skripnick Shuquan Huang Simon McCartney @@ -112,6 +118,8 @@ hardik keisuke_yamamoto kenichiro matsuda +koteswar +maestropandy michael.dong@rackspace.com mimi8890 naggappan diff -Nru designate-2.0.0/ChangeLog designate-2.1.0/ChangeLog --- designate-2.0.0/ChangeLog 2016-04-07 07:32:10.000000000 +0000 +++ designate-2.1.0/ChangeLog 2017-02-22 05:59:40.000000000 +0000 @@ -1,6 +1,39 @@ CHANGES ======= +2.1.0 +----- + +* zone_name is null in zone trasfer request response +* Infoblox: Reverse lookup zone creation fails +* Resolve description parameter in v2:set floating ip +* Fix for the exception on creating secondary zone +* Use upper constraints for all jobs in tox.ini +* Fix SSHFP validation for ECDSA, ED25519, and SHA256 +* Infoblox backend:Fixed sslverify value from option +* Fix ZTA API to prevent HTTP 500 upon empty body +* Don't hardcode options we pass to oslo.context +* Change bind -> bind9 in docs, sample configs +* Updated from global requirements +* Catch duplicate db inserts in powerdns plugin +* Ensure HTTP 204 responses have 0 Content-Length +* Updated from global requirements +* Updated from global requirements +* Make registering error handlers compliant with Flask 0.11 +* DevStack: Support setting default quotas +* Ensure L to M DB migrations correctly inspect current DB state +* Use upper-constraints.txt for tox tests +* DevStack: Set tempest nameservers config option correctly +* DevStack: Allow disabling of API versions +* Add Tempest Plugin to DevStack Plugin +* Force the devstack plugin to use the mitaka version of devstack +* Updated from global requirements +* Trivalfix of option name in designate.conf.sample +* Support both olso.m v4 and v5 +* Updated from global requirements +* Handle async Tooz calls appropriately +* Updated from global requirements + 2.0.0 ----- diff -Nru designate-2.0.0/contrib/vagrant/local.conf designate-2.1.0/contrib/vagrant/local.conf --- designate-2.0.0/contrib/vagrant/local.conf 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/contrib/vagrant/local.conf 2017-02-22 05:57:04.000000000 +0000 @@ -106,8 +106,8 @@ # Optional TLS Proxy #enable_service tls-proxy -# Optional Tempest -#enable_service tempest +# Optional Tempest (Recommended) +enable_service tempest # Optional Rally #enable_service rally diff -Nru designate-2.0.0/contrib/vagrant/Vagrantfile designate-2.1.0/contrib/vagrant/Vagrantfile --- designate-2.0.0/contrib/vagrant/Vagrantfile 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/contrib/vagrant/Vagrantfile 2017-02-22 05:57:04.000000000 +0000 @@ -26,6 +26,10 @@ override.vm.synced_folder "../../../designate-dashboard", "/opt/stack/designate-dashboard" end + if File.directory?("../../../designate-tempest-plugin") + override.vm.synced_folder "../../../designate-tempest-plugin", "/opt/stack/designate-tempest-plugin" + end + if File.directory?("../../../../openstack/rally") override.vm.synced_folder "../../../../openstack/rally", "/opt/stack/rally" end @@ -50,6 +54,10 @@ override.vm.synced_folder "../../../designate-dashboard", "/opt/stack/designate-dashboard", type: "nfs" end + if File.directory?("../../../designate-tempest-plugin") + override.vm.synced_folder "../../../designate-tempest-plugin", "/opt/stack/designate-tempest-plugin", type: "nfs" + end + if File.directory?("../../../../openstack/rally") override.vm.synced_folder "../../../../openstack/rally", "/opt/stack/rally", type: "nfs" end @@ -69,6 +77,9 @@ # Clone DevStack if [ ! -d "/home/vagrant/devstack" ]; then git clone https://git.openstack.org/openstack-dev/devstack.git /home/vagrant/devstack + pushd /home/vagrant/devstack + git checkout -b stable/mitaka origin/stable/mitaka + popd fi # Install Vagrant local.conf sample diff -Nru designate-2.0.0/debian/changelog designate-2.1.0/debian/changelog --- designate-2.0.0/debian/changelog 2016-04-07 16:31:52.000000000 +0000 +++ designate-2.1.0/debian/changelog 2017-06-07 08:34:57.000000000 +0000 @@ -1,3 +1,9 @@ +designate (1:2.1.0-0ubuntu1) xenial; urgency=medium + + * New upstream point release for OpenStack Mitaka (LP: #1696177). + + -- James Page Wed, 07 Jun 2017 09:34:57 +0100 + designate (1:2.0.0-0ubuntu1) xenial; urgency=medium * New upstream release for OpenStack Mitaka. diff -Nru designate-2.0.0/debian/gbp.conf designate-2.1.0/debian/gbp.conf --- designate-2.0.0/debian/gbp.conf 2016-04-07 16:31:52.000000000 +0000 +++ designate-2.1.0/debian/gbp.conf 2017-06-07 08:34:57.000000000 +0000 @@ -1,4 +1,6 @@ [DEFAULT] +debian-branch = stable/mitaka +upstream-tag = %(version)s pristine-tar = True [buildpackage] diff -Nru designate-2.0.0/designate/api/v1/__init__.py designate-2.1.0/designate/api/v1/__init__.py --- designate-2.0.0/designate/api/v1/__init__.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/api/v1/__init__.py 2017-02-22 05:57:03.000000000 +0000 @@ -100,7 +100,7 @@ return response for code in six.iterkeys(wexceptions.default_exceptions): - app.error_handler_spec[None][code] = _json_error + app.register_error_handler(code, _json_error) # TODO(kiall): Ideally, we want to make use of the Plugin class here. # This works for the moment though. diff -Nru designate-2.0.0/designate/api/v2/controllers/zones/tasks/abandon.py designate-2.1.0/designate/api/v2/controllers/zones/tasks/abandon.py --- designate-2.0.0/designate/api/v2/controllers/zones/tasks/abandon.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/api/v2/controllers/zones/tasks/abandon.py 2017-02-22 05:57:04.000000000 +0000 @@ -20,7 +20,9 @@ class AbandonController(rest.RestController): - @pecan.expose(template='json:', content_type='application/json') + # NOTE: template=None is important here, template='json:' manifests + # in this bug: https://bugs.launchpad.net/designate/+bug/1592153 + @pecan.expose(template=None, content_type='application/json') @utils.validate_uuid('zone_id') def post_all(self, zone_id): """Abandon a zone""" @@ -36,7 +38,6 @@ else: response.status_int = 500 - # NOTE: This is a hack and a half.. But Pecan needs it. return '' @pecan.expose(template='json:', content_type='application/json') diff -Nru designate-2.0.0/designate/api/v2/controllers/zones/tasks/exports.py designate-2.1.0/designate/api/v2/controllers/zones/tasks/exports.py --- designate-2.0.0/designate/api/v2/controllers/zones/tasks/exports.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/api/v2/controllers/zones/tasks/exports.py 2017-02-22 05:57:04.000000000 +0000 @@ -108,7 +108,9 @@ context, criterion, marker, limit, sort_key, sort_dir), request=request) - @pecan.expose(template='json:', content_type='application/json') + # NOTE: template=None is important here, template='json:' manifests + # in this bug: https://bugs.launchpad.net/designate/+bug/1592153 + @pecan.expose(template=None, content_type='application/json') @utils.validate_uuid('zone_export_id') def delete_one(self, zone_export_id): """Delete Zone Export""" diff -Nru designate-2.0.0/designate/api/v2/controllers/zones/tasks/imports.py designate-2.1.0/designate/api/v2/controllers/zones/tasks/imports.py --- designate-2.0.0/designate/api/v2/controllers/zones/tasks/imports.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/api/v2/controllers/zones/tasks/imports.py 2017-02-22 05:57:04.000000000 +0000 @@ -92,7 +92,9 @@ # Prepare and return the response body return zone_import - @pecan.expose(template='json:', content_type='application/json') + # NOTE: template=None is important here, template='json:' manifests + # in this bug: https://bugs.launchpad.net/designate/+bug/1592153 + @pecan.expose(template=None, content_type='application/json') @utils.validate_uuid('zone_import_id') def delete_one(self, zone_import_id): """Delete Zone Import""" diff -Nru designate-2.0.0/designate/api/v2/controllers/zones/tasks/transfer_requests.py designate-2.1.0/designate/api/v2/controllers/zones/tasks/transfer_requests.py --- designate-2.0.0/designate/api/v2/controllers/zones/tasks/transfer_requests.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/api/v2/controllers/zones/tasks/transfer_requests.py 2017-02-22 05:57:04.000000000 +0000 @@ -75,6 +75,8 @@ except exceptions.EmptyRequestBody: body = dict() + zone = self.central_api.get_zone(context, zone_id) + body['zone_name'] = zone.name body['zone_id'] = zone_id zone_transfer_request = DesignateAdapter.parse( diff -Nru designate-2.0.0/designate/api/v2/patches.py designate-2.1.0/designate/api/v2/patches.py --- designate-2.0.0/designate/api/v2/patches.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/api/v2/patches.py 2017-02-22 05:57:04.000000000 +0000 @@ -39,9 +39,13 @@ """ if self.content_type in JSON_TYPES: try: - return jsonutils.load(self.body_file) + json_dict = jsonutils.load(self.body_file) + if json_dict is None: + # NOTE(kiall): Somehow, json.load(fp) is returning None. + raise exceptions.EmptyRequestBody('Request Body is empty') + return json_dict except ValueError as valueError: - if len(self.body) == 0: + if len(self.body) == 0 or self.body is None: raise exceptions.EmptyRequestBody('Request Body is empty') else: raise exceptions.InvalidJson(six.text_type(valueError)) diff -Nru designate-2.0.0/designate/backend/impl_infoblox/connector.py designate-2.1.0/designate/backend/impl_infoblox/connector.py --- designate-2.0.0/designate/backend/impl_infoblox/connector.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/backend/impl_infoblox/connector.py 2017-02-22 05:57:04.000000000 +0000 @@ -18,6 +18,7 @@ import json as jsonutils import logging +from oslo_utils import strutils from six.moves.urllib import parse import requests @@ -48,6 +49,18 @@ other_opts = ['sslverify', 'network_view', 'dns_view', 'multi_tenant'] for opt in reqd_opts + other_opts: + if opt == 'sslverify': + # NOTE(selvakumar): This check is for sslverify option. + # type of sslverify is unicode string from designate DB + # if the value is 0 getattr called for setting default values. + # to avoid setting default values we use oslo strutils + if not strutils.is_int_like(options.get(opt)): + option_value = options.get(opt) + else: + option_value = strutils.bool_from_string(options.get(opt), + default=True) + setattr(self, opt, option_value) + continue setattr(self, opt, options.get(opt) or getattr(config, opt)) for opt in reqd_opts: diff -Nru designate-2.0.0/designate/backend/impl_infoblox/object_manipulator.py designate-2.1.0/designate/backend/impl_infoblox/object_manipulator.py --- designate-2.0.0/designate/backend/impl_infoblox/object_manipulator.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/backend/impl_infoblox/object_manipulator.py 2017-02-22 05:57:04.000000000 +0000 @@ -110,11 +110,17 @@ def create_zone_auth(self, fqdn, dns_view): try: + if fqdn.endswith("in-addr.arpa"): + zone_format = 'IPV4' + elif fqdn.endswith("ip6.arpa"): + zone_format = 'IPV6' + else: + zone_format = 'FORWARD' self._create_infoblox_object( 'zone_auth', {'fqdn': fqdn, 'view': dns_view}, {'ns_group': self.connector.ns_group, - 'restart_if_needed': True}, + 'restart_if_needed': True, 'zone_format': zone_format}, check_if_exists=True) except exc.InfobloxCannotCreateObject as e: LOG.warning(e) diff -Nru designate-2.0.0/designate/backend/impl_powerdns/__init__.py designate-2.1.0/designate/backend/impl_powerdns/__init__.py --- designate-2.0.0/designate/backend/impl_powerdns/__init__.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/backend/impl_powerdns/__init__.py 2017-02-22 05:57:04.000000000 +0000 @@ -19,6 +19,7 @@ import six from oslo_config import cfg from oslo_db import options +from oslo_db.exception import DBDuplicateEntry from oslo_log import log as logging from oslo_utils import excutils from sqlalchemy.sql import select @@ -136,6 +137,11 @@ } self._create(tables.domains, domain_values) + except DBDuplicateEntry: + LOG.debug('Successful create of %s in pdns, zone already exists' + % zone['name']) + # If create fails because the zone exists, don't reraise + pass except Exception: with excutils.save_and_reraise_exception(): self.session.rollback() diff -Nru designate-2.0.0/designate/central/service.py designate-2.1.0/designate/central/service.py --- designate-2.0.0/designate/central/service.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/central/service.py 2017-02-22 05:57:04.000000000 +0000 @@ -1971,6 +1971,7 @@ fip_ptr['ttl'] = zone['ttl'] fip_ptr['ptrdname'] = record['data'] + fip_ptr['description'] = record['description'] else: LOG.debug("No record information found for %s" % value[0]['id']) diff -Nru designate-2.0.0/designate/context.py designate-2.1.0/designate/context.py --- designate-2.0.0/designate/context.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/context.py 2017-02-22 05:57:04.000000000 +0000 @@ -32,31 +32,15 @@ original_tenant = None _edit_managed_records = False - def __init__(self, auth_token=None, user=None, tenant=None, domain=None, - user_domain=None, project_domain=None, is_admin=False, - read_only=False, show_deleted=False, request_id=None, - resource_uuid=None, overwrite=True, roles=None, - service_catalog=None, all_tenants=False, abandon=None, + def __init__(self, service_catalog=None, all_tenants=False, abandon=None, tsigkey_id=None, user_identity=None, original_tenant=None, - edit_managed_records=False): + edit_managed_records=False, **kwargs): # NOTE: user_identity may be passed in, but will be silently dropped as # it is a generated field based on several others. - super(DesignateContext, self).__init__( - auth_token=auth_token, - user=user, - tenant=tenant, - domain=domain, - user_domain=user_domain, - project_domain=project_domain, - is_admin=is_admin, - read_only=read_only, - show_deleted=show_deleted, - request_id=request_id, - resource_uuid=resource_uuid, - overwrite=overwrite) - self.roles = roles or [] + super(DesignateContext, self).__init__(**kwargs) + self.service_catalog = service_catalog self.tsigkey_id = tsigkey_id diff -Nru designate-2.0.0/designate/coordination.py designate-2.1.0/designate/coordination.py --- designate-2.0.0/designate/coordination.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/coordination.py 2017-02-22 05:57:04.000000000 +0000 @@ -83,8 +83,18 @@ while not self._coordination_started: try: self._coordinator.start() - self._coordinator.create_group(self.service_name) - self._coordinator.join_group(self.service_name) + + try: + create_group_req = self._coordinator.create_group( + self.service_name) + create_group_req.get() + except tooz.coordination.GroupAlreadyExist: + pass + + join_group_req = self._coordinator.join_group( + self.service_name) + join_group_req.get() + self._coordination_started = True except Exception: @@ -96,7 +106,8 @@ if self._coordinator is not None: self._coordination_started = False - self._coordinator.leave_group(self.service_name) + leave_group_req = self._coordinator.leave_group(self.service_name) + leave_group_req.get() self._coordinator.stop() super(CoordinationMixin, self).stop() diff -Nru designate-2.0.0/designate/mdns/xfr.py designate-2.1.0/designate/mdns/xfr.py --- designate-2.0.0/designate/mdns/xfr.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/mdns/xfr.py 2017-02-22 05:57:04.000000000 +0000 @@ -41,8 +41,7 @@ LOG.warning(e.message) return - zone = dnsutils.from_dnspython_zone(dnspython_zone) - zone.update(zone) + zone.update(dnsutils.from_dnspython_zone(dnspython_zone)) zone.transferred_at = timeutils.utcnow() diff -Nru designate-2.0.0/designate/objects/adapters/api_v2/zone_transfer_request.py designate-2.1.0/designate/objects/adapters/api_v2/zone_transfer_request.py --- designate-2.0.0/designate/objects/adapters/api_v2/zone_transfer_request.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/objects/adapters/api_v2/zone_transfer_request.py 2017-02-22 05:57:04.000000000 +0000 @@ -49,6 +49,7 @@ 'protected': False }, "zone_name": { + 'immutable': True, 'protected': False }, "created_at": {}, diff -Nru designate-2.0.0/designate/objects/rrdata_sshfp.py designate-2.1.0/designate/objects/rrdata_sshfp.py --- designate-2.0.0/designate/objects/rrdata_sshfp.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/objects/rrdata_sshfp.py 2017-02-22 05:57:03.000000000 +0000 @@ -26,7 +26,7 @@ 'schema': { 'type': 'integer', 'minimum': 0, - 'maximum': 2 + 'maximum': 4 }, 'required': True }, @@ -34,7 +34,7 @@ 'schema': { 'type': 'integer', 'minimum': 0, - 'maximum': 1 + 'maximum': 2 }, 'required': True }, diff -Nru designate-2.0.0/designate/rpc.py designate-2.1.0/designate/rpc.py --- designate-2.0.0/designate/rpc.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/rpc.py 2017-02-22 05:57:04.000000000 +0000 @@ -26,9 +26,12 @@ 'TRANSPORT_ALIASES', ] +import inspect + from oslo_config import cfg import oslo_messaging as messaging from oslo_messaging import server as msg_server +from oslo_messaging.rpc import server as rpc_server from oslo_messaging.rpc import dispatcher as rpc_dispatcher from oslo_serialization import jsonutils @@ -174,6 +177,7 @@ class RPCDispatcher(rpc_dispatcher.RPCDispatcher): def _dispatch(self, *args, **kwds): + # TODO(kiall): Remove when oslo.messaging 5 is the min in requirements try: return super(RPCDispatcher, self)._dispatch(*args, **kwds) except Exception as e: @@ -182,6 +186,15 @@ else: raise + def dispatch(self, *args, **kwds): + try: + return super(RPCDispatcher, self).dispatch(*args, **kwds) + except Exception as e: + if getattr(e, 'expected', False): + raise rpc_dispatcher.ExpectedException() + else: + raise + def get_transport_url(url_str=None): return messaging.TransportURL.parse(CONF, url_str, TRANSPORT_ALIASES) @@ -204,8 +217,21 @@ serializer = DesignateObjectSerializer() serializer = RequestContextSerializer(serializer) - dispatcher = RPCDispatcher(target, endpoints, serializer) - return msg_server.MessageHandlingServer(TRANSPORT, dispatcher, 'eventlet') + # TODO(kiall): Remove when oslo.messaging 5 is the min in requirements + argspec = inspect.getargspec(rpc_dispatcher.RPCDispatcher.__init__) + if 'target' in argspec.args: + # We're on oslo.messaging < 5 + dispatcher = RPCDispatcher(target, endpoints, serializer) + + return msg_server.MessageHandlingServer( + TRANSPORT, dispatcher, 'eventlet') + + else: + # We're on oslo.messaging >= 5 + dispatcher = RPCDispatcher(endpoints, serializer) + + return rpc_server.RPCServer( + TRANSPORT, target, dispatcher, 'eventlet') def get_listener(targets, endpoints, serializer=None): diff -Nru designate-2.0.0/designate/schema/format.py designate-2.1.0/designate/schema/format.py --- designate-2.0.0/designate/schema/format.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/schema/format.py 2017-02-22 05:57:04.000000000 +0000 @@ -49,7 +49,7 @@ r'(?P[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' \ r'[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\Z' -RE_SSHFP_FINGERPRINT = r'^[0-9A-Fa-f]{40}\Z' +RE_SSHFP_FINGERPRINT = r'^([0-9A-Fa-f]{10,40}|[0-9A-Fa-f]{64})\Z' draft3_format_checker = jsonschema.draft3_format_checker diff -Nru designate-2.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/082_unique_ns_record.py designate-2.1.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/082_unique_ns_record.py --- designate-2.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/082_unique_ns_record.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/082_unique_ns_record.py 2017-02-22 05:57:03.000000000 +0000 @@ -23,6 +23,7 @@ from oslo_log import log as logging from sqlalchemy.schema import MetaData, Table from sqlalchemy import exc +from sqlalchemy.engine.reflection import Inspector LOG = logging.getLogger() @@ -44,9 +45,11 @@ pool_ns_records_table = Table('pool_ns_records', meta, autoload=True) # Only apply it if it's not there (It's been backported to L) - constraints = [i.name for i in pool_ns_records_table.constraints] + insp = Inspector.from_engine(migrate_engine) + unique_constraints = insp.get_unique_constraints('pool_ns_records') + unique_constraint_names = [i['name'] for i in unique_constraints] - if CONSTRAINT_NAME not in constraints: + if CONSTRAINT_NAME not in unique_constraint_names: # We define the constraint here if not it shows in the list above. constraint = UniqueConstraint('pool_id', 'hostname', name=CONSTRAINT_NAME, diff -Nru designate-2.0.0/designate/tests/resources/pools_yaml/multiple-pools.yaml designate-2.1.0/designate/tests/resources/pools_yaml/multiple-pools.yaml --- designate-2.0.0/designate/tests/resources/pools_yaml/multiple-pools.yaml 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/tests/resources/pools_yaml/multiple-pools.yaml 2017-02-22 05:57:03.000000000 +0000 @@ -43,7 +43,7 @@ port: 53 targets: - - type: bind + - type: bind9 description: BIND9 Server 1 masters: - host: 192.0.2.1 @@ -52,7 +52,7 @@ rndc_host: 192.0.2.2 rndc_port: 953 rndc_key_file: /etc/designate/rndc.key - - type: bind + - type: bind9 description: BIND9 Server 2 masters: - host: 192.0.2.1 diff -Nru designate-2.0.0/designate/tests/test_api/test_v2/test_zone_transfers.py designate-2.1.0/designate/tests/test_api/test_v2/test_zone_transfers.py --- designate-2.0.0/designate/tests/test_api/test_v2/test_zone_transfers.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/tests/test_api/test_v2/test_zone_transfers.py 2017-02-22 05:57:04.000000000 +0000 @@ -42,6 +42,9 @@ self.assertIn('created_at', response.json) self.assertEqual('ACTIVE', response.json['status']) self.assertEqual( + self.zone.name, + response.json['zone_name']) + self.assertEqual( self.zone.id, response.json['zone_id']) self.assertIsNone(response.json['updated_at']) @@ -71,6 +74,16 @@ response.json['zone_id']) self.assertIsNone(response.json['updated_at']) + def test_create_zone_transfer_request_empty_body(self): + # Send an empty ("None") body + response = self.client.post_json( + '/zones/%s/tasks/transfer_requests' % (self.zone.id), + None) + + # Check the headers are what we expect + self.assertEqual(201, response.status_int) + self.assertEqual('application/json', response.content_type) + def test_get_zone_transfer_request(self): initial = self.client.post_json( '/zones/%s/tasks/transfer_requests' % (self.zone.id), diff -Nru designate-2.0.0/designate/tests/test_schema/test_format.py designate-2.1.0/designate/tests/test_schema/test_format.py --- designate-2.0.0/designate/tests/test_schema/test_format.py 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/designate/tests/test_schema/test_format.py 2017-02-22 05:57:03.000000000 +0000 @@ -391,6 +391,7 @@ def test_is_sshfp(self): valid_sshfps = [ '72d30d211ce8c464de2811e534de23b9be9b4dc4', + '7f3f61e323a7d75de08a2a6069b333e925cae260f4902017194002f226db8658', ] invalid_sshfps = [ diff -Nru designate-2.0.0/designate.egg-info/pbr.json designate-2.1.0/designate.egg-info/pbr.json --- designate-2.0.0/designate.egg-info/pbr.json 2016-04-07 07:32:10.000000000 +0000 +++ designate-2.1.0/designate.egg-info/pbr.json 2017-02-22 05:59:40.000000000 +0000 @@ -1 +1 @@ -{"is_release": true, "git_version": "f35da84"} \ No newline at end of file +{"git_version": "5203c5c", "is_release": true} \ No newline at end of file diff -Nru designate-2.0.0/designate.egg-info/PKG-INFO designate-2.1.0/designate.egg-info/PKG-INFO --- designate-2.0.0/designate.egg-info/PKG-INFO 2016-04-07 07:32:10.000000000 +0000 +++ designate-2.1.0/designate.egg-info/PKG-INFO 2017-02-22 05:59:40.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: designate -Version: 2.0.0 +Version: 2.1.0 Summary: DNS as a Service Home-page: https://launchpad.net/designate Author: Kiall Mac Innes diff -Nru designate-2.0.0/designate.egg-info/requires.txt designate-2.1.0/designate.egg-info/requires.txt --- designate-2.0.0/designate.egg-info/requires.txt 2016-04-07 07:32:10.000000000 +0000 +++ designate-2.1.0/designate.egg-info/requires.txt 2017-02-22 05:59:40.000000000 +0000 @@ -1,6 +1,6 @@ -Babel>=1.3 +Babel!=2.3.0,!=2.3.1,!=2.3.2,!=2.3.3,>=1.3 eventlet!=0.18.3,>=0.18.2 -Flask<1.0,>=0.10 +Flask!=0.11,<1.0,>=0.10 greenlet>=0.3.2 Jinja2>=2.8 jsonschema!=2.5.0,<3.0.0,>=2.0.0 @@ -8,7 +8,7 @@ keystonemiddleware!=4.1.0,>=4.0.0 netaddr!=0.7.16,>=0.7.12 oslo.config>=3.7.0 -oslo.concurrency>=3.5.0 +oslo.concurrency>=3.7.1 oslo.messaging>=4.0.0 oslo.middleware>=3.0.0 oslo.log>=1.14.0 @@ -29,7 +29,7 @@ sqlalchemy-migrate>=0.9.6 stevedore>=1.5.0 suds-jurko>=0.6 -setuptools>=16.0 +setuptools!=24.0.0,>=16.0 WebOb>=1.2.3 oslo.db>=4.1.0 oslo.i18n>=2.1.0 @@ -41,13 +41,13 @@ debtcollector>=1.2.0 [:(python_version!='2.7')] -Routes!=2.0,>=1.12.3 +Routes!=2.0,!=2.3.0,>=1.12.3 [:(python_version<'3.0')] -dnspython>=1.12.0 +dnspython!=1.13.0,>=1.12.0 [:(python_version=='2.7')] -Routes!=2.0,!=2.1,>=1.12.3 +Routes!=2.0,!=2.1,!=2.3.0,>=1.12.3 [:(python_version>='3.0')] dnspython3>=1.12.0 diff -Nru designate-2.0.0/designate.egg-info/SOURCES.txt designate-2.1.0/designate.egg-info/SOURCES.txt --- designate-2.0.0/designate.egg-info/SOURCES.txt 2016-04-07 07:32:11.000000000 +0000 +++ designate-2.1.0/designate.egg-info/SOURCES.txt 2017-02-22 05:59:42.000000000 +0000 @@ -720,6 +720,7 @@ releasenotes/notes/pool-config-db-45a2cad74e22d95e.yaml releasenotes/notes/pool_scheduler-32e34dda9484ef9a.yaml releasenotes/notes/soa_refresh_interval_randomization-fcc1d0d63124699b.yaml +releasenotes/notes/zone_name-null-zone-trasfer-request-response-a2e316872798d1df.yaml releasenotes/source/conf.py releasenotes/source/index.rst releasenotes/source/liberty.rst diff -Nru designate-2.0.0/devstack/plugin.sh designate-2.1.0/devstack/plugin.sh --- designate-2.0.0/devstack/plugin.sh 2016-04-07 07:30:43.000000000 +0000 +++ designate-2.1.0/devstack/plugin.sh 2017-02-22 05:57:04.000000000 +0000 @@ -57,6 +57,13 @@ iniset $DESIGNATE_CONF DEFAULT root-helper sudo designate-rootwrap $DESIGNATE_ROOTWRAP_CONF iniset $DESIGNATE_CONF storage:sqlalchemy connection `database_connection_url designate` + # Quota Configuration + iniset $DESIGNATE_CONF DEFAULT quota_zones $DESIGNATE_QUOTA_ZONES + iniset $DESIGNATE_CONF DEFAULT quota_zone_recordsets $DESIGNATE_QUOTA_ZONE_RECORDSETS + iniset $DESIGNATE_CONF DEFAULT quota_zone_records $DESIGNATE_QUOTA_ZONE_RECORDS + iniset $DESIGNATE_CONF DEFAULT quota_recordset_records $DESIGNATE_QUOTA_RECORDSET_RECORDS + iniset $DESIGNATE_CONF DEFAULT quota_api_export_size $DESIGNATE_QUOTA_API_EXPORT_SIZE + # Coordination Configuration if [[ -n "$DESIGNATE_COORDINATION_URL" ]]; then iniset $DESIGNATE_CONF coordination backend_url $DESIGNATE_COORDINATION_URL @@ -84,9 +91,9 @@ iniset $DESIGNATE_CONF service:api enabled_extensions_admin $DESIGNATE_ENABLED_EXTENSIONS_ADMIN iniset $DESIGNATE_CONF service:api api_host $DESIGNATE_SERVICE_HOST iniset $DESIGNATE_CONF service:api api_base_uri $DESIGNATE_SERVICE_PROTOCOL://$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT/ - iniset $DESIGNATE_CONF service:api enable_api_v1 True - iniset $DESIGNATE_CONF service:api enable_api_v2 True - iniset $DESIGNATE_CONF service:api enable_api_admin True + iniset $DESIGNATE_CONF service:api enable_api_v1 $DESIGNATE_ENABLE_API_V1 + iniset $DESIGNATE_CONF service:api enable_api_v2 $DESIGNATE_ENABLE_API_V2 + iniset $DESIGNATE_CONF service:api enable_api_admin $DESIGNATE_ENABLE_API_ADMIN # mDNS Configuration iniset $DESIGNATE_CONF service:mdns host $DESIGNATE_SERVICE_HOST @@ -149,6 +156,15 @@ # Configure the needed tempest options function configure_designate_tempest() { if is_service_enabled tempest; then + # Tell tempest we're available + iniset $TEMPEST_CONFIG service_available designate True + + # Tell tempest which APIs are available + iniset $TEMPEST_CONFIG dns_feature_enabled api_v1 $DESIGNATE_ENABLE_API_V1 + iniset $TEMPEST_CONFIG dns_feature_enabled api_v2 $DESIGNATE_ENABLE_API_V2 + iniset $TEMPEST_CONFIG dns_feature_enabled api_admin $DESIGNATE_ENABLE_API_ADMIN + + # Tell tempest where are nameservers are. nameservers=$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT_DNS case $DESIGNATE_BACKEND_DRIVER in bind9|powerdns) @@ -166,6 +182,9 @@ nameservers=$DESIGNATE_NAMESERVERS fi + iniset $TEMPEST_CONFIG dns nameservers $nameservers + + # For legacy functionaltests iniset $TEMPEST_CONFIG designate nameservers $nameservers fi } @@ -262,6 +281,12 @@ ln -fs $DESIGNATEDASHBOARD_DIR/designatedashboard/enabled/_1720_project_dns_panel.py $HORIZON_DIR/openstack_dashboard/local/enabled/_1720_project_dns_panel.py } +# install_designatetempest - Collect source and prepare +function install_designatetempest { + git_clone_by_name "designate-tempest-plugin" + setup_dev_lib "designate-tempest-plugin" +} + # start_designate - Start running processes, including screen function start_designate { start_designate_backend @@ -313,6 +338,11 @@ install_designatedashboard fi + if is_service_enabled tempest; then + echo_summary "Installing Designate Tempest Plugin" + install_designatetempest + fi + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then echo_summary "Configuring Designate" configure_designate diff -Nru designate-2.0.0/devstack/settings designate-2.1.0/devstack/settings --- designate-2.0.0/devstack/settings 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/devstack/settings 2017-02-22 05:57:04.000000000 +0000 @@ -9,7 +9,17 @@ DESIGNATE_PERIODIC_SYNC_INTERVAL=${DESIGNATE_PERIODIC_SYNC_INTERVAL:-1800} DESIGNATE_COORDINATION_URL=${DESIGNATE_COORDINATION_URL:-} -# Default extensions +# Quota Options +DESIGNATE_QUOTA_ZONES=${DESIGNATE_QUOTA_ZONES:-100} +DESIGNATE_QUOTA_ZONE_RECORDSETS=${DESIGNATE_QUOTA_ZONE_RECORDSETS:-500} +DESIGNATE_QUOTA_ZONE_RECORDS=${DESIGNATE_QUOTA_ZONE_RECORDS:-500} +DESIGNATE_QUOTA_RECORDSET_RECORDS=${DESIGNATE_QUOTA_RECORDSET_RECORDS:-20} +DESIGNATE_QUOTA_API_EXPORT_SIZE=${DESIGNATE_QUOTA_API_EXPORT_SIZE:-1000} + +# Default APIs and Extensions +DESIGNATE_ENABLE_API_V1=${DESIGNATE_ENABLE_API_V1:-"True"} +DESIGNATE_ENABLE_API_V2=${DESIGNATE_ENABLE_API_V2:-"True"} +DESIGNATE_ENABLE_API_ADMIN=${DESIGNATE_ENABLE_API_ADMIN:-"True"} DESIGNATE_ENABLED_EXTENSIONS_V1=${DESIGNATE_ENABLED_EXTENSIONS_V1:-"quotas"} DESIGNATE_ENABLED_EXTENSIONS_V2=${DESIGNATE_ENABLED_EXTENSIONS_V2:-""} DESIGNATE_ENABLED_EXTENSIONS_ADMIN=${DESIGNATE_ENABLED_EXTENSIONS_ADMIN:-"quotas"} @@ -42,6 +52,10 @@ DESIGNATEDASHBOARD_BRANCH=${DESIGNATEDASHBOARD_BRANCH:-master} GITDIR["python-designateclient"]=$DEST/python-designateclient +GITREPO["designate-tempest-plugin"]=${DESIGNATETEMPEST_REPO:-${GIT_BASE}/openstack/designate-tempest-plugin.git} +GITBRANCH["designate-tempest-plugin"]=${DESIGNATETEMPEST_BRANCH:-master} +GITDIR["designate-tempest-plugin"]=$DEST/designate-tempest-plugin + # Tell Tempest this project is present TEMPEST_SERVICES+=,designate diff -Nru designate-2.0.0/etc/designate/designate.conf.sample designate-2.1.0/etc/designate/designate.conf.sample --- designate-2.0.0/etc/designate/designate.conf.sample 2016-04-07 07:30:43.000000000 +0000 +++ designate-2.1.0/etc/designate/designate.conf.sample 2017-02-22 05:57:04.000000000 +0000 @@ -60,8 +60,8 @@ # Number of central greenthreads to spawn #threads = 1000 -# Maximum domain name length -#max_domain_name_len = 255 +# Maximum zone name length +#max_zone_name_len = 255 # Maximum recordset name length #max_recordset_name_len = 255 diff -Nru designate-2.0.0/etc/designate/pools.yaml.sample-bind designate-2.1.0/etc/designate/pools.yaml.sample-bind --- designate-2.0.0/etc/designate/pools.yaml.sample-bind 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/etc/designate/pools.yaml.sample-bind 2017-02-22 05:57:03.000000000 +0000 @@ -25,7 +25,7 @@ # List out the targets for this pool. For BIND, most often, there will be one # entry for each BIND server. targets: - - type: bind + - type: bind9 description: BIND9 Server 1 # List out the designate-mdns servers from which BIND servers should @@ -42,7 +42,7 @@ rndc_port: 953 rndc_key_file: /etc/designate/rndc.key - - type: bind + - type: bind9 description: BIND9 Server 2 # List out the designate-mdns servers from which BIND servers should diff -Nru designate-2.0.0/etc/designate/pools.yaml.sample-multiple-pools designate-2.1.0/etc/designate/pools.yaml.sample-multiple-pools --- designate-2.0.0/etc/designate/pools.yaml.sample-multiple-pools 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/etc/designate/pools.yaml.sample-multiple-pools 2017-02-22 05:57:04.000000000 +0000 @@ -74,7 +74,7 @@ # List out the targets for this pool. For BIND, most often, there will be one # entry for each BIND server. targets: - - type: bind + - type: bind9 description: BIND9 Server 1 # List out the designate-mdns servers from which BIND servers should @@ -91,7 +91,7 @@ rndc_port: 953 rndc_key_file: /etc/designate/rndc.key - - type: bind + - type: bind9 description: BIND9 Server 2 # List out the designate-mdns servers from which BIND servers should diff -Nru designate-2.0.0/PKG-INFO designate-2.1.0/PKG-INFO --- designate-2.0.0/PKG-INFO 2016-04-07 07:32:11.000000000 +0000 +++ designate-2.1.0/PKG-INFO 2017-02-22 05:59:42.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: designate -Version: 2.0.0 +Version: 2.1.0 Summary: DNS as a Service Home-page: https://launchpad.net/designate Author: Kiall Mac Innes diff -Nru designate-2.0.0/releasenotes/notes/zone_name-null-zone-trasfer-request-response-a2e316872798d1df.yaml designate-2.1.0/releasenotes/notes/zone_name-null-zone-trasfer-request-response-a2e316872798d1df.yaml --- designate-2.0.0/releasenotes/notes/zone_name-null-zone-trasfer-request-response-a2e316872798d1df.yaml 1970-01-01 00:00:00.000000000 +0000 +++ designate-2.1.0/releasenotes/notes/zone_name-null-zone-trasfer-request-response-a2e316872798d1df.yaml 2017-02-22 05:57:03.000000000 +0000 @@ -0,0 +1,3 @@ +--- +fixes: + - Added zone_name in zone trasfer request response. Closed bug#1580014 diff -Nru designate-2.0.0/requirements.txt designate-2.1.0/requirements.txt --- designate-2.0.0/requirements.txt 2016-04-07 07:30:43.000000000 +0000 +++ designate-2.1.0/requirements.txt 2017-02-22 05:57:04.000000000 +0000 @@ -2,9 +2,9 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -Babel>=1.3 # BSD +Babel!=2.3.0,!=2.3.1,!=2.3.2,!=2.3.3,>=1.3 # BSD eventlet!=0.18.3,>=0.18.2 # MIT -Flask<1.0,>=0.10 # BSD +Flask!=0.11,<1.0,>=0.10 # BSD greenlet>=0.3.2 # MIT Jinja2>=2.8 # BSD License (3 clause) jsonschema!=2.5.0,<3.0.0,>=2.0.0 # MIT @@ -12,7 +12,7 @@ keystonemiddleware!=4.1.0,>=4.0.0 # Apache-2.0 netaddr!=0.7.16,>=0.7.12 # BSD oslo.config>=3.7.0 # Apache-2.0 -oslo.concurrency>=3.5.0 # Apache-2.0 +oslo.concurrency>=3.7.1 # Apache-2.0 oslo.messaging>=4.0.0 # Apache-2.0 oslo.middleware>=3.0.0 # Apache-2.0 oslo.log>=1.14.0 # Apache-2.0 @@ -27,17 +27,17 @@ pecan>=1.0.0 # BSD python-designateclient>=1.5.0 # Apache-2.0 python-neutronclient!=4.1.0,>=2.6.0 # Apache-2.0 -Routes!=2.0,!=2.1,>=1.12.3;python_version=='2.7' # MIT -Routes!=2.0,>=1.12.3;python_version!='2.7' # MIT +Routes!=2.0,!=2.1,!=2.3.0,>=1.12.3;python_version=='2.7' # MIT +Routes!=2.0,!=2.3.0,>=1.12.3;python_version!='2.7' # MIT requests!=2.9.0,>=2.8.1 # Apache-2.0 six>=1.9.0 # MIT SQLAlchemy<1.1.0,>=1.0.10 # MIT sqlalchemy-migrate>=0.9.6 # Apache-2.0 stevedore>=1.5.0 # Apache-2.0 suds-jurko>=0.6 # LGPL -setuptools>=16.0 # PSF/ZPL +setuptools!=24.0.0,>=16.0 # PSF/ZPL WebOb>=1.2.3 # MIT -dnspython>=1.12.0;python_version<'3.0' # http://www.dnspython.org/LICENSE +dnspython!=1.13.0,>=1.12.0;python_version<'3.0' # http://www.dnspython.org/LICENSE dnspython3>=1.12.0;python_version>='3.0' # http://www.dnspython.org/LICENSE oslo.db>=4.1.0 # Apache-2.0 oslo.i18n>=2.1.0 # Apache-2.0 diff -Nru designate-2.0.0/test-requirements.txt designate-2.1.0/test-requirements.txt --- designate-2.0.0/test-requirements.txt 2016-04-07 07:30:41.000000000 +0000 +++ designate-2.1.0/test-requirements.txt 2017-02-22 05:57:04.000000000 +0000 @@ -5,7 +5,7 @@ # Hacking already pins down pep8, pyflakes and flake8 hacking<0.10,>=0.9.2 coverage>=3.6 # Apache-2.0 -fixtures>=1.3.1 # Apache-2.0/BSD +fixtures<2.0,>=1.3.1 # Apache-2.0/BSD mock>=1.2 # BSD oslotest>=1.10.0 # Apache-2.0 oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0 diff -Nru designate-2.0.0/tox.ini designate-2.1.0/tox.ini --- designate-2.0.0/tox.ini 2016-04-07 07:30:43.000000000 +0000 +++ designate-2.1.0/tox.ini 2017-02-22 05:57:04.000000000 +0000 @@ -5,7 +5,7 @@ [testenv] usedevelop = True -install_command = pip install {opts} {packages} +install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/mitaka} {opts} {packages} deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt setenv =