|
@@ -713,7 +713,7 @@ def set_version_facts_if_unset(facts):
|
|
|
"""
|
|
|
if 'common' in facts:
|
|
|
deployment_type = facts['common']['deployment_type']
|
|
|
- facts['common']['version'] = version = get_openshift_version()
|
|
|
+ facts['common']['version'] = version = get_openshift_version(facts)
|
|
|
if version is not None:
|
|
|
if deployment_type == 'origin':
|
|
|
version_gte_3_1_or_1_1 = LooseVersion(version) >= LooseVersion('1.1.0')
|
|
@@ -873,22 +873,65 @@ def get_current_config(facts):
|
|
|
|
|
|
return current_config
|
|
|
|
|
|
-def get_openshift_version():
|
|
|
+def get_openshift_version(facts, cli_image=None):
|
|
|
""" Get current version of openshift on the host
|
|
|
|
|
|
+ Args:
|
|
|
+ facts (dict): existing facts
|
|
|
+ optional cli_image for pulling the version number
|
|
|
+
|
|
|
Returns:
|
|
|
version: the current openshift version
|
|
|
"""
|
|
|
version = None
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ if 'common' in facts:
|
|
|
+ if 'version' in facts['common'] and facts['common']['version'] is not None:
|
|
|
+ return facts['common']['version']
|
|
|
+
|
|
|
if os.path.isfile('/usr/bin/openshift'):
|
|
|
_, output, _ = module.run_command(['/usr/bin/openshift', 'version'])
|
|
|
- versions = dict(e.split(' v') for e in output.splitlines() if ' v' in e)
|
|
|
- version = versions.get('openshift', '')
|
|
|
+ version = parse_openshift_version(output)
|
|
|
+
|
|
|
+ if 'is_containerized' in facts['common'] and facts['common']['is_containerized']:
|
|
|
+ container = None
|
|
|
+ if 'master' in facts:
|
|
|
+ if 'cluster_method' in facts['master']:
|
|
|
+ container = facts['common']['service_type'] + '-master-api'
|
|
|
+ else:
|
|
|
+ container = facts['common']['service_type'] + '-master'
|
|
|
+ elif 'node' in facts:
|
|
|
+ container = facts['common']['service_type'] + '-node'
|
|
|
+
|
|
|
+ if container is not None:
|
|
|
+ exit_code, output, _ = module.run_command(['docker', 'exec', container, 'openshift', 'version'])
|
|
|
+
|
|
|
+
|
|
|
+ if exit_code == 0:
|
|
|
+ version = parse_openshift_version(output)
|
|
|
+
|
|
|
+ if version is None and cli_image is not None:
|
|
|
+
|
|
|
+
|
|
|
+ exit_code, output, _ = module.run_command(['docker', 'run', '--rm', cli_image, 'version'])
|
|
|
+ version = parse_openshift_version(output)
|
|
|
|
|
|
-
|
|
|
return version
|
|
|
|
|
|
+def parse_openshift_version(output):
|
|
|
+ """ Apply provider facts to supplied facts dict
|
|
|
+
|
|
|
+ Args:
|
|
|
+ string: output of 'openshift version'
|
|
|
+ Returns:
|
|
|
+ string: the version number
|
|
|
+ """
|
|
|
+ versions = dict(e.split(' v') for e in output.splitlines() if ' v' in e)
|
|
|
+ return versions.get('openshift', '')
|
|
|
+
|
|
|
+
|
|
|
def apply_provider_facts(facts, provider_facts):
|
|
|
""" Apply provider facts to supplied facts dict
|
|
|
|
|
@@ -1093,6 +1136,8 @@ def set_container_facts_if_unset(facts):
|
|
|
if bool(strtobool(str(facts['common']['is_containerized']))):
|
|
|
facts['common']['admin_binary'] = '/usr/local/bin/oadm'
|
|
|
facts['common']['client_binary'] = '/usr/local/bin/oc'
|
|
|
+ base_version = get_openshift_version(facts, cli_image).split('-')[0]
|
|
|
+ facts['common']['image_tag'] = "v" + base_version
|
|
|
|
|
|
return facts
|
|
|
|