diff -Nru designate-3.0.0/AUTHORS designate-3.0.1/AUTHORS --- designate-3.0.0/AUTHORS 2016-10-06 13:14:42.000000000 +0000 +++ designate-3.0.1/AUTHORS 2017-03-01 11:01:34.000000000 +0000 @@ -79,6 +79,7 @@ Kumar Acharya MAnupama Matt Thompson +Maurice Schreiber Michael Krotscheck Michael Still Mike Carden @@ -115,6 +116,7 @@ THOMAS J. COCOZZELLO Takashi NATSUME Thierry Carrez +Thomas Bechtold Tim Freund Tim Simmons TimSimmons diff -Nru designate-3.0.0/ChangeLog designate-3.0.1/ChangeLog --- designate-3.0.0/ChangeLog 2016-10-06 13:14:41.000000000 +0000 +++ designate-3.0.1/ChangeLog 2017-03-01 11:01:34.000000000 +0000 @@ -1,6 +1,16 @@ CHANGES ======= +3.0.1 +----- + +* Allow for zones / pools with no attributes +* Use the oslo_utils address parser +* [backend:akamai] fix retrieval of tsig_key_name +* Fix grenade to use the driver specified in the gate +* Add pGSQL support for pdns4 driver in devstack +* Fix DB migration with postgresql + 3.0.0 ----- diff -Nru designate-3.0.0/debian/changelog designate-3.0.1/debian/changelog --- designate-3.0.0/debian/changelog 2016-10-07 03:18:54.000000000 +0000 +++ designate-3.0.1/debian/changelog 2017-05-18 18:09:41.000000000 +0000 @@ -1,8 +1,14 @@ -designate (1:3.0.0-0ubuntu1~cloud0) xenial-newton; urgency=medium +designate (1:3.0.1-0ubuntu1~cloud0) xenial-newton; urgency=medium * New upstream release for the Ubuntu Cloud Archive. - -- Openstack Ubuntu Testing Bot Fri, 07 Oct 2016 03:18:54 +0000 + -- Openstack Ubuntu Testing Bot Thu, 18 May 2017 18:09:41 +0000 + +designate (1:3.0.1-0ubuntu1) yakkety; urgency=medium + + * New upstream point release for OpenStack Newton (LP: #1688557). + + -- Corey Bryant Fri, 05 May 2017 15:15:53 -0400 designate (1:3.0.0-0ubuntu1) yakkety; urgency=medium diff -Nru designate-3.0.0/debian/gbp.conf designate-3.0.1/debian/gbp.conf --- designate-3.0.0/debian/gbp.conf 2016-10-06 14:40:22.000000000 +0000 +++ designate-3.0.1/debian/gbp.conf 2017-05-05 19:15:53.000000000 +0000 @@ -1,5 +1,5 @@ [DEFAULT] -debian-branch = master +debian-branch = stable/newton upstream-tag = %(version)s pristine-tar = True diff -Nru designate-3.0.0/designate/backend/impl_akamai.py designate-3.0.1/designate/backend/impl_akamai.py --- designate-3.0.0/designate/backend/impl_akamai.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/backend/impl_akamai.py 2017-03-01 10:59:45.000000000 +0000 @@ -221,7 +221,7 @@ zone.name, masters, zone.id, - target.options["tsig_key_name"], + target.options.get("tsig_key_name", None), target.options.get("tsig_key_secret", None), target.options.get("tsig_key_algorithm", None)) else: diff -Nru designate-3.0.0/designate/scheduler/filters/attribute_filter.py designate-3.0.1/designate/scheduler/filters/attribute_filter.py --- designate-3.0.0/designate/scheduler/filters/attribute_filter.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/scheduler/filters/attribute_filter.py 2017-03-01 10:59:45.000000000 +0000 @@ -15,6 +15,7 @@ from oslo_log import log as logging from oslo_utils.strutils import bool_from_string +from designate import exceptions from designate.objects import PoolAttributeList from designate.scheduler.filters import base @@ -57,11 +58,16 @@ def filter(self, context, pools, zone): - zone_attributes = zone.attributes.to_dict() + try: + zone_attributes = zone.attributes.to_dict() + except exceptions.RelationNotLoaded: + zone_attributes = {} def evaluate_pool(pool): - - pool_attributes = pool.attributes.to_dict() + try: + pool_attributes = pool.attributes.to_dict() + except exceptions.RelationNotLoaded: + pool_attributes = {} # Check if the keys requested exist in this pool if not {key for key in six.iterkeys(pool_attributes)}.issuperset( diff -Nru designate-3.0.0/designate/service.py designate-3.0.1/designate/service.py --- designate-3.0.0/designate/service.py 2016-10-06 13:12:57.000000000 +0000 +++ designate-3.0.1/designate/service.py 2017-03-01 10:59:45.000000000 +0000 @@ -30,6 +30,7 @@ from oslo_log import log as logging from oslo_service import service from oslo_service import sslutils +from oslo_utils import netutils from designate.i18n import _ from designate.i18n import _LE @@ -123,17 +124,11 @@ return [(host, port)] else: - def _split_host_port(l): - try: - host, port = l.split(':', 1) - return host, int(port) - except ValueError: - LOG.exception(_LE('Invalid ip:port pair: %s'), l) - raise - - # Convert listen pair list to a set, to remove accidental - # duplicates. - return map(_split_host_port, set(self._service_config.listen)) + + return map( + netutils.parse_host_port, + set(self._service_config.listen) + ) class RPCService(object): diff -Nru designate-3.0.0/designate/sqlalchemy/base.py designate-3.0.1/designate/sqlalchemy/base.py --- designate-3.0.0/designate/sqlalchemy/base.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/sqlalchemy/base.py 2017-03-01 10:59:45.000000000 +0000 @@ -306,7 +306,8 @@ select_from(rzjoin).where(zones_table.c.deleted == '0') if index_hint: - inner_q = inner_q.with_hint(recordsets_table, index_hint) + inner_q = inner_q.with_hint(recordsets_table, index_hint, + dialect_name='mysql') if marker is not None: marker = utils.check_marker(recordsets_table, marker, diff -Nru designate-3.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py designate-3.0.1/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py --- designate-3.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py 2017-03-01 10:59:45.000000000 +0000 @@ -94,9 +94,10 @@ server_default='0'), Column('deleted_at', DateTime, nullable=True, default=None), Column('description', Unicode(160), nullable=True), - Column('status', Enum(name='resource_statuses', *RESOURCE_STATUSES), + Column('status', Enum(name='domains_resource_statuses', + *RESOURCE_STATUSES), nullable=False, server_default='PENDING', default='PENDING'), - Column('action', Enum(name='actions', *ACTIONS), + Column('action', Enum(name='domain_actions', *ACTIONS), default='CREATE', server_default='CREATE', nullable=False), Column('pool_id', UUID, default=None, nullable=True), Column('reverse_name', String(255), nullable=False, server_default=''), @@ -177,7 +178,7 @@ Column('managed_plugin_name', Unicode(50), default=None, nullable=True), Column('hash', String(32), nullable=False), Column('description', Unicode(160), nullable=True), - Column('status', Enum(name='resource_statuses', *RESOURCE_STATUSES), + Column('status', Enum(name='record_resource_statuses', *RESOURCE_STATUSES), server_default='PENDING', default='PENDING', nullable=False), Column('tenant_id', String(36), default=None, nullable=True), Column('recordset_id', UUID, nullable=False), @@ -185,7 +186,7 @@ Column('managed_resource_region', Unicode(100), default=None, nullable=True), Column('managed_extra', Unicode(100), default=None, nullable=True), - Column('action', Enum(name='actions', *ACTIONS), + Column('action', Enum(name='record_actions', *ACTIONS), default='CREATE', server_default='CREATE', nullable=False), Column('serial', Integer(), server_default='1', nullable=False), Column('domain_shard', SmallInteger(), nullable=False), @@ -304,7 +305,8 @@ Column("description", String(255)), Column("tenant_id", String(36), default=None, nullable=False), Column("target_tenant_id", String(36), default=None, nullable=True), - Column("status", Enum(name='resource_statuses', *TASK_STATUSES), + Column("status", Enum(name='zone_transfer_requests_resource_statuses', + *TASK_STATUSES), nullable=False, server_default='ACTIVE', default='ACTIVE'), @@ -323,7 +325,8 @@ Column('domain_id', UUID, nullable=False), Column('zone_transfer_request_id', UUID, nullable=False), Column("tenant_id", String(36), default=None, nullable=False), - Column("status", Enum(name='resource_statuses', *TASK_STATUSES), + Column("status", Enum(name='zone_transfer_accepts_resource_statuses', + *TASK_STATUSES), nullable=False, server_default='ACTIVE', default='ACTIVE'), @@ -348,7 +351,7 @@ Column('task_type', Enum(name='task_types', *ZONE_TASK_TYPES), nullable=True), Column('message', String(160), nullable=True), - Column('status', Enum(name='resource_statuses', *TASK_STATUSES), + Column('status', Enum(name='zone_tasks_resource_statuses', *TASK_STATUSES), nullable=False, server_default='ACTIVE', default='ACTIVE'), Column('location', String(160), nullable=True), diff -Nru designate-3.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/086_new_pools_tables.py designate-3.0.1/designate/storage/impl_sqlalchemy/migrate_repo/versions/086_new_pools_tables.py --- designate-3.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/086_new_pools_tables.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/storage/impl_sqlalchemy/migrate_repo/versions/086_new_pools_tables.py 2017-03-01 10:59:45.000000000 +0000 @@ -106,7 +106,8 @@ Column('port', Integer(), nullable=False), ForeignKeyConstraint(['pool_id'], ['pools.id'], ondelete='CASCADE'), - UniqueConstraint('pool_id', 'host', 'port', name='unique_pool_host_port'), + UniqueConstraint('pool_id', 'host', 'port', + name='unique_pool_also_notifies_pool0host0port'), mysql_engine='InnoDB', mysql_charset='utf8', @@ -119,8 +120,8 @@ # Load the pool_attributes_table table schema for relations Table('pools', meta, autoload=True) - pool_nameservers.create() - pool_targets.create() - pool_target_options.create() - pool_target_masters.create() - pool_also_notifies.create() + pool_nameservers.create(checkfirst=True) + pool_targets.create(checkfirst=True) + pool_target_options.create(checkfirst=True) + pool_target_masters.create(checkfirst=True) + pool_also_notifies.create(checkfirst=True) diff -Nru designate-3.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/097_add_services.py designate-3.0.1/designate/storage/impl_sqlalchemy/migrate_repo/versions/097_add_services.py --- designate-3.0.0/designate/storage/impl_sqlalchemy/migrate_repo/versions/097_add_services.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/storage/impl_sqlalchemy/migrate_repo/versions/097_add_services.py 2017-03-01 10:59:45.000000000 +0000 @@ -34,8 +34,9 @@ def upgrade(migrate_engine): meta.bind = migrate_engine - status_enum = Enum(name='service_statuses', metadata=meta, *SERVICE_STATES) - status_enum.create() + status_enum = Enum(name='service_statuses_enum', metadata=meta, + *SERVICE_STATES) + status_enum.create(checkfirst=True) service_status_table = Table('service_statuses', meta, Column('id', UUID(), default=utils.generate_uuid, primary_key=True), @@ -49,4 +50,4 @@ Column('stats', Text, nullable=False), Column('capabilities', Text, nullable=False), ) - service_status_table.create() + service_status_table.create(checkfirst=True) diff -Nru designate-3.0.0/designate/storage/impl_sqlalchemy/tables.py designate-3.0.1/designate/storage/impl_sqlalchemy/tables.py --- designate-3.0.0/designate/storage/impl_sqlalchemy/tables.py 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/designate/storage/impl_sqlalchemy/tables.py 2017-03-01 10:59:45.000000000 +0000 @@ -128,7 +128,7 @@ Column('expire', Integer, default=CONF.default_soa_expire, nullable=False), Column('minimum', Integer, default=CONF.default_soa_minimum, nullable=False), - Column('status', Enum(name='resource_statuses', *RESOURCE_STATUSES), + Column('status', Enum(name='zones_resource_statuses', *RESOURCE_STATUSES), nullable=False, server_default='PENDING', default='PENDING'), Column('parent_zone_id', UUID, default=None, nullable=True), Column('action', Enum(name='actions', *ACTIONS), @@ -226,7 +226,8 @@ nullable=True), Column('managed_resource_id', UUID, default=None, nullable=True), Column('managed_tenant_id', String(36), default=None, nullable=True), - Column('status', Enum(name='resource_statuses', *RESOURCE_STATUSES), + Column('status', Enum(name='records_resource_statuses', + *RESOURCE_STATUSES), server_default='PENDING', default='PENDING', nullable=False), Column('action', Enum(name='actions', *ACTIONS), default='CREATE', server_default='CREATE', nullable=False), @@ -420,7 +421,8 @@ Column("description", String(255), nullable=False), Column("tenant_id", String(36), default=None, nullable=False), Column("target_tenant_id", String(36), default=None, nullable=True), - Column("status", Enum(name='resource_statuses', *TASK_STATUSES), + Column("status", Enum(name='zone_transfer_requests_resource_statuses', + *TASK_STATUSES), nullable=False, server_default='ACTIVE', default='ACTIVE'), @@ -439,7 +441,8 @@ Column('zone_id', UUID, nullable=False), Column('zone_transfer_request_id', UUID, nullable=False), Column("tenant_id", String(36), default=None, nullable=False), - Column("status", Enum(name='resource_statuses', *TASK_STATUSES), + Column("status", Enum(name='zone_transfer_accepts_resource_statuses', + *TASK_STATUSES), nullable=False, server_default='ACTIVE', default='ACTIVE'), @@ -464,7 +467,7 @@ Column('task_type', Enum(name='task_types', *ZONE_TASK_TYPES), nullable=True), Column('message', String(160), nullable=True), - Column('status', Enum(name='resource_statuses', *TASK_STATUSES), + Column('status', Enum(name='zone_tasks_resource_statuses', *TASK_STATUSES), nullable=False, server_default='ACTIVE', default='ACTIVE'), Column('location', String(160), nullable=True), diff -Nru designate-3.0.0/designate.egg-info/pbr.json designate-3.0.1/designate.egg-info/pbr.json --- designate-3.0.0/designate.egg-info/pbr.json 2016-10-06 13:14:42.000000000 +0000 +++ designate-3.0.1/designate.egg-info/pbr.json 2017-03-01 11:01:34.000000000 +0000 @@ -1 +1 @@ -{"git_version": "c0c599b", "is_release": true} \ No newline at end of file +{"git_version": "7d7d71e", "is_release": true} \ No newline at end of file diff -Nru designate-3.0.0/designate.egg-info/PKG-INFO designate-3.0.1/designate.egg-info/PKG-INFO --- designate-3.0.0/designate.egg-info/PKG-INFO 2016-10-06 13:14:42.000000000 +0000 +++ designate-3.0.1/designate.egg-info/PKG-INFO 2017-03-01 11:01:34.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: designate -Version: 3.0.0 +Version: 3.0.1 Summary: DNS as a Service Home-page: https://launchpad.net/designate Author: Kiall Mac Innes diff -Nru designate-3.0.0/designate.egg-info/SOURCES.txt designate-3.0.1/designate.egg-info/SOURCES.txt --- designate-3.0.0/designate.egg-info/SOURCES.txt 2016-10-06 13:14:42.000000000 +0000 +++ designate-3.0.1/designate.egg-info/SOURCES.txt 2017-03-01 11:01:35.000000000 +0000 @@ -672,6 +672,7 @@ devstack/designate_plugins/backend-infoblox devstack/designate_plugins/backend-pdns4 devstack/designate_plugins/backend-pdns4-mysql-db.sql +devstack/designate_plugins/backend-pdns4-pgsql-db.sql devstack/designate_plugins/backend-powerdns devstack/gate/gate_hook.sh devstack/gate/post_test_hook.sh diff -Nru designate-3.0.0/devstack/designate_plugins/backend-pdns4 designate-3.0.1/devstack/designate_plugins/backend-pdns4 --- designate-3.0.0/devstack/designate_plugins/backend-pdns4 2016-10-06 13:12:56.000000000 +0000 +++ designate-3.0.1/devstack/designate_plugins/backend-pdns4 2017-03-01 10:59:45.000000000 +0000 @@ -56,8 +56,10 @@ if is_service_enabled mysql; then PDNS+=" pdns-backend-mysql" + elif is_service_enabled postgresql; then + PDNS+=" pdns-backend-pgsql" else - die $LINENO "PDNS4 backend only supports MySQL" + die $LINENO "PDNS4 backend only supports MySQL / pgSQL" fi install_package $PDNS @@ -132,8 +134,20 @@ gmysql-dbname=designate_pdns gmysql-dnssec=yes EOF + elif is_service_enabled postgresql; then + sudo tee -a $POWERDNS_CFG_DIR/pdns.conf > /dev/null <