summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/src/ooinstall/cli_installer.py13
-rw-r--r--utils/src/ooinstall/oo_config.py24
-rw-r--r--utils/src/ooinstall/openshift_ansible.py112
-rw-r--r--utils/src/ooinstall/variants.py13
-rw-r--r--utils/test/cli_installer_tests.py36
5 files changed, 74 insertions, 124 deletions
diff --git a/utils/src/ooinstall/cli_installer.py b/utils/src/ooinstall/cli_installer.py
index 9fbb61a46..51c4c2def 100644
--- a/utils/src/ooinstall/cli_installer.py
+++ b/utils/src/ooinstall/cli_installer.py
@@ -121,7 +121,7 @@ http://docs.openshift.com/enterprise/latest/architecture/infrastructure_componen
click.echo(message)
hosts = []
- roles = set(['master', 'node', 'storage'])
+ roles = set(['master', 'node', 'storage', 'etcd'])
more_hosts = True
num_masters = 0
while more_hosts:
@@ -133,6 +133,7 @@ http://docs.openshift.com/enterprise/latest/architecture/infrastructure_componen
if not masters_set:
if click.confirm('Will this host be an OpenShift Master?'):
host_props['roles'].append('master')
+ host_props['roles'].append('etcd')
num_masters += 1
if oo_cfg.settings['variant_version'] == '3.0':
@@ -827,21 +828,25 @@ def uninstall(ctx):
oo_cfg = ctx.obj['oo_cfg']
verbose = ctx.obj['verbose']
- if len(oo_cfg.deployment.hosts) == 0:
+ if hasattr(oo_cfg, 'deployment'):
+ hosts = oo_cfg.deployment.hosts
+ elif hasattr(oo_cfg, 'hosts'):
+ hosts = oo_cfg.hosts
+ else:
click.echo("No hosts defined in: %s" % oo_cfg.config_path)
sys.exit(1)
click.echo("OpenShift will be uninstalled from the following hosts:\n")
if not ctx.obj['unattended']:
# Prompt interactively to confirm:
- for host in oo_cfg.deployment.hosts:
+ for host in hosts:
click.echo(" * %s" % host.connect_to)
proceed = click.confirm("\nDo you wish to proceed?")
if not proceed:
click.echo("Uninstall cancelled.")
sys.exit(0)
- openshift_ansible.run_uninstall_playbook(verbose)
+ openshift_ansible.run_uninstall_playbook(hosts, verbose)
@click.command()
diff --git a/utils/src/ooinstall/oo_config.py b/utils/src/ooinstall/oo_config.py
index e37892c9b..69ad2b4c5 100644
--- a/utils/src/ooinstall/oo_config.py
+++ b/utils/src/ooinstall/oo_config.py
@@ -17,11 +17,9 @@ CONFIG_PERSIST_SETTINGS = [
'variant_version',
]
-DEPLOYMENT_PERSIST_SETTINGS = [
- 'master_routingconfig_subdomain',
- 'proxy_http',
- 'proxy_https',
- 'proxy_exclude_hosts',
+DEPLOYMENT_VARIABLES_BLACKLIST = [
+ 'hosts',
+ 'roles',
]
DEFAULT_REQUIRED_FACTS = ['ip', 'public_ip', 'hostname', 'public_hostname']
@@ -191,10 +189,11 @@ class OOConfig(object):
except KeyError:
continue
- for setting in DEPLOYMENT_PERSIST_SETTINGS:
+ for setting in loaded_config['deployment']:
try:
- self.deployment.variables[setting] = \
- str(loaded_config['deployment'][setting])
+ if setting not in DEPLOYMENT_VARIABLES_BLACKLIST:
+ self.deployment.variables[setting] = \
+ str(loaded_config['deployment'][setting])
except KeyError:
continue
@@ -306,21 +305,20 @@ class OOConfig(object):
if setting in self.settings and self.settings[setting]:
p_settings[setting] = self.settings[setting]
-
p_settings['deployment'] = {}
p_settings['deployment']['hosts'] = []
p_settings['deployment']['roles'] = {}
- for setting in DEPLOYMENT_PERSIST_SETTINGS:
- if setting in self.deployment.variables:
- p_settings['deployment'][setting] = self.deployment.variables[setting]
-
for host in self.deployment.hosts:
p_settings['deployment']['hosts'].append(host.to_dict())
for name, role in self.deployment.roles.iteritems():
p_settings['deployment']['roles'][name] = role.variables
+ for setting in self.deployment.variables:
+ if setting not in DEPLOYMENT_VARIABLES_BLACKLIST:
+ p_settings['deployment'][setting] = self.deployment.variables[setting]
+
try:
p_settings['variant'] = self.settings['variant']
p_settings['variant_version'] = self.settings['variant_version']
diff --git a/utils/src/ooinstall/openshift_ansible.py b/utils/src/ooinstall/openshift_ansible.py
index bcf06b599..f1e03f8f2 100644
--- a/utils/src/ooinstall/openshift_ansible.py
+++ b/utils/src/ooinstall/openshift_ansible.py
@@ -1,5 +1,3 @@
-# TODO: Temporarily disabled due to importing old code into openshift-ansible
-# repo. We will work on these over time.
# pylint: disable=bad-continuation,missing-docstring,no-self-use,invalid-name,global-statement,global-variable-not-assigned
import socket
@@ -14,7 +12,9 @@ CFG = None
ROLES_TO_GROUPS_MAP = {
'master': 'masters',
'node': 'nodes',
- 'storage': 'nfs'
+ 'etcd': 'etcd',
+ 'storage': 'nfs',
+ 'master_lb': 'lb'
}
VARIABLES_MAP = {
@@ -34,75 +34,52 @@ def set_config(cfg):
def generate_inventory(hosts):
global CFG
+
masters = [host for host in hosts if host.is_master()]
- nodes = [host for host in hosts if host.is_node()]
- new_nodes = [host for host in hosts if host.is_node() and host.new_host]
- proxy = determine_proxy_configuration(hosts)
- storage = determine_storage_configuration(hosts)
multiple_masters = len(masters) > 1
+
+ new_nodes = [host for host in hosts if host.is_node() and host.new_host]
scaleup = len(new_nodes) > 0
+ lb = determine_lb_configuration(hosts)
+
base_inventory_path = CFG.settings['ansible_inventory_path']
base_inventory = open(base_inventory_path, 'w')
- write_inventory_children(base_inventory, multiple_masters, proxy, scaleup)
-
- write_inventory_vars(base_inventory, multiple_masters, proxy)
-
-
-
- base_inventory.write('\n[masters]\n')
- for master in masters:
- write_host(master, base_inventory)
-
- if len(masters) > 1:
- base_inventory.write('\n[etcd]\n')
- for master in masters:
- write_host(master, base_inventory)
-
- base_inventory.write('\n[nodes]\n')
+ write_inventory_children(base_inventory, scaleup)
- for node in nodes:
- # Let the fact defaults decide if we're not a master:
- schedulable = None
+ write_inventory_vars(base_inventory, multiple_masters, lb)
- # If the node is also a master, we must explicitly set schedulablity:
- if node.is_master():
- schedulable = node.is_schedulable_node(hosts)
- write_host(node, base_inventory, schedulable)
-
- if not getattr(proxy, 'preconfigured', True):
- base_inventory.write('\n[lb]\n')
- write_host(proxy, base_inventory)
+ #write_inventory_hosts
+ for role in CFG.deployment.roles:
+ # write group block
+ group = ROLES_TO_GROUPS_MAP.get(role, role)
+ base_inventory.write("\n[{}]\n".format(group))
+ # write each host
+ group_hosts = [host for host in hosts if role in host.roles]
+ for host in group_hosts:
+ schedulable = host.is_schedulable_node(hosts)
+ write_host(host, role, base_inventory, schedulable)
if scaleup:
base_inventory.write('\n[new_nodes]\n')
for node in new_nodes:
- write_host(node, base_inventory)
-
- if storage:
- base_inventory.write('\n[nfs]\n')
- write_host(storage, base_inventory)
+ write_host(node, 'new_nodes', base_inventory)
base_inventory.close()
return base_inventory_path
-def determine_proxy_configuration(hosts):
- proxy = next((host for host in hosts if host.is_master_lb()), None)
- if proxy:
- if proxy.hostname == None:
- proxy.hostname = proxy.connect_to
- proxy.public_hostname = proxy.connect_to
+def determine_lb_configuration(hosts):
+ lb = next((host for host in hosts if host.is_master_lb()), None)
+ if lb:
+ if lb.hostname == None:
+ lb.hostname = lb.connect_to
+ lb.public_hostname = lb.connect_to
- return proxy
+ return lb
-def determine_storage_configuration(hosts):
- storage = next((host for host in hosts if host.is_storage()), None)
-
- return storage
-
-def write_inventory_children(base_inventory, multiple_masters, proxy, scaleup):
+def write_inventory_children(base_inventory, scaleup):
global CFG
base_inventory.write('\n[OSEv3:children]\n')
@@ -112,13 +89,10 @@ def write_inventory_children(base_inventory, multiple_masters, proxy, scaleup):
if scaleup:
base_inventory.write('new_nodes\n')
- if multiple_masters:
- base_inventory.write('etcd\n')
- if not getattr(proxy, 'preconfigured', True):
- base_inventory.write('lb\n')
+
# pylint: disable=too-many-branches
-def write_inventory_vars(base_inventory, multiple_masters, proxy):
+def write_inventory_vars(base_inventory, multiple_masters, lb):
global CFG
base_inventory.write('\n[OSEv3:vars]\n')
@@ -135,11 +109,11 @@ def write_inventory_vars(base_inventory, multiple_masters, proxy):
if CFG.settings['ansible_ssh_user'] != 'root':
base_inventory.write('ansible_become=yes\n')
- if multiple_masters and proxy is not None:
+ if multiple_masters and lb is not None:
base_inventory.write('openshift_master_cluster_method=native\n')
- base_inventory.write("openshift_master_cluster_hostname={}\n".format(proxy.hostname))
+ base_inventory.write("openshift_master_cluster_hostname={}\n".format(lb.hostname))
base_inventory.write(
- "openshift_master_cluster_public_hostname={}\n".format(proxy.public_hostname))
+ "openshift_master_cluster_public_hostname={}\n".format(lb.public_hostname))
if CFG.settings.get('variant_version', None) == '3.1':
#base_inventory.write('openshift_image_tag=v{}\n'.format(CFG.settings.get('variant_version')))
@@ -195,9 +169,12 @@ def write_proxy_settings(base_inventory):
# pylint: disable=too-many-branches
-def write_host(host, inventory, schedulable=None):
+def write_host(host, role, inventory, schedulable=None):
global CFG
+ if host.preconfigured:
+ return
+
facts = ''
if host.ip:
facts += ' openshift_ip={}'.format(host.ip)
@@ -215,14 +192,13 @@ def write_host(host, inventory, schedulable=None):
if host.node_labels:
facts += ' openshift_node_labels="{}"'.format(host.node_labels)
+
# Distinguish between three states, no schedulability specified (use default),
# explicitly set to True, or explicitly set to False:
- if schedulable is None:
+ if role != 'node' or schedulable is None:
pass
- elif schedulable:
- facts += ' openshift_schedulable=True'
- elif not schedulable:
- facts += ' openshift_schedulable=False'
+ else:
+ facts += " openshift_schedulable={}".format(schedulable)
installer_host = socket.gethostname()
if installer_host in [host.connect_to, host.hostname, host.public_hostname]:
@@ -303,10 +279,10 @@ def run_ansible(playbook, inventory, env_vars, verbose=False):
return subprocess.call(args, env=env_vars)
-def run_uninstall_playbook(verbose=False):
+def run_uninstall_playbook(hosts, verbose=False):
playbook = os.path.join(CFG.settings['ansible_playbook_directory'],
'playbooks/adhoc/uninstall.yml')
- inventory_file = generate_inventory(CFG.hosts)
+ inventory_file = generate_inventory(hosts)
facts_env = os.environ.copy()
if 'ansible_log_path' in CFG.settings:
facts_env['ANSIBLE_LOG_PATH'] = CFG.settings['ansible_log_path']
diff --git a/utils/src/ooinstall/variants.py b/utils/src/ooinstall/variants.py
index 8889e42e6..2397ee9cc 100644
--- a/utils/src/ooinstall/variants.py
+++ b/utils/src/ooinstall/variants.py
@@ -37,15 +37,6 @@ class Variant(object):
OSE = Variant('openshift-enterprise', 'OpenShift Enterprise',
[
Version('3.2', 'openshift-enterprise'),
- Version('3.1', 'openshift-enterprise'),
- Version('3.0', 'enterprise')
- ]
-)
-
-AEP = Variant('atomic-enterprise', 'Atomic Enterprise Platform',
- [
- Version('3.2', 'atomic-enterprise'),
- Version('3.1', 'atomic-enterprise')
]
)
@@ -56,8 +47,8 @@ origin = Variant('origin', 'OpenShift Origin',
)
# Ordered list of variants we can install, first is the default.
-SUPPORTED_VARIANTS = (OSE, AEP, origin)
-DISPLAY_VARIANTS = (OSE, AEP)
+SUPPORTED_VARIANTS = (OSE, origin)
+DISPLAY_VARIANTS = (OSE, )
def find_variant(name, version=None):
"""
diff --git a/utils/test/cli_installer_tests.py b/utils/test/cli_installer_tests.py
index 13973f22f..3044a2449 100644
--- a/utils/test/cli_installer_tests.py
+++ b/utils/test/cli_installer_tests.py
@@ -573,7 +573,7 @@ class UnattendedCliTests(OOCliFixture):
run_playbook_mock.return_value = 0
config = SAMPLE_CONFIG % 'openshift-enterprise'
- config = '%s\n%s' % (config, 'variant_version: 3.0')
+ config = '%s\n%s' % (config, 'variant_version: 3.2')
config_file = self.write_config(os.path.join(self.work_dir,
'ooinstall.conf'), config)
@@ -586,11 +586,11 @@ class UnattendedCliTests(OOCliFixture):
self.assertEquals('openshift-enterprise', written_config['variant'])
# Make sure our older version was preserved:
# and written to disk:
- self.assertEquals('3.0', written_config['variant_version'])
+ self.assertEquals('3.2', written_config['variant_version'])
inventory = ConfigParser.ConfigParser(allow_no_value=True)
inventory.read(os.path.join(self.work_dir, 'hosts'))
- self.assertEquals('enterprise',
+ self.assertEquals('openshift-enterprise',
inventory.get('OSEv3:vars', 'deployment_type'))
@patch('ooinstall.openshift_ansible.run_ansible')
@@ -815,9 +815,9 @@ class AttendedCliTests(OOCliFixture):
self.assert_inventory_host_var(inventory, 'nodes', '10.0.0.1',
'openshift_schedulable=False')
self.assert_inventory_host_var_unset(inventory, 'nodes', '10.0.0.2',
- 'openshift_schedulable')
+ 'openshift_schedulable=True')
self.assert_inventory_host_var_unset(inventory, 'nodes', '10.0.0.3',
- 'openshift_schedulable')
+ 'openshift_schedulable=True')
# interactive with config file and some installed some uninstalled hosts
@patch('ooinstall.openshift_ansible.run_main_playbook')
@@ -939,7 +939,7 @@ class AttendedCliTests(OOCliFixture):
self.assert_inventory_host_var(inventory, 'nodes', '10.0.0.3',
'openshift_schedulable=False')
self.assert_inventory_host_var_unset(inventory, 'nodes', '10.0.0.4',
- 'openshift_schedulable')
+ 'openshift_schedulable=True')
self.assertTrue(inventory.has_section('etcd'))
self.assertEquals(3, len(inventory.items('etcd')))
@@ -1068,26 +1068,6 @@ class AttendedCliTests(OOCliFixture):
self.assert_inventory_host_var(inventory, 'nodes', '10.0.0.1',
'openshift_schedulable=True')
- #interactive 3.0 install confirm no HA hints
- @patch('ooinstall.openshift_ansible.run_main_playbook')
- @patch('ooinstall.openshift_ansible.load_system_facts')
- def test_ha_hint(self, load_facts_mock, run_playbook_mock):
- load_facts_mock.return_value = (MOCK_FACTS, 0)
- run_playbook_mock.return_value = 0
-
- cli_input = build_input(hosts=[
- ('10.0.0.1', True, False)],
- ssh_user='root',
- variant_num=3,
- confirm_facts='y',
- storage='10.1.0.1',)
- self.cli_args.append("install")
- result = self.runner.invoke(cli.cli, self.cli_args,
- input=cli_input)
- self.assert_result(result, 0)
- print result.output
- self.assertTrue("NOTE: Add a total of 3 or more Masters to perform an HA installation."
- not in result.output)
@patch('ooinstall.openshift_ansible.run_main_playbook')
@patch('ooinstall.openshift_ansible.load_system_facts')
@@ -1122,9 +1102,9 @@ class AttendedCliTests(OOCliFixture):
self.assert_inventory_host_var(inventory, 'nodes', '10.0.0.1',
'openshift_schedulable=False')
self.assert_inventory_host_var_unset(inventory, 'nodes', '10.0.0.2',
- 'openshift_schedulable')
+ 'openshift_schedulable=True')
self.assert_inventory_host_var_unset(inventory, 'nodes', '10.0.0.3',
- 'openshift_schedulable')
+ 'openshift_schedulable=True')
# TODO: test with config file, attended add node