Merge lp:~1chb1n/charms/trusty/neutron-api/next-amulet-15.10 into lp:~openstack-charmers-archive/charms/trusty/neutron-api/next

Proposed by Ryan Beisner
Status: Merged
Merged at revision: 153
Proposed branch: lp:~1chb1n/charms/trusty/neutron-api/next-amulet-15.10
Merge into: lp:~openstack-charmers-archive/charms/trusty/neutron-api/next
Diff against target: 448 lines (+177/-35)
11 files modified
hooks/charmhelpers/contrib/openstack/amulet/deployment.py (+40/-0)
hooks/charmhelpers/contrib/openstack/amulet/utils.py (+1/-1)
hooks/charmhelpers/contrib/openstack/context.py (+40/-13)
hooks/charmhelpers/contrib/openstack/neutron.py (+17/-3)
hooks/charmhelpers/contrib/openstack/templates/ceph.conf (+6/-0)
hooks/charmhelpers/contrib/openstack/utils.py (+1/-0)
hooks/charmhelpers/core/hookenv.py (+0/-1)
hooks/charmhelpers/core/host.py (+12/-1)
tests/basic_deployment.py (+19/-15)
tests/charmhelpers/contrib/openstack/amulet/deployment.py (+40/-0)
tests/charmhelpers/contrib/openstack/amulet/utils.py (+1/-1)
To merge this branch: bzr merge lp:~1chb1n/charms/trusty/neutron-api/next-amulet-15.10
Reviewer Review Type Date Requested Status
Liam Young (community) Approve
Review via email: mp+274709@code.launchpad.net

Description of the change

Update amulet tests for Trusty-Liberty, Wily-Liberty.

Sync charmhelpers.

Add service and relations to satisfy workload status ready state.

Add new logic to wait for extended status message to confirm deploy is ready, before testing.

To post a comment you must log in.
Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #12024 neutron-api-next for 1chb1n mp274709
    LINT OK: passed

Build: http://10.245.162.77:8080/job/charm_lint_check/12024/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #11175 neutron-api-next for 1chb1n mp274709
    UNIT OK: passed

Build: http://10.245.162.77:8080/job/charm_unit_test/11175/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_amulet_test #7386 neutron-api-next for 1chb1n mp274709
    AMULET FAIL: amulet-test failed

AMULET Results (max last 2 lines):
make: *** [functional_test] Error 1
ERROR:root:Make target returned non-zero.

Full amulet test output: http://paste.ubuntu.com/12799468/
Build: http://10.245.162.77:8080/job/charm_amulet_test/7386/

157. By Ryan Beisner

fix relation check, remove varying unit data check

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #12028 neutron-api-next for 1chb1n mp274709
    LINT OK: passed

Build: http://10.245.162.77:8080/job/charm_lint_check/12028/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #11177 neutron-api-next for 1chb1n mp274709
    UNIT OK: passed

Build: http://10.245.162.77:8080/job/charm_unit_test/11177/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_amulet_test #7391 neutron-api-next for 1chb1n mp274709
    AMULET OK: passed

Build: http://10.245.162.77:8080/job/charm_amulet_test/7391/

Revision history for this message
Liam Young (gnuoy) wrote :

