summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2017-02-09 13:13:58 -0600
committerMonty Taylor <mordred@inaugust.com>2017-02-15 08:05:44 -0600
commitcbb38f38bceee7977952651bd0466902c087de8d (patch)
tree3697743ed914572b58409fc720f28e63cb9908b2
parent50efb434d874ca74e6c89424c43389408ab9b584 (diff)
downloados-client-config-cbb38f38bceee7977952651bd0466902c087de8d.tar.gz
Add helper scripts to print version discovery info
These are simple scripts I made to investigate things. Each show the version discovery info for all of the clouds in a clouds.yaml. Change-Id: I742a59c737c53c05851015b9734c7aa85a5466ca
-rw-r--r--tools/keystone_version.py89
-rw-r--r--tools/nova_version.py56
2 files changed, 145 insertions, 0 deletions
diff --git a/tools/keystone_version.py b/tools/keystone_version.py
new file mode 100644
index 0000000..a81bdab
--- /dev/null
+++ b/tools/keystone_version.py
@@ -0,0 +1,89 @@
+# Copyright (c) 2017 Red Hat, Inc.
+#
+# 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.
+
+import os_client_config
+import pprint
+import sys
+import urlparse
+
+
+def print_versions(r):
+ if 'version' in r:
+ for version in r['version']:
+ print_version(version)
+ if 'values' in r:
+ for version in r['values']:
+ print_version(version)
+ if isinstance(r, list):
+ for version in r:
+ print_version(version)
+
+
+def print_version(version):
+ if version['status'] in ('CURRENT', 'stable'):
+ print(
+ "\tVersion ID: {id} updated {updated}".format(
+ id=version.get('id'),
+ updated=version.get('updated')))
+
+
+verbose = '-v' in sys.argv
+ran = []
+for cloud in os_client_config.OpenStackConfig().get_all_clouds():
+ if cloud.name in ran:
+ continue
+ ran.append(cloud.name)
+ # We don't actually need a compute client - but we'll be getting full urls
+ # anyway. Without this SSL cert info becomes wrong.
+ c = cloud.get_session_client('compute')
+ endpoint = cloud.config['auth']['auth_url']
+ try:
+ print(endpoint)
+ r = c.get(endpoint).json()
+ if verbose:
+ pprint.pprint(r)
+ except Exception as e:
+ print("Error with {cloud}: {e}".format(cloud=cloud.name, e=str(e)))
+ continue
+ if 'version' in r:
+ print_version(r['version'])
+ url = urlparse.urlparse(endpoint)
+ parts = url.path.split(':')
+ if len(parts) == 2:
+ path, port = parts
+ else:
+ path = url.path
+ port = None
+ stripped = path.rsplit('/', 2)[0]
+ if port:
+ stripped = '{stripped}:{port}'.format(stripped=stripped, port=port)
+ endpoint = urlparse.urlunsplit(
+ (url.scheme, url.netloc, stripped, url.params, url.query))
+ print(" also {endpoint}".format(endpoint=endpoint))
+ try:
+ r = c.get(endpoint).json()
+ if verbose:
+ pprint.pprint(r)
+ except Exception:
+ print("\tUnauthorized")
+ continue
+ if 'version' in r:
+ print_version(r)
+ elif 'versions' in r:
+ print_versions(r['versions'])
+ else:
+ print("\n\nUNKNOWN\n\n{r}".format(r=r))
+ else:
+ print_versions(r['versions'])
diff --git a/tools/nova_version.py b/tools/nova_version.py
new file mode 100644
index 0000000..20603db
--- /dev/null
+++ b/tools/nova_version.py
@@ -0,0 +1,56 @@
+# Copyright (c) 2017 Red Hat, Inc.
+#
+# 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.
+
+import os_client_config
+
+ran = []
+for cloud in os_client_config.OpenStackConfig().get_all_clouds():
+ if cloud.name in ran:
+ continue
+ ran.append(cloud.name)
+ c = cloud.get_session_client('compute')
+ try:
+ raw_endpoint = c.get_endpoint()
+ have_current = False
+ endpoint = raw_endpoint.rsplit('/', 2)[0]
+ print(endpoint)
+ r = c.get(endpoint).json()
+ except Exception:
+ print("Error with %s" % cloud.name)
+ continue
+ for version in r['versions']:
+ if version['status'] == 'CURRENT':
+ have_current = True
+ print(
+ "\tVersion ID: {id} updated {updated}".format(
+ id=version.get('id'),
+ updated=version.get('updated')))
+ print(
+ "\tVersion Max: {max}".format(max=version.get('version')))
+ print(
+ "\tVersion Min: {min}".format(min=version.get('min_version')))
+ if not have_current:
+ for version in r['versions']:
+ if version['status'] == 'SUPPORTED':
+ have_current = True
+ print(
+ "\tVersion ID: {id} updated {updated}".format(
+ id=version.get('id'),
+ updated=version.get('updated')))
+ print(
+ "\tVersion Max: {max}".format(max=version.get('version')))
+ print(
+ "\tVersion Min: {min}".format(
+ min=version.get('min_version')))