def get_hosts_to_run_on(oo_cfg, callback_facts, unattended, force): # Copy the list of existing hosts so we can remove any already installed nodes. hosts_to_run_on = list(oo_cfg.hosts) # Check if master or nodes already have something installed installed_hosts = get_installed_hosts(oo_cfg.hosts, callback_facts) if len(installed_hosts) > 0: # present a message listing already installed hosts for host in installed_hosts: if host.master: click.echo("{} is already an OpenShift Master".format(host)) # Masters stay in the list, we need to run against them when adding # new nodes. elif host.node: click.echo("{} is already an OpenShift Node".format(host)) hosts_to_run_on.remove(host) # for unattended either continue if they force install or exit if they didn't if unattended: if not force: click.echo('Installed environment detected and no additional nodes specified: ' \ 'aborting. If you want a fresh install, use --force') sys.exit(1) # for attended ask the user what to do else: click.echo( 'Installed environment detected and no additional nodes specified. ' ) response = click.prompt('Do you want to (1) add more nodes or ' \ '(2) perform a clean install?', type=int) if response == 1: # add more nodes new_nodes = collect_new_nodes() hosts_to_run_on.extend(new_nodes) oo_cfg.hosts.extend(new_nodes) install_transactions.set_config(oo_cfg) callback_facts, error = install_transactions.default_facts( oo_cfg.hosts) if error: click.echo("There was a problem fetching the required information. " \ "See {} for details.".format(oo_cfg.settings['ansible_log_path'])) sys.exit(1) else: pass # proceeding as normal should do a clean install return hosts_to_run_on, callback_facts
def get_hosts_to_run_on(oo_cfg, callback_facts, unattended, force): # Copy the list of existing hosts so we can remove any already installed nodes. hosts_to_run_on = list(oo_cfg.hosts) # Check if master or nodes already have something installed installed_hosts = get_installed_hosts(oo_cfg.hosts, callback_facts) if len(installed_hosts) > 0: # present a message listing already installed hosts for host in installed_hosts: if host.master: click.echo("{} is already an OpenShift Master".format(host)) # Masters stay in the list, we need to run against them when adding # new nodes. elif host.node: click.echo("{} is already an OpenShift Node".format(host)) hosts_to_run_on.remove(host) # for unattended either continue if they force install or exit if they didn't if unattended: if not force: click.echo('Installed environment detected and no additional nodes specified: ' \ 'aborting. If you want a fresh install, use --force') sys.exit(1) # for attended ask the user what to do else: click.echo('Installed environment detected and no additional nodes specified. ') response = click.prompt('Do you want to (1) add more nodes or ' \ '(2) perform a clean install?', type=int) if response == 1: # add more nodes new_nodes = collect_new_nodes() hosts_to_run_on.extend(new_nodes) oo_cfg.hosts.extend(new_nodes) install_transactions.set_config(oo_cfg) callback_facts, error = install_transactions.default_facts(oo_cfg.hosts) if error: click.echo("There was a problem fetching the required information. " \ "See {} for details.".format(oo_cfg.settings['ansible_log_path'])) sys.exit(1) else: pass # proceeding as normal should do a clean install return hosts_to_run_on, callback_facts
def main(configuration, ansible_playbook_directory, ansible_config, ansible_log_path, unattended, force): oo_cfg = OOConfig(configuration) if not ansible_playbook_directory: ansible_playbook_directory = oo_cfg.settings.get('ansible_playbook_directory', '') if ansible_config: oo_cfg.settings['ansible_config'] = ansible_config elif os.path.exists(DEFAULT_ANSIBLE_CONFIG): # If we're installed by RPM this file should exist and we can use it as our default: oo_cfg.settings['ansible_config'] = DEFAULT_ANSIBLE_CONFIG validate_ansible_dir(ansible_playbook_directory) oo_cfg.settings['ansible_playbook_directory'] = ansible_playbook_directory oo_cfg.ansible_playbook_directory = ansible_playbook_directory oo_cfg.settings['ansible_log_path'] = ansible_log_path install_transactions.set_config(oo_cfg) if unattended: error_if_missing_info(oo_cfg) else: oo_cfg = get_missing_info_from_user(oo_cfg) click.echo('Gathering information from hosts...') callback_facts, error = install_transactions.default_facts(oo_cfg.hosts) if error: click.echo("There was a problem fetching the required information. " \ "Please see {} for details.".format(oo_cfg.settings['ansible_log_path'])) sys.exit(1) hosts_to_run_on, callback_facts = get_hosts_to_run_on(oo_cfg, callback_facts, unattended, force) click.echo('Writing config to: %s' % oo_cfg.config_path) # We already verified this is not the case for unattended installs, so this can # only trigger for live CLI users: # TODO: if there are *new* nodes and this is a live install, we may need the user # to confirm the settings for new nodes. Look into this once we're distinguishing # between new and pre-existing nodes. if len(oo_cfg.calc_missing_facts()) > 0: confirm_hosts_facts(oo_cfg, callback_facts) oo_cfg.save_to_disk() click.echo('Ready to run installation process.') message = """ If changes are needed to the values recorded by the installer please update {}. """.format(oo_cfg.config_path) if not unattended: confirm_continue(message) error = install_transactions.run_main_playbook(oo_cfg.hosts, hosts_to_run_on) if error: # The bootstrap script will print out the log location. message = """ An error was detected. After resolving the problem please relaunch the installation process. """ click.echo(message) sys.exit(1) else: message = """ The installation was successful! If this is your first time installing please take a look at the Administrator Guide for advanced options related to routing, storage, authentication and much more: http://docs.openshift.com/enterprise/latest/admin_guide/overview.html """ click.echo(message) click.pause()
def main(configuration, ansible_playbook_directory, ansible_config, ansible_log_path, unattended, force): oo_cfg = OOConfig(configuration) if not ansible_playbook_directory: ansible_playbook_directory = oo_cfg.settings.get( 'ansible_playbook_directory', '') if ansible_config: oo_cfg.settings['ansible_config'] = ansible_config elif os.path.exists(DEFAULT_ANSIBLE_CONFIG): # If we're installed by RPM this file should exist and we can use it as our default: oo_cfg.settings['ansible_config'] = DEFAULT_ANSIBLE_CONFIG validate_ansible_dir(ansible_playbook_directory) oo_cfg.settings['ansible_playbook_directory'] = ansible_playbook_directory oo_cfg.ansible_playbook_directory = ansible_playbook_directory oo_cfg.settings['ansible_log_path'] = ansible_log_path install_transactions.set_config(oo_cfg) if unattended: error_if_missing_info(oo_cfg) else: oo_cfg = get_missing_info_from_user(oo_cfg) click.echo('Gathering information from hosts...') callback_facts, error = install_transactions.default_facts(oo_cfg.hosts) if error: click.echo("There was a problem fetching the required information. " \ "Please see {} for details.".format(oo_cfg.settings['ansible_log_path'])) sys.exit(1) hosts_to_run_on, callback_facts = get_hosts_to_run_on( oo_cfg, callback_facts, unattended, force) click.echo('Writing config to: %s' % oo_cfg.config_path) # We already verified this is not the case for unattended installs, so this can # only trigger for live CLI users: # TODO: if there are *new* nodes and this is a live install, we may need the user # to confirm the settings for new nodes. Look into this once we're distinguishing # between new and pre-existing nodes. if len(oo_cfg.calc_missing_facts()) > 0: confirm_hosts_facts(oo_cfg, callback_facts) oo_cfg.save_to_disk() click.echo('Ready to run installation process.') message = """ If changes are needed to the values recorded by the installer please update {}. """.format(oo_cfg.config_path) if not unattended: confirm_continue(message) error = install_transactions.run_main_playbook(oo_cfg.hosts, hosts_to_run_on) if error: # The bootstrap script will print out the log location. message = """ An error was detected. After resolving the problem please relaunch the installation process. """ click.echo(message) sys.exit(1) else: message = """ The installation was successful! If this is your first time installing please take a look at the Administrator Guide for advanced options related to routing, storage, authentication and much more: http://docs.openshift.com/enterprise/latest/admin_guide/overview.html """ click.echo(message) click.pause()