From 853a280f08d540bff04a86330e96635f47aefa1e Mon Sep 17 00:00:00 2001 From: James Page Date: Fri, 12 May 2017 04:43:55 +0000 Subject: [PATCH] Updates for pike b1 Resync charmhelpers for pike support. Add amulet tests for pike, but leave disabled for now. Drop use of vpnaas for pike onwards as no milestones where released and its not being actively maintained. Change-Id: Ifce4cf80bee53422612e26114fa2fec684580103 --- .../contrib/openstack/amulet/deployment.py | 6 +- .../charmhelpers/contrib/openstack/context.py | 4 + hooks/charmhelpers/contrib/openstack/utils.py | 37 ++++++ .../charmhelpers/core/host_factory/ubuntu.py | 1 + hooks/charmhelpers/fetch/ubuntu.py | 16 +++ hooks/neutron_api_utils.py | 2 + templates/pike/neutron.conf | 114 ++++++++++++++++++ .../contrib/openstack/amulet/deployment.py | 6 +- .../charmhelpers/core/host_factory/ubuntu.py | 1 + tests/gate-basic-artful-pike | 23 ++++ tests/gate-basic-xenial-pike | 25 ++++ 11 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 templates/pike/neutron.conf create mode 100644 tests/gate-basic-artful-pike create mode 100644 tests/gate-basic-xenial-pike diff --git a/hooks/charmhelpers/contrib/openstack/amulet/deployment.py b/hooks/charmhelpers/contrib/openstack/amulet/deployment.py index 5c1ce457..5c041d2c 100644 --- a/hooks/charmhelpers/contrib/openstack/amulet/deployment.py +++ b/hooks/charmhelpers/contrib/openstack/amulet/deployment.py @@ -262,7 +262,8 @@ class OpenStackAmuletDeployment(AmuletDeployment): # Must be ordered by OpenStack release (not by Ubuntu release): (self.trusty_icehouse, self.trusty_kilo, self.trusty_liberty, self.trusty_mitaka, self.xenial_mitaka, self.xenial_newton, - self.yakkety_newton, self.xenial_ocata, self.zesty_ocata) = range(9) + self.yakkety_newton, self.xenial_ocata, self.zesty_ocata, + self.xenial_pike, self.artful_pike) = range(11) releases = { ('trusty', None): self.trusty_icehouse, @@ -272,8 +273,10 @@ class OpenStackAmuletDeployment(AmuletDeployment): ('xenial', None): self.xenial_mitaka, ('xenial', 'cloud:xenial-newton'): self.xenial_newton, ('xenial', 'cloud:xenial-ocata'): self.xenial_ocata, + ('xenial', 'cloud:xenial-pike'): self.xenial_pike, ('yakkety', None): self.yakkety_newton, ('zesty', None): self.zesty_ocata, + ('artful', None): self.artful_pike, } return releases[(self.series, self.openstack)] @@ -287,6 +290,7 @@ class OpenStackAmuletDeployment(AmuletDeployment): ('xenial', 'mitaka'), ('yakkety', 'newton'), ('zesty', 'ocata'), + ('artful', 'pike'), ]) if self.openstack: os_origin = self.openstack.split(':')[1] diff --git a/hooks/charmhelpers/contrib/openstack/context.py b/hooks/charmhelpers/contrib/openstack/context.py index 2adf2cb8..ea93159d 100644 --- a/hooks/charmhelpers/contrib/openstack/context.py +++ b/hooks/charmhelpers/contrib/openstack/context.py @@ -1393,6 +1393,10 @@ class NeutronAPIContext(OSContextGenerator): 'rel_key': 'enable-l3ha', 'default': False, }, + 'dns_domain': { + 'rel_key': 'dns-domain', + 'default': None, + }, } ctxt = self.get_neutron_options({}) for rid in relation_ids('neutron-plugin-api'): diff --git a/hooks/charmhelpers/contrib/openstack/utils.py b/hooks/charmhelpers/contrib/openstack/utils.py index e13450c1..46fe3933 100644 --- a/hooks/charmhelpers/contrib/openstack/utils.py +++ b/hooks/charmhelpers/contrib/openstack/utils.py @@ -111,6 +111,8 @@ OPENSTACK_RELEASES = ( 'newton', 'ocata', 'pike', + 'queens', + 'rocky', ) UBUNTU_OPENSTACK_RELEASE = OrderedDict([ @@ -126,6 +128,7 @@ UBUNTU_OPENSTACK_RELEASE = OrderedDict([ ('xenial', 'mitaka'), ('yakkety', 'newton'), ('zesty', 'ocata'), + ('artful', 'pike'), ]) @@ -142,6 +145,7 @@ OPENSTACK_CODENAMES = OrderedDict([ ('2016.1', 'mitaka'), ('2016.2', 'newton'), ('2017.1', 'ocata'), + ('2017.2', 'pike'), ]) # The ugly duckling - must list releases oldest to newest @@ -179,54 +183,81 @@ PACKAGE_CODENAMES = { ('13', 'mitaka'), ('14', 'newton'), ('15', 'ocata'), + ('16', 'pike'), + ('17', 'queens'), + ('18', 'rocky'), ]), 'neutron-common': OrderedDict([ ('7', 'liberty'), ('8', 'mitaka'), ('9', 'newton'), ('10', 'ocata'), + ('11', 'pike'), + ('12', 'queens'), + ('13', 'rocky'), ]), 'cinder-common': OrderedDict([ ('7', 'liberty'), ('8', 'mitaka'), ('9', 'newton'), ('10', 'ocata'), + ('11', 'pike'), + ('12', 'queens'), + ('13', 'rocky'), ]), 'keystone': OrderedDict([ ('8', 'liberty'), ('9', 'mitaka'), ('10', 'newton'), ('11', 'ocata'), + ('12', 'pike'), + ('13', 'queens'), + ('14', 'rocky'), ]), 'horizon-common': OrderedDict([ ('8', 'liberty'), ('9', 'mitaka'), ('10', 'newton'), ('11', 'ocata'), + ('12', 'pike'), + ('13', 'queens'), + ('14', 'rocky'), ]), 'ceilometer-common': OrderedDict([ ('5', 'liberty'), ('6', 'mitaka'), ('7', 'newton'), ('8', 'ocata'), + ('9', 'pike'), + ('10', 'queens'), + ('11', 'rocky'), ]), 'heat-common': OrderedDict([ ('5', 'liberty'), ('6', 'mitaka'), ('7', 'newton'), ('8', 'ocata'), + ('9', 'pike'), + ('10', 'queens'), + ('11', 'rocky'), ]), 'glance-common': OrderedDict([ ('11', 'liberty'), ('12', 'mitaka'), ('13', 'newton'), ('14', 'ocata'), + ('15', 'pike'), + ('16', 'queens'), + ('17', 'rocky'), ]), 'openstack-dashboard': OrderedDict([ ('8', 'liberty'), ('9', 'mitaka'), ('10', 'newton'), ('11', 'ocata'), + ('12', 'pike'), + ('13', 'queens'), + ('14', 'rocky'), ]), } @@ -579,6 +610,12 @@ def configure_installation_source(rel): 'ocata': 'xenial-updates/ocata', 'ocata/updates': 'xenial-updates/ocata', 'ocata/proposed': 'xenial-proposed/ocata', + 'pike': 'xenial-updates/pike', + 'pike/updates': 'xenial-updates/pike', + 'pike/proposed': 'xenial-proposed/pike', + 'queens': 'xenial-updates/queens', + 'queens/updates': 'xenial-updates/queens', + 'queens/proposed': 'xenial-proposed/queens', } try: diff --git a/hooks/charmhelpers/core/host_factory/ubuntu.py b/hooks/charmhelpers/core/host_factory/ubuntu.py index 0448288c..d8dc378a 100644 --- a/hooks/charmhelpers/core/host_factory/ubuntu.py +++ b/hooks/charmhelpers/core/host_factory/ubuntu.py @@ -19,6 +19,7 @@ UBUNTU_RELEASES = ( 'xenial', 'yakkety', 'zesty', + 'artful', ) diff --git a/hooks/charmhelpers/fetch/ubuntu.py b/hooks/charmhelpers/fetch/ubuntu.py index 82ac80ff..7bc6cc7e 100644 --- a/hooks/charmhelpers/fetch/ubuntu.py +++ b/hooks/charmhelpers/fetch/ubuntu.py @@ -113,6 +113,22 @@ CLOUD_ARCHIVE_POCKETS = { 'ocata/proposed': 'xenial-proposed/ocata', 'xenial-ocata/proposed': 'xenial-proposed/ocata', 'xenial-ocata/newton': 'xenial-proposed/ocata', + # Pike + 'pike': 'xenial-updates/pike', + 'xenial-pike': 'xenial-updates/pike', + 'xenial-pike/updates': 'xenial-updates/pike', + 'xenial-updates/pike': 'xenial-updates/pike', + 'pike/proposed': 'xenial-proposed/pike', + 'xenial-pike/proposed': 'xenial-proposed/pike', + 'xenial-pike/newton': 'xenial-proposed/pike', + # Queens + 'queens': 'xenial-updates/queens', + 'xenial-queens': 'xenial-updates/queens', + 'xenial-queens/updates': 'xenial-updates/queens', + 'xenial-updates/queens': 'xenial-updates/queens', + 'queens/proposed': 'xenial-proposed/queens', + 'xenial-queens/proposed': 'xenial-proposed/queens', + 'xenial-queens/newton': 'xenial-proposed/queens', } APT_NO_LOCK = 100 # The return code for "couldn't acquire lock" in APT. diff --git a/hooks/neutron_api_utils.py b/hooks/neutron_api_utils.py index 016d0fa8..88c1e158 100755 --- a/hooks/neutron_api_utils.py +++ b/hooks/neutron_api_utils.py @@ -320,6 +320,8 @@ def determine_packages(source=None): if CompareOpenStackReleases(release) >= 'kilo': packages.extend(KILO_PACKAGES) + if CompareOpenStackReleases(release) >= 'pike': + packages.remove('python-neutron-vpnaas') if release == 'kilo' or CompareOpenStackReleases(release) >= 'mitaka': packages.append('python-networking-hyperv') diff --git a/templates/pike/neutron.conf b/templates/pike/neutron.conf new file mode 100644 index 00000000..410b556b --- /dev/null +++ b/templates/pike/neutron.conf @@ -0,0 +1,114 @@ +# newton +############################################################################### +# [ WARNING ] +# Configuration file maintained by Juju. Local changes may be overwritten. +# Restart trigger {{ restart_trigger }} +############################################################################### +[DEFAULT] +verbose = {{ verbose }} +debug = {{ debug }} +use_syslog = {{ use_syslog }} +state_path = /var/lib/neutron +bind_host = {{ bind_host }} +auth_strategy = keystone +notification_driver = messaging +notification_topics = notifications,notifications_designate +api_workers = {{ workers }} +rpc_workers = {{ workers }} + +router_distributed = {{ enable_dvr }} + +l3_ha = {{ l3_ha }} +{% if l3_ha -%} +max_l3_agents_per_router = {{ max_l3_agents_per_router }} +min_l3_agents_per_router = {{ min_l3_agents_per_router }} +{% endif -%} + +{% if neutron_bind_port -%} +bind_port = {{ neutron_bind_port }} +{% else -%} +bind_port = 9696 +{% endif -%} + +{% if core_plugin -%} +core_plugin = {{ core_plugin }} +{% if service_plugins -%} +service_plugins = {{ service_plugins }} +{% else -%} +{% if neutron_plugin in ['ovs', 'ml2', 'Calico'] -%} +service_plugins = router,firewall,metering,neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2 +{% endif -%} +{% endif -%} +{% endif -%} + +{% if neutron_security_groups -%} +allow_overlapping_ips = True +{% if neutron_plugin == 'Calico' -%} +neutron_firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver +{% else -%} +neutron_firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver +{% endif -%} +{% endif -%} + +dhcp_agents_per_network = {{ dhcp_agents_per_network }} + +notify_nova_on_port_status_changes = True +notify_nova_on_port_data_changes = True + +{% if sections and 'DEFAULT' in sections -%} +{% for key, value in sections['DEFAULT'] -%} +{{ key }} = {{ value }} +{% endfor -%} +{% endif %} + +{% if user_config_flags -%} +{% for key, value in user_config_flags.iteritems() -%} +{{ key }} = {{ value }} +{% endfor -%} +{% endif -%} + +{% if global_physnet_mtu -%} +global_physnet_mtu = {{ global_physnet_mtu }} +{% endif -%} + +{% include "section-zeromq" %} + +[quotas] +{% if quota_driver -%} +quota_driver = {{ quota_driver }} +{% else -%} +quota_driver = neutron.db.quota_db.DbQuotaDriver +{% endif -%} +{% if neutron_security_groups -%} +quota_items = network,subnet,port,security_group,security_group_rule +quota_security_group = {{ quota_security_group }} +quota_security_group_rule = {{ quota_security_group_rule }} +{% else -%} +quota_items = network,subnet,port +{% endif -%} +quota_network = {{ quota_network }} +quota_subnet = {{ quota_subnet }} +quota_port = {{ quota_port }} +quota_vip = {{ quota_vip }} +quota_pool = {{ quota_pool }} +quota_member = {{ quota_member }} +quota_health_monitors = {{ quota_health_monitors }} +quota_router = {{ quota_router }} +quota_floatingip = {{ quota_floatingip }} + +[agent] +root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf + +{% include "section-keystone-authtoken-mitaka" %} + +{% include "parts/section-database" %} + +{% include "section-rabbitmq-oslo" %} + +[oslo_concurrency] +lock_path = $state_path/lock + +{% include "parts/section-nova" %} + +[service_providers] +service_provider = LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default diff --git a/tests/charmhelpers/contrib/openstack/amulet/deployment.py b/tests/charmhelpers/contrib/openstack/amulet/deployment.py index 5c1ce457..5c041d2c 100644 --- a/tests/charmhelpers/contrib/openstack/amulet/deployment.py +++ b/tests/charmhelpers/contrib/openstack/amulet/deployment.py @@ -262,7 +262,8 @@ class OpenStackAmuletDeployment(AmuletDeployment): # Must be ordered by OpenStack release (not by Ubuntu release): (self.trusty_icehouse, self.trusty_kilo, self.trusty_liberty, self.trusty_mitaka, self.xenial_mitaka, self.xenial_newton, - self.yakkety_newton, self.xenial_ocata, self.zesty_ocata) = range(9) + self.yakkety_newton, self.xenial_ocata, self.zesty_ocata, + self.xenial_pike, self.artful_pike) = range(11) releases = { ('trusty', None): self.trusty_icehouse, @@ -272,8 +273,10 @@ class OpenStackAmuletDeployment(AmuletDeployment): ('xenial', None): self.xenial_mitaka, ('xenial', 'cloud:xenial-newton'): self.xenial_newton, ('xenial', 'cloud:xenial-ocata'): self.xenial_ocata, + ('xenial', 'cloud:xenial-pike'): self.xenial_pike, ('yakkety', None): self.yakkety_newton, ('zesty', None): self.zesty_ocata, + ('artful', None): self.artful_pike, } return releases[(self.series, self.openstack)] @@ -287,6 +290,7 @@ class OpenStackAmuletDeployment(AmuletDeployment): ('xenial', 'mitaka'), ('yakkety', 'newton'), ('zesty', 'ocata'), + ('artful', 'pike'), ]) if self.openstack: os_origin = self.openstack.split(':')[1] diff --git a/tests/charmhelpers/core/host_factory/ubuntu.py b/tests/charmhelpers/core/host_factory/ubuntu.py index 0448288c..d8dc378a 100644 --- a/tests/charmhelpers/core/host_factory/ubuntu.py +++ b/tests/charmhelpers/core/host_factory/ubuntu.py @@ -19,6 +19,7 @@ UBUNTU_RELEASES = ( 'xenial', 'yakkety', 'zesty', + 'artful', ) diff --git a/tests/gate-basic-artful-pike b/tests/gate-basic-artful-pike new file mode 100644 index 00000000..a79b52a7 --- /dev/null +++ b/tests/gate-basic-artful-pike @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# +# Copyright 2016 Canonical Ltd +# +# 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. + +"""Amulet tests on a basic neutron-api deployment on artful-pike.""" + +from basic_deployment import NeutronAPIBasicDeployment + +if __name__ == '__main__': + deployment = NeutronAPIBasicDeployment(series='artful') + deployment.run_tests() diff --git a/tests/gate-basic-xenial-pike b/tests/gate-basic-xenial-pike new file mode 100644 index 00000000..e5f409f0 --- /dev/null +++ b/tests/gate-basic-xenial-pike @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# +# Copyright 2016 Canonical Ltd +# +# 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. + +"""Amulet tests on a basic neutron-api deployment on xenial-pike.""" + +from basic_deployment import NeutronAPIBasicDeployment + +if __name__ == '__main__': + deployment = NeutronAPIBasicDeployment(series='xenial', + openstack='cloud:xenial-pike', + source='cloud:xenial-updates/pike') + deployment.run_tests()