summaryrefslogtreecommitdiffstats
path: root/utils/src
diff options
context:
space:
mode:
authorScott Dodson <sdodson@redhat.com>2016-08-23 16:18:24 -0400
committerGitHub <noreply@github.com>2016-08-23 16:18:24 -0400
commit57a794122c0e1a8cc3b4b5fe9613f8d3aaf7f760 (patch)
treefd7d9ca1c5554c63a14ef413f454f2552dfdc0d7 /utils/src
parentaf01e6dd961541a1cb3a890cffd548e71a32f48b (diff)
parent2bb4266be4f3e30f4ab1b22354bbeb68f3432df7 (diff)
downloadopenshift-57a794122c0e1a8cc3b4b5fe9613f8d3aaf7f760.tar.gz
openshift-57a794122c0e1a8cc3b4b5fe9613f8d3aaf7f760.tar.bz2
openshift-57a794122c0e1a8cc3b4b5fe9613f8d3aaf7f760.tar.xz
openshift-57a794122c0e1a8cc3b4b5fe9613f8d3aaf7f760.zip
Merge pull request #2334 from smunilla/BZ1358951
Bug 1358951 - Error loading config, no such key: 'deployment' when using ing previously valid answers file
Diffstat (limited to 'utils/src')
-rw-r--r--utils/src/ooinstall/oo_config.py78
1 files changed, 47 insertions, 31 deletions
diff --git a/utils/src/ooinstall/oo_config.py b/utils/src/ooinstall/oo_config.py
index 69ad2b4c5..f2990662e 100644
--- a/utils/src/ooinstall/oo_config.py
+++ b/utils/src/ooinstall/oo_config.py
@@ -165,22 +165,34 @@ class OOConfig(object):
self._set_defaults()
+# pylint: disable=too-many-branches
def _read_config(self):
+ def _print_read_config_error(error, path='the configuration file'):
+ message = """
+Error loading config. {}.
+
+See https://docs.openshift.com/enterprise/latest/install_config/install/quick_install.html#defining-an-installation-configuration-file
+for information on creating a configuration file or delete {} and re-run the installer.
+"""
+ print message.format(error, path)
+
try:
if os.path.exists(self.config_path):
with open(self.config_path, 'r') as cfgfile:
loaded_config = yaml.safe_load(cfgfile.read())
- # Use the presence of a Description as an indicator this is
- # a legacy config file:
- if 'Description' in self.settings:
- self._upgrade_legacy_config()
+ if not 'version' in loaded_config:
+ _print_read_config_error('Legacy configuration file found', self.config_path)
+ sys.exit(0)
+
+ if loaded_config.get('version', '') == 'v1':
+ loaded_config = self._upgrade_v1_config(loaded_config)
try:
host_list = loaded_config['deployment']['hosts']
role_list = loaded_config['deployment']['roles']
except KeyError as e:
- print "Error loading config, no such key: {}".format(e)
+ _print_read_config_error("No such key: {}".format(e), self.config_path)
sys.exit(0)
for setting in CONFIG_PERSIST_SETTINGS:
@@ -213,32 +225,36 @@ class OOConfig(object):
raise OOConfigFileError(
'Config file "{}" is not a valid YAML document'.format(self.config_path))
- def _upgrade_legacy_config(self):
- new_hosts = []
- remove_settings = ['validated_facts', 'Description', 'Name',
- 'Subscription', 'Vendor', 'Version', 'masters', 'nodes']
-
- if 'validated_facts' in self.settings:
- for key, value in self.settings['validated_facts'].iteritems():
- value['connect_to'] = key
- if 'masters' in self.settings and key in self.settings['masters']:
- value['master'] = True
- if 'nodes' in self.settings and key in self.settings['nodes']:
- value['node'] = True
- new_hosts.append(value)
- self.settings['hosts'] = new_hosts
-
- for s in remove_settings:
- if s in self.settings:
- del self.settings[s]
-
- # A legacy config implies openshift-enterprise 3.0:
- self.settings['variant'] = 'openshift-enterprise'
- self.settings['variant_version'] = '3.0'
-
- def _upgrade_v1_config(self):
- #TODO write code to upgrade old config
- return
+ def _upgrade_v1_config(self, config):
+ new_config_data = {}
+ new_config_data['deployment'] = {}
+ new_config_data['deployment']['hosts'] = []
+ new_config_data['deployment']['roles'] = {}
+ new_config_data['deployment']['variables'] = {}
+
+ role_list = {}
+
+ if config.get('ansible_ssh_user', False):
+ new_config_data['deployment']['ansible_ssh_user'] = config['ansible_ssh_user']
+
+ for host in config['hosts']:
+ host_props = {}
+ host_props['roles'] = []
+ host_props['connect_to'] = host['connect_to']
+
+ for prop in ['ip', 'public_ip', 'hostname', 'public_hostname', 'containerized', 'preconfigured']:
+ host_props[prop] = host.get(prop, None)
+
+ for role in ['master', 'node', 'master_lb', 'storage', 'etcd']:
+ if host.get(role, False):
+ host_props['roles'].append(role)
+ role_list[role] = ''
+
+ new_config_data['deployment']['hosts'].append(host_props)
+
+ new_config_data['deployment']['roles'] = role_list
+
+ return new_config_data
def _set_defaults(self):