diff options
-rw-r--r-- | .zuul.yaml | 1 | ||||
-rw-r--r-- | designate/backend/impl_pdns4.py | 21 | ||||
-rw-r--r-- | designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py | 4 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_pdns4.py | 26 | ||||
-rw-r--r-- | devstack/designate_plugins/backend-pdns4 | 22 | ||||
-rw-r--r-- | lower-constraints.txt | 168 | ||||
-rw-r--r-- | requirements.txt | 3 | ||||
-rw-r--r-- | test-requirements.txt | 3 | ||||
-rw-r--r-- | tox.ini | 7 |
9 files changed, 48 insertions, 207 deletions
@@ -153,7 +153,6 @@ templates: - designate-devstack-jobs - openstack-cover-jobs - - openstack-lower-constraints-jobs - openstack-python-jobs - openstack-python3-train-jobs - publish-openstack-docs-pti diff --git a/designate/backend/impl_pdns4.py b/designate/backend/impl_pdns4.py index 576dddd5..7149beba 100644 --- a/designate/backend/impl_pdns4.py +++ b/designate/backend/impl_pdns4.py @@ -106,10 +106,17 @@ class PDNS4Backend(base.Backend): def delete_zone(self, context, zone): """Delete a DNS zone""" - try: - requests.delete( - self._build_url(zone.name), - headers=self.headers - ).raise_for_status() - except requests.HTTPError as e: - raise exceptions.Backend(e) + # First verify that the zone exists -- If it's not present + # in the backend then we can just declare victory. + if self._check_zone_exists(zone): + try: + requests.delete( + self._build_url(zone.name), + headers=self.headers + ).raise_for_status() + except requests.HTTPError as e: + raise exceptions.Backend(e) + else: + LOG.warning("Trying to delete zone %s but that zone is not " + "present in the pdns backend. Assuming success.", + zone) diff --git a/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py b/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py index 748ca8da..f9e95518 100644 --- a/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py +++ b/designate/storage/impl_sqlalchemy/migrate_repo/versions/070_liberty.py @@ -21,10 +21,12 @@ from sqlalchemy import (Table, MetaData, Column, String, Text, Integer, from oslo_config import cfg from oslo_utils import timeutils +from designate.conf import central from designate.sqlalchemy.types import UUID CONF = cfg.CONF +central.register_opts(CONF) RESOURCE_STATUSES = ['ACTIVE', 'PENDING', 'DELETED', 'ERROR'] RECORD_TYPES = ['A', 'AAAA', 'CNAME', 'MX', 'SRV', 'TXT', 'SPF', 'NS', 'PTR', @@ -367,7 +369,7 @@ def default_shard(context, id_col): def upgrade(migrate_engine): metadata.bind = migrate_engine - default_pool_id = cfg.CONF['service:central'].default_pool_id + default_pool_id = CONF['service:central'].default_pool_id with migrate_engine.begin() as conn: if migrate_engine.name == "mysql": diff --git a/designate/tests/unit/backend/test_pdns4.py b/designate/tests/unit/backend/test_pdns4.py index 2439d7f2..a04a28c8 100644 --- a/designate/tests/unit/backend/test_pdns4.py +++ b/designate/tests/unit/backend/test_pdns4.py @@ -285,6 +285,28 @@ class PDNS4BackendTestCase(designate.tests.TestCase): req_mock.delete( '%s/localhost/zones/example.com.' % self.base_address, ) + req_mock.get( + '%s/localhost/zones/%s' % (self.base_address, self.zone.name), + status_code=200, + ) + + self.backend.delete_zone(self.context, self.zone) + + self.assertEqual( + req_mock.last_request.headers.get('X-API-Key'), 'api_key' + ) + + @requests_mock.mock() + def test_delete_zone_missing(self, req_mock): + req_mock.delete( + '%s/localhost/zones/example.com.' % self.base_address, + ) + + # pdns returns 422 if asked about a zone that doesn't exist. + req_mock.get( + '%s/localhost/zones/%s' % (self.base_address, self.zone.name), + status_code=422, + ) self.backend.delete_zone(self.context, self.zone) @@ -298,6 +320,10 @@ class PDNS4BackendTestCase(designate.tests.TestCase): '%s/localhost/zones/example.com.' % self.base_address, status_code=500, ) + req_mock.get( + '%s/localhost/zones/%s' % (self.base_address, self.zone.name), + status_code=200, + ) self.assertRaisesRegexp( exceptions.Backend, diff --git a/devstack/designate_plugins/backend-pdns4 b/devstack/designate_plugins/backend-pdns4 index 577421ac..3b75b244 100644 --- a/devstack/designate_plugins/backend-pdns4 +++ b/devstack/designate_plugins/backend-pdns4 @@ -32,25 +32,6 @@ fi # install_designate_backend - install any external requirements function install_designate_backend { if is_ubuntu; then - GetOSVersion - if [ "$os_CODENAME" = "trusty" ]; then - sudo tee /etc/apt/sources.list.d/pdns.list > /dev/null <<EOF -deb [arch=amd64] http://repo.powerdns.com/ubuntu trusty-auth-40 main -EOF - sudo tee /etc/apt/preferences.d/pdns > /dev/null <<EOF -Package: pdns-* -Pin: origin repo.powerdns.com -Pin-Priority: 600 -EOF - curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add - && - sudo apt-get update - elif [ "$os_CODENAME" = "xenial" ]; then - echo "Use PDNS4 from apt repo" - elif [ "$os_CODENAME" = "bionic" ]; then - echo "Use PDNS4 from apt repo" - else - die $LINENO "PDNS4 backend only supports bionic, trusty or xenial" - fi PDNS=pdns-server else die $LINENO "PDNS4 Backend plugin backend only supports Ubuntu" @@ -118,7 +99,6 @@ slave=yes cache-ttl=0 query-cache-ttl=0 negquery-cache-ttl=0 -out-of-zone-additional-processing=no webserver=yes webserver-address=$(ipv6_unquote $DESIGNATE_SERVICE_HOST) webserver-allow-from=$(ipv6_unquote $DESIGNATE_SERVICE_HOST),127.0.0.1,::1 @@ -167,7 +147,7 @@ function init_designate_backend { # (Re)create designate_pdns database recreate_database designate_pdns utf8 if is_service_enabled mysql; then - sudo mysql -u root designate_pdns < $DESIGNATE_PLUGINS/backend-pdns4-mysql-db.sql + sudo mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST designate_pdns < $DESIGNATE_PLUGINS/backend-pdns4-mysql-db.sql elif is_service_enabled postgresql; then sudo psql -U root -d designate_pdns -f $DESIGNATE_PLUGINS/backend-pdns4-pgsql-db.sql else diff --git a/lower-constraints.txt b/lower-constraints.txt deleted file mode 100644 index 4cacf0ef..00000000 --- a/lower-constraints.txt +++ /dev/null @@ -1,168 +0,0 @@ -alabaster==0.7.10 -alembic==0.9.8 -amqp==2.2.2 -appdirs==1.4.3 -asn1crypto==0.24.0 -Babel==2.3.4 -bandit==1.1.0 -bcrypt==3.1.4 -beautifulsoup4==4.6.0 -blockdiag==1.5.3 -cachetools==2.0.1 -certifi==2018.1.18 -cffi==1.11.5 -chardet==3.0.4 -click==6.7 -cliff==2.11.0 -cmd2==0.8.1 -contextlib2==0.5.5 -coverage==4.0 -cryptography==2.1.4 -debtcollector==1.2.0 -decorator==4.2.1 -deprecation==2.0 -dnspython3==1.12.0 -dnspython==1.14.0 -doc8==0.6.0 -docutils==0.14 -dogpile.cache==0.6.5 -dulwich==0.19.0 -enum-compat==0.0.2 -eventlet==0.18.2 -extras==1.0.0 -fasteners==0.14.1 -fixtures==3.0.0 -flake8==2.5.5 -Flask==0.10 -funcparserlib==0.3.6 -future==0.16.0 -futurist==1.2.0 -gitdb2==2.0.3 -GitPython==2.1.8 -greenlet==0.4.10 -hacking==0.12.0 -idna==2.6 -imagesize==1.0.0 -iso8601==0.1.12 -itsdangerous==0.24 -Jinja2==2.10 -jmespath==0.9.3 -jsonpatch==1.21 -jsonpointer==2.0 -jsonschema==2.6.0 -kazoo==2.4.0 -keystoneauth1==3.4.0 -keystonemiddleware==4.17.0 -kombu==4.1.0 -linecache2==1.0.0 -logutils==0.3.5 -Mako==1.0.7 -MarkupSafe==1.0 -mccabe==0.2.1 -mock==2.0.0 -monasca-statsd==1.1.0 -monotonic==1.4 -mox3==0.25.0 -msgpack==0.5.6 -munch==2.2.0 -netaddr==0.7.18 -netifaces==0.10.6 -openstackdocstheme==1.20.0 -openstacksdk==0.12.0 -os-api-ref==1.5.0 -os-client-config==1.29.0 -os-service-types==1.2.0 -os-testr==1.0.0 -os-win==3.0.0 -osc-lib==1.10.0 -oslo.cache==1.29.0 -oslo.concurrency==3.26.0 -oslo.config==5.2.0 -oslo.context==2.19.2 -oslo.db==4.27.0 -oslo.i18n==3.15.3 -oslo.log==3.36.0 -oslo.messaging==5.29.0 -oslo.middleware==3.31.0 -oslo.policy==1.30.0 -oslo.reports==1.18.0 -oslo.rootwrap==5.8.0 -oslo.serialization==2.18.0 -oslo.service==1.24.0 -oslo.upgradecheck==0.1.0 -oslo.utils==3.33.0 -oslo.versionedobjects==1.31.2 -oslotest==3.2.0 -packaging==17.1 -paramiko==2.4.1 -Paste==2.0.2 -PasteDeploy==1.5.0 -pbr==2.0.0 -pecan==1.0.0 -pep8==1.5.7 -pika-pool==0.1.3 -pika==0.10.0 -Pillow==5.0.0 -prettytable==0.7.2 -psutil==5.4.3 -pyasn1==0.4.2 -pycadf==2.7.0 -pycparser==2.18 -pyflakes==0.8.1 -Pygments==2.2.0 -pyinotify==0.9.6 -PyNaCl==1.2.1 -pyparsing==2.2.0 -pyperclip==1.6.0 -python-dateutil==2.7.0 -python-designateclient==2.7.0 -python-editor==1.0.3 -python-keystoneclient==3.15.0 -python-memcached==1.56 -python-mimeparse==1.6.0 -python-neutronclient==6.7.0 -python-subunit==1.2.0 -pytz==2018.3 -PyYAML==3.12 -reno==2.7.0 -repoze.lru==0.7 -requests-mock==1.2.0 -requests==2.14.2 -requestsexceptions==1.4.0 -restructuredtext-lint==1.1.3 -rfc3986==1.1.0 -Routes==2.4.1 -simplejson==3.13.2 -six==1.10.0 -smmap2==2.0.3 -snowballstemmer==1.2.1 -Sphinx==1.6.5 -sphinxcontrib-blockdiag==1.5.5 -sphinxcontrib-httpdomain==1.6.1 -sphinxcontrib-websupport==1.0.1 -sqlalchemy-migrate==0.11.0 -SQLAlchemy==1.0.10 -sqlparse==0.2.4 -statsd==3.2.2 -stestr==2.0.0 -stevedore==1.20.0 -suds-jurko==0.6 -tempest==17.1.0 -Tempita==0.5.2 -tenacity==4.4.0 -testresources==2.0.1 -testscenarios==0.4 -testtools==2.2.0 -tooz==1.58.0 -traceback2==1.4.0 -unittest2==1.1.0 -urllib3==1.22 -vine==1.1.4 -voluptuous==0.11.1 -waitress==1.1.0 -webcolors==1.8.1 -WebOb==1.7.1 -WebTest==2.0.27 -Werkzeug==0.9 -wrapt==1.10.11 -zake==0.1.6 diff --git a/requirements.txt b/requirements.txt index 35f59ac7..f64b1380 100644 --- a/requirements.txt +++ b/requirements.txt @@ -44,7 +44,8 @@ oslo.i18n>=3.15.3 # Apache-2.0 oslo.context>=2.19.2 # Apache-2.0 oslo.policy>=1.30.0 # Apache-2.0 Werkzeug>=0.9 # BSD License -python-memcached>=1.56 # PSF +python-memcached>=1.56;python_version=='2.7' # PSF +python-memcached>=1.58;python_version>='3.4' # PSF tooz>=1.58.0 # Apache-2.0 debtcollector>=1.2.0 # Apache-2.0 os-win>=3.0.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index da11a6a6..896745df 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -15,7 +15,8 @@ testscenarios>=0.4 # Apache-2.0/BSD WebTest>=2.0.27 # MIT tempest>=17.1.0 # Apache-2.0 # Bandit security code scanner -bandit>=1.1.0 # Apache-2.0 +bandit>=1.1.0,<1.6.3;python_version=='2.7' # Apache-2.0 +bandit>=1.1.0;python_version>='3.5' # Apache-2.0 zake>=0.1.6 # Apache-2.0 doc8>=0.6.0 # Apache-2.0 Pygments>=2.2.0 # BSD license @@ -199,10 +199,3 @@ exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tools,.ropeproject [hacking] local-check-factory = designate.hacking.checks.factory import_exceptions = designate.i18n - -[testenv:lower-constraints] -basepython = python3 -deps = - -c{toxinidir}/lower-constraints.txt - -r{toxinidir}/test-requirements.txt - -r{toxinidir}/requirements.txt |