diff options
author | Valerii Ponomarov <vponomar@redhat.com> | 2019-12-21 00:09:11 +0530 |
---|---|---|
committer | Valerii Ponomarov <vponomar@redhat.com> | 2019-12-21 00:15:18 +0530 |
commit | d28b637d972aa600ed15ef437e4cb59c53e0ca5e (patch) | |
tree | 5cefd011a1d3b6d2ebc395227494ed64dc1da286 /deployment/ocp-on-vmware.py | |
parent | 678dd026c8961a713dec15a153ef9da64c6b171b (diff) |
Delete 'deployment' dir as obsolete and not supported
'deployment' directory contains obsolete and unsupported
approach for deploying OpenShift and GlusterFS storage.
Separate deployment approach has already been used for significant
amount of time.
So, delete local 'directory' as it makes no sense to keep it.
Moreover, it may be confusing for people who may try it out
and see unpredictable errors.
Change-Id: Ibf353500bab59853f597304cb9c1990102c000ef
Diffstat (limited to 'deployment/ocp-on-vmware.py')
-rwxr-xr-x | deployment/ocp-on-vmware.py | 477 |
1 files changed, 0 insertions, 477 deletions
diff --git a/deployment/ocp-on-vmware.py b/deployment/ocp-on-vmware.py deleted file mode 100755 index a099daae..00000000 --- a/deployment/ocp-on-vmware.py +++ /dev/null @@ -1,477 +0,0 @@ -#!/usr/bin/env python -# set ts=4 sw=4 et -import argparse -import click -import fileinput -import json -import os -import random -import requests -import six -from six.moves import configparser -import sys -import yaml - - -class OCPOnVMWare(object): - - __name__ = 'OCPOnVMWare' - console_port = 8443 - cluster_id = None - deployment_type = None - openshift_vers = None - vcenter_host = None - vcenter_username = None - vcenter_password = None - vcenter_template_name = None - vcenter_folder = None - vcenter_cluster = None - vcenter_datacenter = None - vcenter_datastore = None - vcenter_resource_pool = None - dns_zone = None - app_dns_prefix = None - vm_network = None - rhel_subscription_user = None - rhel_subscription_pass = None - rhel_subscription_server = None - rhel_subscription_pool = None - no_confirm = False - tag = None - verbose = 0 - create_inventory = None - compute_nodes = None - ocp_hostname_prefix = None - create_ocp_vars = None - openshift_sdn = None - container_storage = None - openshift_disable_check = None - wildcard_zone = None - inventory_file = 'infrastructure.json' - vmware_ini_path = None - clean = None - cns_automation_config_file_path = None, - docker_registry_url = None - docker_additional_registries = None - docker_insecure_registries = None - docker_image_tag = None - ose_puddle_repo = None - gluster_puddle_repo = None - web_console_install = None - disable_yum_update_and_reboot = None - openshift_use_crio = None - - def __init__(self): - self._parse_cli_args() - self._read_ini_settings() - self._create_inventory_file() - self._create_ocp_vars() - self._launch_refarch_env() - - def _parse_cli_args(self): - """Command line argument processing""" - tag_help = '''Skip to various parts of install valid tags include: - - setup create the vCenter folder and resource pool - - prod create and setup the OCP cluster - - ocp-install install OCP on the prod VMs - - ocp-config configure OCP on the prod VMs - - clean unsubscribe and remove all VMs''' - parser = argparse.ArgumentParser( - description='Deploy VMs to vSphere and install/configure OCP', - formatter_class=argparse.RawTextHelpFormatter) - parser.add_argument( - '--clean', action='store_true', - help='Delete all nodes and unregister from RHN') - parser.add_argument( - '--create_inventory', action='store_true', - help=('Deprecated and not used option. ' - 'Everything that is needed gets autocreated.')) - parser.add_argument( - '--create_ocp_vars', action='store_true', - help='Deprecated and not used option.') - parser.add_argument( - '--no_confirm', action='store_true', - help='Skip confirmation prompt') - parser.add_argument('--tag', default=None, help=tag_help) - parser.add_argument( - '--verbose', default=None, action='store_true', - help='Verbosely display commands') - self.args = parser.parse_args() - self.verbose = self.args.verbose - self.tag = self.args.tag - self.no_confirm = self.args.no_confirm - self.clean = self.args.clean - - def _is_rpm_and_image_tag_compatible(self): - if not (self.docker_image_tag and self.ose_puddle_repo): - return True - url = self.ose_puddle_repo - if url[-1] == '/': - url += 'Packages/' - else: - url += '/Packages/' - resp = requests.get(url) - if resp.ok: - v = self.docker_image_tag.split('v')[-1].strip().split('-')[0] - return (('atomic-openshift-%s' % v) in resp.text) - raise Exception( - "Failed to pull list of packages from '%s' url." % url) - - def _read_ini_settings(self): - """Read ini file settings.""" - - scriptbasename = "ocp-on-vmware" - defaults = {'vmware': { - 'ini_path': os.path.join( - os.path.dirname(__file__), '%s.ini' % scriptbasename), - 'console_port': '8443', - 'container_storage': 'none', - 'deployment_type': 'openshift-enterprise', - 'openshift_vers': 'v3_11', - 'vcenter_username': 'administrator@vsphere.local', - 'vcenter_template_name': 'not-defined', - 'vcenter_folder': 'ocp', - 'vcenter_resource_pool': '/Resources/OCP3', - 'app_dns_prefix': 'apps', - 'vm_network': 'VM Network', - 'cns_automation_config_file_path': '', - 'docker_registry_url': '', - 'docker_additional_registries': '', - 'docker_insecure_registries': '', - 'docker_image_tag': '', - 'web_console_install': '', - 'ose_puddle_repo': '', - 'gluster_puddle_repo': '', - 'rhel_subscription_pool': 'Employee SKU', - 'openshift_sdn': 'redhat/openshift-ovs-subnet', - 'compute_nodes': '2', - 'ocp_hostname_prefix': 'openshift-on-vmware', - 'tag': self.tag, - 'openshift_disable_check': ( - 'docker_storage,docker_image_availability,disk_availability'), - 'disable_yum_update_and_reboot': 'no', - 'openshift_use_crio': 'false', - }} - if six.PY3: - config = configparser.ConfigParser() - else: - config = configparser.SafeConfigParser() - - # where is the config? - self.vmware_ini_path = os.environ.get( - 'VMWARE_INI_PATH', defaults['vmware']['ini_path']) - self.vmware_ini_path = os.path.expanduser( - os.path.expandvars(self.vmware_ini_path)) - config.read(self.vmware_ini_path) - - # apply defaults - for k, v in defaults['vmware'].items(): - if not config.has_option('vmware', k): - config.set('vmware', k, str(v)) - - self.console_port = config.get('vmware', 'console_port') - self.cluster_id = config.get('vmware', 'cluster_id') - self.container_storage = config.get('vmware', 'container_storage') - self.deployment_type = config.get('vmware', 'deployment_type') - if os.environ.get('VIRTUAL_ENV'): - self.openshift_vers = ( - 'v3_%s' % os.environ['VIRTUAL_ENV'].split('_')[-1].split( - '.')[-1]) - else: - self.openshift_vers = config.get('vmware', 'openshift_vers') - self.vcenter_host = config.get('vmware', 'vcenter_host') - self.vcenter_username = config.get('vmware', 'vcenter_username') - self.vcenter_password = config.get('vmware', 'vcenter_password') - self.vcenter_template_name = config.get( - 'vmware', 'vcenter_template_name') - self.vcenter_folder = config.get('vmware', 'vcenter_folder') - self.vcenter_datastore = config.get('vmware', 'vcenter_datastore') - self.vcenter_datacenter = config.get('vmware', 'vcenter_datacenter') - self.vcenter_cluster = config.get('vmware', 'vcenter_cluster') - self.vcenter_datacenter = config.get('vmware', 'vcenter_datacenter') - self.vcenter_resource_pool = config.get( - 'vmware', 'vcenter_resource_pool') - self.dns_zone = config.get('vmware', 'dns_zone') - self.app_dns_prefix = config.get('vmware', 'app_dns_prefix') - self.vm_network = config.get('vmware', 'vm_network') - self.ocp_hostname_prefix = config.get( - 'vmware', 'ocp_hostname_prefix') or 'ansible-on-vmware' - self.lb_host = '%s-master-0' % self.ocp_hostname_prefix - self.cns_automation_config_file_path = config.get( - 'vmware', 'cns_automation_config_file_path') - self.docker_registry_url = ( - config.get('vmware', 'docker_registry_url') or '').strip() - self.docker_additional_registries = config.get( - 'vmware', 'docker_additional_registries') - self.docker_insecure_registries = config.get( - 'vmware', 'docker_insecure_registries') - self.docker_image_tag = ( - config.get('vmware', 'docker_image_tag') or '').strip() - self.web_console_install = ( - config.get('vmware', 'web_console_install') or '').strip() - self.ose_puddle_repo = config.get('vmware', 'ose_puddle_repo') - self.gluster_puddle_repo = config.get('vmware', 'gluster_puddle_repo') - self.rhel_subscription_user = config.get( - 'vmware', 'rhel_subscription_user') - self.rhel_subscription_pass = config.get( - 'vmware', 'rhel_subscription_pass') - self.rhel_subscription_server = config.get( - 'vmware', 'rhel_subscription_server') - self.rhel_subscription_pool = config.get( - 'vmware', 'rhel_subscription_pool') - self.openshift_sdn = config.get('vmware', 'openshift_sdn') - self.compute_nodes = config.get('vmware', 'compute_nodes') - self.storage_nodes = config.get('vmware', 'storage_nodes') - self.openshift_disable_check = config.get( - 'vmware', 'openshift_disable_check').strip() or ( - 'docker_storage,docker_image_availability,disk_availability') - self.disable_yum_update_and_reboot = config.get( - 'vmware', 'disable_yum_update_and_reboot').strip() or 'no' - self.openshift_use_crio = ( - config.get('vmware', 'openshift_use_crio') or '').strip() - err_count = 0 - - required_vars = { - 'vcenter_datacenter': self.vcenter_datacenter, - 'vcenter_host': self.vcenter_host, - 'vcenter_password': self.vcenter_password, - 'vcenter_template_name': self.vcenter_template_name, - 'dns_zone': self.dns_zone, - } - - for k, v in required_vars.items(): - if v == '': - err_count += 1 - print "Missing %s " % k - if (self.cns_automation_config_file_path - and not os.path.exists( - os.path.abspath(self.cns_automation_config_file_path))): - err_count += 1 - print ("Wrong value for 'cns_automation_config_file_path' " - "config option. It is expected to be either a relative " - "or an absolute file path.") - else: - self.cns_automation_config_file_path = os.path.abspath( - self.cns_automation_config_file_path) - if self.docker_image_tag and self.docker_registry_url: - vers_from_reg = self.docker_registry_url.split(':')[-1].strip() - if not vers_from_reg == self.docker_image_tag: - err_count += 1 - print ("If 'docker_image_tag' and 'docker_registry_url' are " - "specified, then their image tags should match. " - "docker_image_tag='%s', docker_registry_url='%s'" % ( - self.docker_image_tag, self.docker_registry_url)) - if not self._is_rpm_and_image_tag_compatible(): - err_count += 1 - print ("OCP RPM versions and docker image tag do not match. " - "Need either to change 'ose_puddle_repo' or " - "'docker_image_tag' config options.") - allowed_disable_checks = ( - 'disk_availability', - 'docker_image_availability', - 'docker_storage', - 'memory_availability', - 'package_availability', - 'package_version', - ) - self.openshift_disable_check_data = [ - el.strip() - for el in self.openshift_disable_check.strip().split(',') - if el.strip() - ] - if not all([(s in allowed_disable_checks) - for s in self.openshift_disable_check_data]): - err_count += 1 - print ("'openshift_disable_check' is allowed to have only " - "following values separated with comma: %s.\n " - "Got following value: %s" % (','.join( - allowed_disable_checks), self.openshift_disable_check)) - - if err_count > 0: - print "Please fill out the missing variables in %s " % ( - self.vmware_ini_path) - exit(1) - self.wildcard_zone = "%s.%s" % (self.app_dns_prefix, self.dns_zone) - - if not self.cluster_id: - # Create a unique cluster_id first - self.cluster_id = ''.join( - random.choice('0123456789abcdefghijklmnopqrstuvwxyz') - for i in range(7)) - config.set('vmware', 'cluster_id', self.cluster_id) - for line in fileinput.input(self.vmware_ini_path, inplace=True): - if line.startswith('cluster_id'): - print "cluster_id=" + str(self.cluster_id) - else: - print line, - - print 'Configured inventory values:' - for each_section in config.sections(): - for (key, val) in config.items(each_section): - if 'pass' in key: - print '\t %s: ******' % (key) - else: - print '\t %s: %s' % (key, val) - print '\n' - - def _create_inventory_file(self): - click.echo('Configured inventory values:') - click.echo('\tcompute_nodes: %s' % self.compute_nodes) - click.echo('\tdns_zone: %s' % self.dns_zone) - click.echo('\tapp_dns_prefix: %s' % self.app_dns_prefix) - click.echo('\tocp_hostname_prefix: %s' % self.ocp_hostname_prefix) - click.echo('\tUsing values from: %s' % self.vmware_ini_path) - click.echo("") - if not self.no_confirm: - click.confirm('Continue using these values?', abort=True) - - master_name = "%s-master-0" % self.ocp_hostname_prefix - d = {'host_inventory': {master_name: { - 'guestname': master_name, - 'guesttype': 'master', - 'tag': str(self.cluster_id) + '-master', - }}} - for i in range(0, int(self.compute_nodes)): - compute_name = "%s-compute-%d" % (self.ocp_hostname_prefix, i) - d['host_inventory'][compute_name] = { - 'guestname': compute_name, - 'guesttype': 'compute', - 'tag': '%s-compute' % self.cluster_id, - } - - with open(self.inventory_file, 'w') as outfile: - json.dump(d, outfile, indent=4, sort_keys=True) - - if self.args.create_inventory: - exit(0) - - def _create_ocp_vars(self): - if self.args.create_ocp_vars: - click.echo( - "No-op run. '--create_ocp_vars' option is not used anymore. " - "Ending execution.") - exit(0) - - def _launch_refarch_env(self): - with open(self.inventory_file, 'r') as f: - print yaml.safe_dump(json.load(f), default_flow_style=False) - - if not self.args.no_confirm: - if not click.confirm('Continue adding nodes with these values?'): - sys.exit(0) - - # Add section here to modify inventory file based on input - # from user check your vmmark scripts for parsing the file and - # adding the values. - for line in fileinput.input( - "inventory/vsphere/vms/vmware_inventory.ini", inplace=True): - if line.startswith("server="): - print "server=" + self.vcenter_host - elif line.startswith("password="): - print "password=" + self.vcenter_password - elif line.startswith("username="): - print "username=" + self.vcenter_username - else: - print line, - - if self.clean is True: - tags = 'clean' - elif self.tag: - tags = self.tag - else: - tags = [ - 'setup', - 'prod', - 'ocp-install', - 'ocp-configure', - ] - tags = ",".join(tags) - - # remove any cached facts to prevent stale data during a re-run - command = 'rm -rf .ansible/cached_facts' - os.system(command) - - playbook_vars_dict = { - 'vcenter_host': self.vcenter_host, - 'vcenter_username': self.vcenter_username, - 'vcenter_password': self.vcenter_password, - 'vcenter_template_name': self.vcenter_template_name, - 'vcenter_folder': self.vcenter_folder, - 'vcenter_cluster': self.vcenter_cluster, - 'vcenter_datacenter': self.vcenter_datacenter, - 'vcenter_datastore': self.vcenter_datastore, - 'vcenter_resource_pool': self.vcenter_resource_pool, - 'dns_zone': self.dns_zone, - 'app_dns_prefix': self.app_dns_prefix, - 'vm_network': self.vm_network, - 'lb_host': self.lb_host, - 'cns_automation_config_file_path': ( - self.cns_automation_config_file_path), - 'ose_puddle_repo': self.ose_puddle_repo, - 'gluster_puddle_repo': self.gluster_puddle_repo, - 'wildcard_zone': self.wildcard_zone, - 'console_port': self.console_port, - 'cluster_id': self.cluster_id, - 'deployment_type': self.deployment_type, - 'openshift_vers': self.openshift_vers, - 'rhsm_user': self.rhel_subscription_user, - 'rhsm_password': self.rhel_subscription_pass, - 'rhsm_satellite': self.rhel_subscription_server, - 'rhsm_pool': self.rhel_subscription_pool, - 'openshift_sdn': self.openshift_sdn, - 'openshift_use_openshift_sdn': True, - 'container_storage': self.container_storage, - 'ocp_hostname_prefix': self.ocp_hostname_prefix, - 'disable_yum_update_and_reboot': self.disable_yum_update_and_reboot - } - if self.openshift_disable_check_data: - playbook_vars_dict["openshift_disable_check"] = ( - ','.join(self.openshift_disable_check_data)) - if self.docker_registry_url: - playbook_vars_dict['oreg_url'] = self.docker_registry_url - if self.docker_additional_registries: - playbook_vars_dict['openshift_docker_additional_registries'] = ( - self.docker_additional_registries) - playbook_vars_dict['openshift_docker_ent_reg'] = '' - if self.docker_insecure_registries: - playbook_vars_dict['openshift_docker_insecure_registries'] = ( - self.docker_insecure_registries) - if self.docker_image_tag: - playbook_vars_dict['openshift_image_tag'] = self.docker_image_tag - if self.web_console_install: - playbook_vars_dict['openshift_web_console_install'] = ( - self.web_console_install) - if self.openshift_vers == 'v3_11': - if self.openshift_use_crio: - playbook_vars_dict['openshift_use_crio'] = ( - self.openshift_use_crio) - playbook_vars_dict['openshift_use_crio_only'] = ( - self.openshift_use_crio) - playbook_vars_dict['openshift_crio_enable_docker_gc'] = ( - self.openshift_use_crio) - else: - playbook_vars_dict['openshift_use_crio'] = 'false' - if self.openshift_vers in ('v3_6', 'v3_7'): - playbook_vars_dict['docker_version'] = '1.12.6' - - playbook_vars_str = ' '.join('%s=%s' % (k, v) - for (k, v) in playbook_vars_dict.items()) - - command = ( - "ansible-playbook" - " --extra-vars '@./infrastructure.json'" - " --tags %s" - " -e '%s' playbooks/ocp-end-to-end.yaml" - ) % (tags, playbook_vars_str) - - if self.verbose > 0: - command += " -vvvvvv" - - click.echo('We are running: %s' % command) - status = os.system(command) - if os.WIFEXITED(status) and os.WEXITSTATUS(status) != 0: - sys.exit(os.WEXITSTATUS(status)) - - -if __name__ == '__main__': - OCPOnVMWare() |