Add xenial Queens amulet tests to gate

* Add xenial/queens to gate amulet tests
* Add NS records option as this cannot be set through the
  designate v2 api and v1 api is gone in Queens
* Update pools.yaml to include NS records. The previous
  setting 'dns_server_record' which was referenced in the
  template is not set by the charm.
* Update amulet tests to do designate v2 api compatible
  tests for Queens.

Change-Id: I314e42a51458b0c4542acc823d4fe0c875697087
This commit is contained in:
Liam Young 2018-02-22 13:49:52 +00:00
parent 9b00a39aa4
commit 50960d897d
5 changed files with 96 additions and 16 deletions

View File

@ -66,3 +66,10 @@ options:
type: boolean
default: false
description: Enables host request headers.
nameserver-records:
default: ""
type: string
description: |
String containing a list of NS records for zones hosted within this pool
space seperated.
e.g. "ns1-1.example.org ns1-1.example.org."

View File

@ -251,6 +251,14 @@ class DesignateConfigurationAdapter(
rndc_master_ips.append(rndc_master_ip)
return rndc_master_ips
@property
def ns_records(self):
"""List of NS records
@returns [] List of NS records
"""
return self.nameserver_records.split()
class DesignateAdapters(openstack_adapters.OpenStackAPIRelationAdapters):
"""

View File

@ -2,10 +2,12 @@
name: default
description: Pool genergated by Juju
{% if options.dns_server_record %}
ns_records:
- hostname: {{ options.dns_server_record }}
{% if options.ns_records %}
{% for record in options.ns_records %}
- hostname: {{ record }}
priority: 10
{% endfor %}
{% endif %}
nameservers:

View File

@ -115,9 +115,13 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
'root-password': 'ChangeMe123',
'sst-password': 'ChangeMe123',
}
designate_config = {
'nameserver-records': 'ns1-1.example.org. ns2-1.example.org.'
}
configs = {
'keystone': keystone_config,
'percona-cluster': pxc_config,
'designate': designate_config,
}
super(DesignateBasicDeployment, self)._configure_services(configs)
@ -147,10 +151,9 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
]
# Authenticate admin with keystone endpoint
self.keystone = u.authenticate_keystone_admin(self.keystone_sentry,
user='admin',
password='openstack',
tenant='admin')
self.keystone_session, self.keystone = u.get_default_keystone_session(
self.keystone_sentry,
openstack_release=self._get_openstack_release())
# Authenticate admin with designate endpoint
designate_ep = self.keystone.service_catalog.url_for(
@ -159,13 +162,18 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
keystone_ep = self.keystone.service_catalog.url_for(
service_type='identity',
interface='publicURL')
self.designate = designate_client.Client(
version='1',
auth_url=keystone_ep,
username="admin",
password="openstack",
tenant_name="admin",
endpoint=designate_ep)
if self._get_openstack_release() >= self.xenial_queens:
self.designate = designate_client.Client(
version='2',
session=self.keystone_session)
else:
self.designate = designate_client.Client(
version='1',
auth_url=keystone_ep,
username="admin",
password="openstack",
tenant_name="admin",
endpoint=designate_ep)
def check_and_wait(self, check_command, interval=2, max_wait=200,
desc=None):
@ -234,7 +242,10 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
}
actual = self.keystone.service_catalog.get_endpoints()
ret = u.validate_svc_catalog_endpoint_data(expected, actual)
ret = u.validate_svc_catalog_endpoint_data(
expected,
actual,
openstack_release=self._get_openstack_release())
if ret:
amulet.raise_status(amulet.FAIL, msg=ret)
@ -253,8 +264,13 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
'publicurl': u.valid_url,
'service_id': u.not_null}
ret = u.validate_endpoint_data(endpoints, admin_port, internal_port,
public_port, expected)
ret = u.validate_endpoint_data(
endpoints,
admin_port,
internal_port,
public_port,
expected,
openstack_release=self._get_openstack_release())
if ret:
message = 'Designate endpoint: {}'.format(ret)
amulet.raise_status(amulet.FAIL, msg=message)
@ -431,6 +447,9 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
"""Simple api calls to create domain"""
# Designate does not allow the last server to be delete so ensure ns1
# always present
if self._get_openstack_release() >= self.xenial_queens:
u.log.info('Skipping server creation tests for Queens and above')
return
if not self.get_server_id(self.TEST_NS1_RECORD):
server = servers.Server(name=self.TEST_NS1_RECORD)
new_server = self.designate.servers.create(server)
@ -459,9 +478,20 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
def get_test_domain_id(self):
return self.get_domain_id(self.TEST_DOMAIN)
def get_test_zone_id(self):
zone_id = None
for zone in self.designate.zones.list():
if zone['name'] == self.TEST_DOMAIN:
zone_id = zone['id']
break
return zone_id
def check_test_domain_gone(self):
return not self.get_test_domain_id()
def check_test_zone_gone(self):
return not self.get_test_zone_id()
def check_slave_resolve_test_record(self):
lookup_cmd = [
'dig', '+short', '@{}'.format(self.dns_slave_ip),
@ -470,6 +500,39 @@ class DesignateBasicDeployment(amulet_deployment.OpenStackAmuletDeployment):
return self.TEST_RECORD[self.TEST_WWW_RECORD] == cmd_out
def test_410_domain_creation(self):
if self._get_openstack_release() >= self.xenial_queens:
self.v3_410_zone_creation()
else:
self.v2_410_domain_creation()
def v3_410_zone_creation(self):
"""Simple api calls to create domain"""
u.log.debug('Checking if zone exists before trying to create it')
old_zone_id = self.get_test_zone_id()
if old_zone_id:
u.log.debug('Deleting old zone')
self.designate.zones.delete(old_zone_id)
self.check_and_wait(
self.check_test_zone_gone,
desc='Waiting for zone to disappear')
u.log.debug('Creating new zone')
zone = self.designate.zones.create(
name=self.TEST_DOMAIN,
email="fred@amuletexample.com")
assert(zone is not None)
rs = self.designate.recordsets.create(
zone['id'],
'www',
'A',
[self.TEST_RECORD[self.TEST_WWW_RECORD]])
self.check_and_wait(
self.check_slave_resolve_test_record,
desc='Waiting for dns record to propagate')
u.log.debug('Tidy up delete test record')
self.designate.recordsets.delete(zone['id'], rs['id'])
u.log.debug('OK')
def v2_410_domain_creation(self):
"""Simple api calls to create domain"""
u.log.debug('Checking if domain exists before trying to create it')
old_dom_id = self.get_test_domain_id()