Approve

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'hooks/charmhelpers/contrib/openstack/amulet/deployment.py'
--- hooks/charmhelpers/contrib/openstack/amulet/deployment.py 2015-09-25 14:35:35 +0000
+++ hooks/charmhelpers/contrib/openstack/amulet/deployment.py 2015-10-16 16:14:02 +0000
@@ -14,6 +14,7 @@
14# You should have received a copy of the GNU Lesser General Public License14# You should have received a copy of the GNU Lesser General Public License
15# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.15# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.
1616
17import re
17import six18import six
18from collections import OrderedDict19from collections import OrderedDict
19from charmhelpers.contrib.amulet.deployment import (20from charmhelpers.contrib.amulet.deployment import (
@@ -114,6 +115,45 @@
114 for service, config in six.iteritems(configs):115 for service, config in six.iteritems(configs):
115 self.d.configure(service, config)116 self.d.configure(service, config)
116117
118 def _auto_wait_for_status(self, message=None, exclude_services=None,
119 timeout=1800):
120 """Wait for all units to have a specific extended status, except
121 for any defined as excluded. Unless specified via message, any
122 status containing any case of 'ready' will be considered a match.
123
124 Examples of message usage:
125
126 Wait for all unit status to CONTAIN any case of 'ready' or 'ok':
127 message = re.compile('.*ready.*|.*ok.*', re.IGNORECASE)
128
129 Wait for all units to reach this status (exact match):
130 message = 'Unit is ready'
131
132 Wait for all units to reach any one of these (exact match):
133 message = re.compile('Unit is ready|OK|Ready')
134
135 Wait for at least one unit to reach this status (exact match):
136 message = {'ready'}
137
138 See Amulet's sentry.wait_for_messages() for message usage detail.
139 https://github.com/juju/amulet/blob/master/amulet/sentry.py
140
141 :param message: Expected status match
142 :param exclude_services: List of juju service names to ignore
143 :param timeout: Maximum time in seconds to wait for status match
144 :returns: None. Raises if timeout is hit.
145 """
146
147 if not message:
148 message = re.compile('.*ready.*', re.IGNORECASE)
149
150 if not exclude_services:
151 exclude_services = []
152
153 services = list(set(self.d.services.keys()) - set(exclude_services))
154 service_messages = {service: message for service in services}
155 self.d.sentry.wait_for_messages(service_messages, timeout=timeout)
156
117 def _get_openstack_release(self):157 def _get_openstack_release(self):
118 """Get openstack release.158 """Get openstack release.
119159
120160
=== modified file 'hooks/charmhelpers/contrib/openstack/amulet/utils.py'
--- hooks/charmhelpers/contrib/openstack/amulet/utils.py 2015-09-25 14:35:35 +0000
+++ hooks/charmhelpers/contrib/openstack/amulet/utils.py 2015-10-16 16:14:02 +0000
@@ -752,7 +752,7 @@
752 self.log.debug('SSL is enabled @{}:{} '752 self.log.debug('SSL is enabled @{}:{} '
753 '({})'.format(host, port, unit_name))753 '({})'.format(host, port, unit_name))
754 return True754 return True
755 elif not port and not conf_ssl:755 elif not conf_ssl:
756 self.log.debug('SSL not enabled @{}:{} '756 self.log.debug('SSL not enabled @{}:{} '
757 '({})'.format(host, port, unit_name))757 '({})'.format(host, port, unit_name))
758 return False758 return False
759759
=== modified file 'hooks/charmhelpers/contrib/openstack/context.py'
--- hooks/charmhelpers/contrib/openstack/context.py 2015-09-28 19:06:04 +0000
+++ hooks/charmhelpers/contrib/openstack/context.py 2015-10-16 16:14:02 +0000
@@ -14,6 +14,7 @@
14# You should have received a copy of the GNU Lesser General Public License14# You should have received a copy of the GNU Lesser General Public License
15# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.15# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.
1616
17import glob
17import json18import json
18import os19import os
19import re20import re
@@ -951,6 +952,19 @@
951 'config': config}952 'config': config}
952 return ovs_ctxt953 return ovs_ctxt
953954
955 def midonet_ctxt(self):
956 driver = neutron_plugin_attribute(self.plugin, 'driver',
957 self.network_manager)
958 midonet_config = neutron_plugin_attribute(self.plugin, 'config',
959 self.network_manager)
960 mido_ctxt = {'core_plugin': driver,
961 'neutron_plugin': 'midonet',
962 'neutron_security_groups': self.neutron_security_groups,
963 'local_ip': unit_private_ip(),
964 'config': midonet_config}
965
966 return mido_ctxt
967
954 def __call__(self):968 def __call__(self):
955 if self.network_manager not in ['quantum', 'neutron']:969 if self.network_manager not in ['quantum', 'neutron']:
956 return {}970 return {}
@@ -972,6 +986,8 @@
972 ctxt.update(self.nuage_ctxt())986 ctxt.update(self.nuage_ctxt())
973 elif self.plugin == 'plumgrid':987 elif self.plugin == 'plumgrid':
974 ctxt.update(self.pg_ctxt())988 ctxt.update(self.pg_ctxt())
989 elif self.plugin == 'midonet':
990 ctxt.update(self.midonet_ctxt())
975991
976 alchemy_flags = config('neutron-alchemy-flags')992 alchemy_flags = config('neutron-alchemy-flags')
977 if alchemy_flags:993 if alchemy_flags:
@@ -1104,7 +1120,7 @@
11041120
1105 ctxt = {1121 ctxt = {
1106 ... other context ...1122 ... other context ...
1107 'subordinate_config': {1123 'subordinate_configuration': {
1108 'DEFAULT': {1124 'DEFAULT': {
1109 'key1': 'value1',1125 'key1': 'value1',
1110 },1126 },
@@ -1145,22 +1161,23 @@
1145 try:1161 try:
1146 sub_config = json.loads(sub_config)1162 sub_config = json.loads(sub_config)
1147 except:1163 except:
1148 log('Could not parse JSON from subordinate_config '1164 log('Could not parse JSON from '
1149 'setting from %s' % rid, level=ERROR)1165 'subordinate_configuration setting from %s'
1166 % rid, level=ERROR)
1150 continue1167 continue
11511168
1152 for service in self.services:1169 for service in self.services:
1153 if service not in sub_config:1170 if service not in sub_config:
1154 log('Found subordinate_config on %s but it contained'1171 log('Found subordinate_configuration on %s but it '
1155 'nothing for %s service' % (rid, service),1172 'contained nothing for %s service'
1156 level=INFO)1173 % (rid, service), level=INFO)
1157 continue1174 continue
11581175
1159 sub_config = sub_config[service]1176 sub_config = sub_config[service]
1160 if self.config_file not in sub_config:1177 if self.config_file not in sub_config:
1161 log('Found subordinate_config on %s but it contained'1178 log('Found subordinate_configuration on %s but it '
1162 'nothing for %s' % (rid, self.config_file),1179 'contained nothing for %s'
1163 level=INFO)1180 % (rid, self.config_file), level=INFO)
1164 continue1181 continue
11651182
1166 sub_config = sub_config[self.config_file]1183 sub_config = sub_config[self.config_file]
@@ -1363,7 +1380,7 @@
1363 normalized.update({port: port for port in resolved1380 normalized.update({port: port for port in resolved
1364 if port in ports})1381 if port in ports})
1365 if resolved:1382 if resolved:
1366 return {bridge: normalized[port] for port, bridge in1383 return {normalized[port]: bridge for port, bridge in
1367 six.iteritems(portmap) if port in normalized.keys()}1384 six.iteritems(portmap) if port in normalized.keys()}
13681385
1369 return None1386 return None
@@ -1374,12 +1391,22 @@
1374 def __call__(self):1391 def __call__(self):
1375 ctxt = {}1392 ctxt = {}
1376 mappings = super(PhyNICMTUContext, self).__call__()1393 mappings = super(PhyNICMTUContext, self).__call__()
1377 if mappings and mappings.values():1394 if mappings and mappings.keys():
1378 ports = mappings.values()1395 ports = sorted(mappings.keys())
1379 napi_settings = NeutronAPIContext()()1396 napi_settings = NeutronAPIContext()()
1380 mtu = napi_settings.get('network_device_mtu')1397 mtu = napi_settings.get('network_device_mtu')
1398 all_ports = set()
1399 # If any of ports is a vlan device, its underlying device must have
1400 # mtu applied first.
1401 for port in ports:
1402 for lport in glob.glob("/sys/class/net/%s/lower_*" % port):
1403 lport = os.path.basename(lport)
1404 all_ports.add(lport.split('_')[1])
1405
1406 all_ports = list(all_ports)
1407 all_ports.extend(ports)
1381 if mtu:1408 if mtu:
1382 ctxt["devs"] = '\\n'.join(ports)1409 ctxt["devs"] = '\\n'.join(all_ports)
1383 ctxt['mtu'] = mtu1410 ctxt['mtu'] = mtu
13841411
1385 return ctxt1412 return ctxt
13861413
=== modified file 'hooks/charmhelpers/contrib/openstack/neutron.py'
--- hooks/charmhelpers/contrib/openstack/neutron.py 2015-09-04 11:03:14 +0000
+++ hooks/charmhelpers/contrib/openstack/neutron.py 2015-10-16 16:14:02 +0000
@@ -209,6 +209,20 @@
209 'server_packages': ['neutron-server',209 'server_packages': ['neutron-server',
210 'neutron-plugin-plumgrid'],210 'neutron-plugin-plumgrid'],
211 'server_services': ['neutron-server']211 'server_services': ['neutron-server']
212 },
213 'midonet': {
214 'config': '/etc/neutron/plugins/midonet/midonet.ini',
215 'driver': 'midonet.neutron.plugin.MidonetPluginV2',
216 'contexts': [
217 context.SharedDBContext(user=config('neutron-database-user'),
218 database=config('neutron-database'),
219 relation_prefix='neutron',
220 ssl_dir=NEUTRON_CONF_DIR)],
221 'services': [],
222 'packages': [[headers_package()] + determine_dkms_package()],
223 'server_packages': ['neutron-server',
224 'python-neutron-plugin-midonet'],
225 'server_services': ['neutron-server']
212 }226 }
213 }227 }
214 if release >= 'icehouse':228 if release >= 'icehouse':
@@ -310,10 +324,10 @@
310def parse_data_port_mappings(mappings, default_bridge='br-data'):324def parse_data_port_mappings(mappings, default_bridge='br-data'):
311 """Parse data port mappings.325 """Parse data port mappings.
312326
313 Mappings must be a space-delimited list of port:bridge mappings.327 Mappings must be a space-delimited list of bridge:port.
314328
315 Returns dict of the form {port:bridge} where port may be an mac address or329 Returns dict of the form {port:bridge} where ports may be mac addresses or
316 interface name.330 interface names.
317 """331 """
318332
319 # NOTE(dosaboy): we use rvalue for key to allow multiple values to be333 # NOTE(dosaboy): we use rvalue for key to allow multiple values to be
320334
=== modified file 'hooks/charmhelpers/contrib/openstack/templates/ceph.conf'
--- hooks/charmhelpers/contrib/openstack/templates/ceph.conf 2015-07-16 20:17:53 +0000
+++ hooks/charmhelpers/contrib/openstack/templates/ceph.conf 2015-10-16 16:14:02 +0000
@@ -13,3 +13,9 @@
13err to syslog = {{ use_syslog }}13err to syslog = {{ use_syslog }}
14clog to syslog = {{ use_syslog }}14clog to syslog = {{ use_syslog }}
1515
16[client]
17{% if rbd_client_cache_settings -%}
18{% for key, value in rbd_client_cache_settings.iteritems() -%}
19{{ key }} = {{ value }}
20{% endfor -%}
21{%- endif %}
16\ No newline at end of file22\ No newline at end of file
1723
=== modified file 'hooks/charmhelpers/contrib/openstack/utils.py'
--- hooks/charmhelpers/contrib/openstack/utils.py 2015-10-06 07:11:01 +0000
+++ hooks/charmhelpers/contrib/openstack/utils.py 2015-10-16 16:14:02 +0000
@@ -121,6 +121,7 @@
121 ('2.2.2', 'kilo'),121 ('2.2.2', 'kilo'),
122 ('2.3.0', 'liberty'),122 ('2.3.0', 'liberty'),
123 ('2.4.0', 'liberty'),123 ('2.4.0', 'liberty'),
124 ('2.5.0', 'liberty'),
124])125])
125126
126# >= Liberty version->codename mapping127# >= Liberty version->codename mapping
127128
=== modified file 'hooks/charmhelpers/core/hookenv.py'
--- hooks/charmhelpers/core/hookenv.py 2015-09-28 19:06:04 +0000
+++ hooks/charmhelpers/core/hookenv.py 2015-10-16 16:14:02 +0000
@@ -795,7 +795,6 @@
795 raise795 raise
796 log_message = 'status-set failed: {} {}'.format(workload_state,796 log_message = 'status-set failed: {} {}'.format(workload_state,
797 message)797 message)
798 # XXX Fix this
799 log(log_message, level='INFO')798 log(log_message, level='INFO')
800799
801800
802801
=== modified file 'hooks/charmhelpers/core/host.py'
--- hooks/charmhelpers/core/host.py 2015-09-25 14:35:35 +0000
+++ hooks/charmhelpers/core/host.py 2015-10-16 16:14:02 +0000
@@ -566,7 +566,14 @@
566 os.chdir(cur)566 os.chdir(cur)
567567
568568
569def chownr(path, owner, group, follow_links=True):569def chownr(path, owner, group, follow_links=True, chowntopdir=False):
570 """
571 Recursively change user and group ownership of files and directories
572 in given path. Doesn't chown path itself by default, only its children.
573
574 :param bool follow_links: Also Chown links if True
575 :param bool chowntopdir: Also chown path itself if True
576 """
570 uid = pwd.getpwnam(owner).pw_uid577 uid = pwd.getpwnam(owner).pw_uid
571 gid = grp.getgrnam(group).gr_gid578 gid = grp.getgrnam(group).gr_gid
572 if follow_links:579 if follow_links:
@@ -574,6 +581,10 @@
574 else:581 else:
575 chown = os.lchown582 chown = os.lchown
576583
584 if chowntopdir:
585 broken_symlink = os.path.lexists(path) and not os.path.exists(path)
586 if not broken_symlink:
587 chown(path, uid, gid)
577 for root, dirs, files in os.walk(path):588 for root, dirs, files in os.walk(path):
578 for name in dirs + files:589 for name in dirs + files:
579 full = os.path.join(root, name)590 full = os.path.join(root, name)
580591
=== modified file 'tests/020-basic-trusty-liberty' (properties changed: -x to +x)
=== modified file 'tests/021-basic-wily-liberty' (properties changed: -x to +x)
=== modified file 'tests/basic_deployment.py'
--- tests/basic_deployment.py 2015-09-28 19:06:04 +0000
+++ tests/basic_deployment.py 2015-10-16 16:14:02 +0000
@@ -1,11 +1,5 @@
1#!/usr/bin/python
2"""
3Basic neutron-api functional test.
4"""
5
6import amulet1import amulet
7import os2import os
8import time
9import yaml3import yaml
104
11from charmhelpers.contrib.openstack.amulet.deployment import (5from charmhelpers.contrib.openstack.amulet.deployment import (
@@ -35,6 +29,11 @@
35 self._add_relations()29 self._add_relations()
36 self._configure_services()30 self._configure_services()
37 self._deploy()31 self._deploy()
32
33 u.log.info('Waiting on extended status checks...')
34 exclude_services = ['mysql']
35 self._auto_wait_for_status(exclude_services=exclude_services)
36
38 self._initialize_tests()37 self._initialize_tests()
3938
40 def _add_services(self):39 def _add_services(self):
@@ -48,6 +47,7 @@
48 other_services = [{'name': 'mysql'},47 other_services = [{'name': 'mysql'},
49 {'name': 'rabbitmq-server'},48 {'name': 'rabbitmq-server'},
50 {'name': 'keystone'},49 {'name': 'keystone'},
50 {'name': 'glance'}, # to satisfy workload status
51 {'name': 'neutron-openvswitch'},51 {'name': 'neutron-openvswitch'},
52 {'name': 'nova-cloud-controller'},52 {'name': 'nova-cloud-controller'},
53 {'name': 'neutron-gateway'},53 {'name': 'neutron-gateway'},
@@ -68,6 +68,19 @@
68 'nova-compute:neutron-plugin': 'neutron-openvswitch:'68 'nova-compute:neutron-plugin': 'neutron-openvswitch:'
69 'neutron-plugin',69 'neutron-plugin',
70 'nova-cloud-controller:shared-db': 'mysql:shared-db',70 'nova-cloud-controller:shared-db': 'mysql:shared-db',
71 'neutron-gateway:amqp': 'rabbitmq-server:amqp',
72 'nova-cloud-controller:amqp': 'rabbitmq-server:amqp',
73 'nova-compute:amqp': 'rabbitmq-server:amqp',
74 'neutron-openvswitch:amqp': 'rabbitmq-server:amqp',
75 'nova-cloud-controller:identity-service': 'keystone:'
76 'identity-service',
77 'nova-cloud-controller:cloud-compute': 'nova-compute:'
78 'cloud-compute',
79 'glance:identity-service': 'keystone:identity-service',
80 'glance:shared-db': 'mysql:shared-db',
81 'glance:amqp': 'rabbitmq-server:amqp',
82 'nova-compute:image-service': 'glance:image-service',
83 'nova-cloud-controller:image-service': 'glance:image-service',
71 }84 }
7285
73 # NOTE(beisner): relate this separately due to the resulting86 # NOTE(beisner): relate this separately due to the resulting
@@ -158,8 +171,6 @@
158 self._get_openstack_release()))171 self._get_openstack_release()))
159 u.log.debug('openstack release str: {}'.format(172 u.log.debug('openstack release str: {}'.format(
160 self._get_openstack_release_string()))173 self._get_openstack_release_string()))
161 # Let things settle a bit before moving forward
162 time.sleep(30)
163174
164 def test_100_services(self):175 def test_100_services(self):
165 """Verify the expected services are running on the corresponding176 """Verify the expected services are running on the corresponding
@@ -226,13 +237,6 @@
226 'password': u.not_null237 'password': u.not_null
227 }238 }
228239
229 if self._get_openstack_release() == self.precise_icehouse:
230 # Precise
231 expected['allowed_units'] = 'nova-cloud-controller/0 neutron-api/0'
232 else:
233 # Not Precise
234 expected['allowed_units'] = 'neutron-api/0'
235
236 ret = u.validate_relation_data(unit, relation, expected)240 ret = u.validate_relation_data(unit, relation, expected)
237 if ret:241 if ret:
238 message = u.relation_error('mysql shared-db', ret)242 message = u.relation_error('mysql shared-db', ret)
239243
=== modified file 'tests/charmhelpers/contrib/openstack/amulet/deployment.py'
--- tests/charmhelpers/contrib/openstack/amulet/deployment.py 2015-09-25 14:35:35 +0000
+++ tests/charmhelpers/contrib/openstack/amulet/deployment.py 2015-10-16 16:14:02 +0000
@@ -14,6 +14,7 @@
14# You should have received a copy of the GNU Lesser General Public License14# You should have received a copy of the GNU Lesser General Public License
15# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.15# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.
1616
17import re
17import six18import six
18from collections import OrderedDict19from collections import OrderedDict
19from charmhelpers.contrib.amulet.deployment import (20from charmhelpers.contrib.amulet.deployment import (
@@ -114,6 +115,45 @@
114 for service, config in six.iteritems(configs):115 for service, config in six.iteritems(configs):
115 self.d.configure(service, config)116 self.d.configure(service, config)
116117
118 def _auto_wait_for_status(self, message=None, exclude_services=None,
119 timeout=1800):
120 """Wait for all units to have a specific extended status, except
121 for any defined as excluded. Unless specified via message, any
122 status containing any case of 'ready' will be considered a match.
123
124 Examples of message usage:
125
126 Wait for all unit status to CONTAIN any case of 'ready' or 'ok':
127 message = re.compile('.*ready.*|.*ok.*', re.IGNORECASE)
128
129 Wait for all units to reach this status (exact match):
130 message = 'Unit is ready'
131
132 Wait for all units to reach any one of these (exact match):
133 message = re.compile('Unit is ready|OK|Ready')
134
135 Wait for at least one unit to reach this status (exact match):
136 message = {'ready'}
137
138 See Amulet's sentry.wait_for_messages() for message usage detail.
139 https://github.com/juju/amulet/blob/master/amulet/sentry.py
140
141 :param message: Expected status match
142 :param exclude_services: List of juju service names to ignore
143 :param timeout: Maximum time in seconds to wait for status match
144 :returns: None. Raises if timeout is hit.
145 """
146
147 if not message:
148 message = re.compile('.*ready.*', re.IGNORECASE)
149
150 if not exclude_services:
151 exclude_services = []
152
153 services = list(set(self.d.services.keys()) - set(exclude_services))
154 service_messages = {service: message for service in services}
155 self.d.sentry.wait_for_messages(service_messages, timeout=timeout)
156
117 def _get_openstack_release(self):157 def _get_openstack_release(self):
118 """Get openstack release.158 """Get openstack release.
119159
120160
=== modified file 'tests/charmhelpers/contrib/openstack/amulet/utils.py'
--- tests/charmhelpers/contrib/openstack/amulet/utils.py 2015-09-25 14:35:35 +0000
+++ tests/charmhelpers/contrib/openstack/amulet/utils.py 2015-10-16 16:14:02 +0000
@@ -752,7 +752,7 @@
752 self.log.debug('SSL is enabled @{}:{} '752 self.log.debug('SSL is enabled @{}:{} '
753 '({})'.format(host, port, unit_name))753 '({})'.format(host, port, unit_name))
754 return True754 return True
755 elif not port and not conf_ssl:755 elif not conf_ssl:
756 self.log.debug('SSL not enabled @{}:{} '756 self.log.debug('SSL not enabled @{}:{} '
757 '({})'.format(host, port, unit_name))757 '({})'.format(host, port, unit_name))
758 return False758 return False

Subscribers

People subscribed via source and target branches