From b5a12ffbfa4ce1c482969c2d8f2948e416263d32 Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Tue, 28 Mar 2017 09:35:44 +0200 Subject: [PATCH] Fix collectd plugins when 'internalURL' isn't set It is possible to register a service in the Keystone catalog without internalURL. This change fixes the collectd plugins to support that configuration. Change-Id: Id5ef3c4fcd473b92855cb656a80435d670062cfb Closes-Bug: #1676755 --- .../lma_collector/files/collectd/collectd_openstack.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py b/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py index 2013b3063..ec3b05662 100644 --- a/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py +++ b/deployment_scripts/puppet/modules/lma_collector/files/collectd/collectd_openstack.py @@ -104,11 +104,16 @@ class OSClient(object): self.service_catalog = [] for item in data['access']['serviceCatalog']: endpoint = item['endpoints'][0] + if 'internalURL' not in endpoint and 'publicURL' not in endpoint: + self.logger.warning( + "Service '{}' skipped because no URL can be found".format( + item['name'])) + continue self.service_catalog.append({ 'name': item['name'], 'region': endpoint['region'], 'service_type': item['type'], - 'url': endpoint['internalURL'], + 'url': endpoint.get('internalURL', endpoint.get('publicURL')), 'admin_url': endpoint['adminURL'], })