diff options
| -rw-r--r-- | utils/src/ooinstall/cli_installer.py | 34 | ||||
| -rw-r--r-- | utils/src/ooinstall/oo_config.py | 4 | ||||
| -rw-r--r-- | utils/src/ooinstall/openshift_ansible.py | 17 | 
3 files changed, 40 insertions, 15 deletions
diff --git a/utils/src/ooinstall/cli_installer.py b/utils/src/ooinstall/cli_installer.py index ac9d884d9..9abea0683 100644 --- a/utils/src/ooinstall/cli_installer.py +++ b/utils/src/ooinstall/cli_installer.py @@ -79,6 +79,7 @@ def collect_hosts(version=None, masters_set=False):          Returns: a list of host information collected from the user      """ +    min_masters_for_ha = 3      click.clear()      click.echo('***Host Configuration***')      message = """ @@ -114,10 +115,7 @@ http://docs.openshift.com/enterprise/latest/architecture/infrastructure_componen                  host_props['master'] = True                  num_masters += 1 -                if num_masters > 1: -                    hosts.append(collect_master_lb()) - -                if num_masters >= 3 or version == '3.0': +                if num_masters >= min_masters_for_ha or version == '3.0':                      masters_set = True          host_props['node'] = True @@ -135,8 +133,18 @@ http://docs.openshift.com/enterprise/latest/architecture/infrastructure_componen          hosts.append(host) -        if num_masters <= 1 or num_masters >= 3: +        click.echo('') +        click.echo('Current Masters: {}'.format(num_masters)) +        click.echo('Current Nodes: {}'.format(len(hosts))) +        click.echo('Additional Masters required for HA: {}'.format(max(min_masters_for_ha - num_masters, 0))) +        click.echo('') + +        if num_masters <= 1 or num_masters >= min_masters_for_ha:              more_hosts = click.confirm('Do you want to add additional hosts?') + +    if num_masters > 1: +        hosts.append(collect_master_lb()) +      return hosts  def collect_master_lb(): @@ -149,14 +157,19 @@ Please provide a host that will be configured as a proxy. This can either be  an existing load balancer configured to balance all masters on port 8443 or a  new host that will have HAProxy installed on it. -This will also require you to set a third master. +If the host provided does is not yet configured a reference haproxy load +balancer will be installed.  It's important to note that while the rest of the +environment will be fault tolerant this reference load balancer will not be. +It can be replaced post-installation with a load balancer with the same +hostname.  """      click.echo(message)      host_props = {}      host_props['connect_to'] = click.prompt('Enter hostname or IP address:',                                              default='',                                              value_proc=validate_prompt_hostname) -    host_props['run_on'] = click.confirm('Is this a clean host you want to install HAProxy on?') +    install_haproxy = click.confirm('Should the reference haproxy load balancer be installed on this host?') +    host_props['preconfigured'] = not install_haproxy      host_props['master'] = False      host_props['node'] = False      host_props['master_lb'] = True @@ -201,6 +214,8 @@ Notes:      default_facts_lines = []      default_facts = {}      for h in hosts: +        if h.preconfigured == True: +            continue          default_facts[h.connect_to] = {}          h.ip = callback_facts[h.connect_to]["common"]["ip"]          h.public_ip = callback_facts[h.connect_to]["common"]["public_ip"] @@ -238,13 +253,12 @@ def check_hosts_config(oo_cfg):      masters = [host for host in oo_cfg.hosts if host.master]      if len(masters) > 1:          master_lb = [host for host in oo_cfg.hosts if host.master_lb] -        click.echo(master_lb)          if len(master_lb) > 1: -            click.echo('More than one HAProxy specified. Only one proxy is allowed.') +            click.echo('More than one Master load balancer specified. Only one is allowed.')              sys.exit(0)          elif len(master_lb) == 1:              if master_lb[0].master or master_lb[0].node: -                click.echo('HAProxy is configured as a master or node. Please correct this.') +                click.echo('The Master load balancer is configured as a master or node. Please correct this.')                  sys.exit(0)          else:              message = """ diff --git a/utils/src/ooinstall/oo_config.py b/utils/src/ooinstall/oo_config.py index 243a75b09..b6f0cdce3 100644 --- a/utils/src/ooinstall/oo_config.py +++ b/utils/src/ooinstall/oo_config.py @@ -36,7 +36,7 @@ class Host(object):          self.public_ip = kwargs.get('public_ip', None)          self.public_hostname = kwargs.get('public_hostname', None)          self.connect_to = kwargs.get('connect_to', None) -        self.run_on = kwargs.get('run_on', None) +        self.preconfigured = kwargs.get('preconfigured', None)          # Should this host run as an OpenShift master:          self.master = kwargs.get('master', False) @@ -67,7 +67,7 @@ class Host(object):          """ Used when exporting to yaml. """          d = {}          for prop in ['ip', 'hostname', 'public_ip', 'public_hostname', -                     'master', 'node', 'master_lb', 'containerized', 'connect_to', 'run_on']: +                     'master', 'node', 'master_lb', 'containerized', 'connect_to', 'preconfigured']:              # If the property is defined (not None or False), export it:              if getattr(self, prop):                  d[prop] = getattr(self, prop) diff --git a/utils/src/ooinstall/openshift_ansible.py b/utils/src/ooinstall/openshift_ansible.py index 86c707b17..ed1ba2c77 100644 --- a/utils/src/ooinstall/openshift_ansible.py +++ b/utils/src/ooinstall/openshift_ansible.py @@ -19,7 +19,7 @@ def generate_inventory(hosts):      global CFG      masters = [host for host in hosts if host.master]      nodes = [host for host in hosts if host.node] -    proxy = next((host for host in hosts if host.master_lb), None) +    proxy = determine_proxy_configuration(hosts)      multiple_masters = len(masters) > 1      base_inventory_path = CFG.settings['ansible_inventory_path'] @@ -66,13 +66,24 @@ def generate_inventory(hosts):              scheduleable = False          write_host(node, base_inventory, scheduleable) -    if getattr(proxy, 'run_on', False): +    if not getattr(proxy, 'preconfigured', True):          base_inventory.write('\n[lb]\n')          write_host(proxy, base_inventory)      base_inventory.close()      return base_inventory_path +def determine_proxy_configuration(hosts): +    proxy = next((host for host in hosts if host.master_lb), None) +    if proxy: +        if proxy.hostname == None: +            proxy.hostname = proxy.connect_to +            proxy.public_hostname = proxy.connect_to +        print('asd09o') +        return proxy + +    return None +  def write_inventory_children(base_inventory, multiple_masters, proxy):      global CFG @@ -81,7 +92,7 @@ def write_inventory_children(base_inventory, multiple_masters, proxy):      base_inventory.write('nodes\n')      if multiple_masters:          base_inventory.write('etcd\n') -    if getattr(proxy, 'run_on', False): +    if not getattr(proxy, 'preconfigured', True):          base_inventory.write('lb\n')  def write_inventory_vars(base_inventory, multiple_masters, proxy):  | 
