diff options
Diffstat (limited to 'deployment/add-node.py')
-rwxr-xr-x | deployment/add-node.py | 668 |
1 files changed, 0 insertions, 668 deletions
diff --git a/deployment/add-node.py b/deployment/add-node.py deleted file mode 100755 index 1f584c11..00000000 --- a/deployment/add-node.py +++ /dev/null @@ -1,668 +0,0 @@ -#!/usr/bin/env python -# vim: sw=4 ts=4 et - -import argparse -import click -import fileinput -import os -import re -import requests -import six -from six.moves import configparser -import sys -import yaml - -try: - import json -except ImportError: - import simplejson as json - - -class VMWareAddNode(object): - __name__ = 'VMWareAddNode' - - openshift_vers = None - cluster_id = None - vcenter_host = None - vcenter_username = None - vcenter_password = None - vcenter_template_name = None - vcenter_folder = None - vcenter_datastore = None - vcenter_datacenter = None - vcenter_cluster = None - vcenter_datacenter = None - vcenter_resource_pool = None - rhel_subscription_server = None - openshift_sdn = None - compute_nodes = None - storage_nodes = None - cns_automation_config_file_path = None - ocp_hostname_prefix = None - deployment_type = None - console_port = 8443 - rhel_subscription_user = None - rhel_subscription_pass = None - rhel_subscription_pool = None - dns_zone = None - app_dns_prefix = None - admin_key = None - user_key = None - wildcard_zone = None - inventory_file = 'add-node.json' - node_type = None - node_number = None - openshift_disable_check = None - container_storage = None - container_storage_disks = None - container_storage_block_hosting_volume_size = None - container_storage_disk_type = None - additional_disks_to_storage_nodes = None - container_storage_glusterfs_timeout = None - heketi_admin_key = None - heketi_user_key = None - tag = None - verbose = 0 - docker_registry_url = None - docker_additional_registries = None - docker_insecure_registries = None - docker_image_tag = None - ose_puddle_repo = None - gluster_puddle_repo = None - cns_glusterfs_image = None - cns_glusterfs_version = None - cns_glusterfs_block_image = None - cns_glusterfs_block_version = None - cns_glusterfs_heketi_image = None - cns_glusterfs_heketi_version = 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.launch_refarch_env() - - def update_ini_file(self): - """Update INI file with added number of nodes.""" - scriptbasename = "ocp-on-vmware" - defaults = {'vmware': { - 'ini_path': os.path.join( - os.path.dirname(__file__), '%s.ini' % scriptbasename), - 'storage_nodes': '3', - 'compute_nodes': '2', - }} - # where is the config? - if six.PY3: - config = configparser.ConfigParser() - else: - config = configparser.SafeConfigParser() - - vmware_ini_path = os.environ.get( - 'VMWARE_INI_PATH', defaults['vmware']['ini_path']) - vmware_ini_path = os.path.expanduser( - os.path.expandvars(vmware_ini_path)) - config.read(vmware_ini_path) - - if 'compute' in self.node_type: - self.compute_nodes = ( - int(self.compute_nodes) + int(self.node_number)) - config.set('vmware', 'compute_nodes', str(self.compute_nodes)) - print "Updating %s file with %s compute_nodes" % ( - vmware_ini_path, self.compute_nodes) - if 'storage' in self.node_type: - self.storage_nodes = int(self.storage_nodes) or 3 - config.set('vmware', 'storage_nodes', str(self.storage_nodes)) - print "Updating %s file with %s storage_nodes" % ( - vmware_ini_path, self.storage_nodes) - - for line in fileinput.input(vmware_ini_path, inplace=True): - if line.startswith("compute_nodes"): - print "compute_nodes=" + str(self.compute_nodes) - elif line.startswith("storage_nodes"): - print "storage_nodes=" + str(self.storage_nodes) - else: - print line, - - def parse_cli_args(self): - """Command line argument processing.""" - - tag_help = """Skip to various parts of install valid tags include: - - vms (create vms for adding nodes to cluster or CNS/CRS) - - node-setup (install the proper packages on the CNS/CRS nodes) - - clean (remove vms and unregister them from RHN - also remove storage classes or secrets""" - parser = argparse.ArgumentParser( - description='Add new nodes to an existing OCP deployment', - formatter_class=argparse.RawTextHelpFormatter) - parser.add_argument( - '--node_type', action='store', default='compute', - help='Specify the node label: compute, storage') - parser.add_argument( - '--node_number', action='store', default='3', - help='Specify the number of nodes to add.') - parser.add_argument( - '--create_inventory', action='store_true', - help=('Deprecated and not used option. ' - 'Everything that is needed gets autocreated.')) - 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 - - 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', - 'container_storage_disks': '100,600', - 'container_storage_block_hosting_volume_size': '99', - 'additional_disks_to_storage_nodes': '100', - 'container_storage_disk_type': 'eagerZeroedThick', - 'container_storage_glusterfs_timeout': '', - 'heketi_admin_key': '', - 'heketi_user_key': '', - 'docker_registry_url': '', - 'docker_additional_registries': '', - 'docker_insecure_registries': '', - 'docker_image_tag': '', - 'ose_puddle_repo': '', - 'gluster_puddle_repo': '', - 'cns_glusterfs_image': 'rhgs3/rhgs-server-rhel7', - 'cns_glusterfs_version': 'latest', - 'cns_glusterfs_block_image': 'rhgs3/rhgs-gluster-block-prov-rhel7', - 'cns_glusterfs_block_version': 'latest', - 'cns_glusterfs_heketi_image': 'rhgs3/rhgs-volmanager-rhel7', - 'cns_glusterfs_heketi_version': 'latest', - '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', - 'rhel_subscription_pool': 'Employee SKU', - 'openshift_sdn': 'redhat/openshift-ovs-subnet', - 'compute_nodes': '2', - 'storage_nodes': '3', - 'cns_automation_config_file_path': '', - 'ocp_hostname_prefix': 'openshift-on-vmware', - 'node_type': self.args.node_type, - 'node_number': self.args.node_number, - 'tag': self.args.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? - vmware_ini_path = os.environ.get( - 'VMWARE_INI_PATH', defaults['vmware']['ini_path']) - vmware_ini_path = os.path.expanduser( - os.path.expandvars(vmware_ini_path)) - config.read(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.container_storage_disks = config.get( - 'vmware', 'container_storage_disks') - self.container_storage_block_hosting_volume_size = config.get( - 'vmware', - 'container_storage_block_hosting_volume_size').strip() or 99 - self.container_storage_disk_type = config.get( - 'vmware', 'container_storage_disk_type') - self.additional_disks_to_storage_nodes = config.get( - 'vmware', 'additional_disks_to_storage_nodes') - self.container_storage_glusterfs_timeout = config.get( - 'vmware', 'container_storage_glusterfs_timeout') - self.heketi_admin_key = config.get('vmware', 'heketi_admin_key') - self.heketi_user_key = config.get('vmware', 'heketi_user_key') - self.docker_registry_url = config.get('vmware', 'docker_registry_url') - 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.ose_puddle_repo = config.get('vmware', 'ose_puddle_repo') - self.gluster_puddle_repo = config.get('vmware', 'gluster_puddle_repo') - self.cns_glusterfs_image = ( - config.get('vmware', 'cns_glusterfs_image')).strip() - self.cns_glusterfs_version = ( - config.get('vmware', 'cns_glusterfs_version')).strip() - self.cns_glusterfs_block_image = ( - config.get('vmware', 'cns_glusterfs_block_image')).strip() - self.cns_glusterfs_block_version = ( - config.get('vmware', 'cns_glusterfs_block_version')).strip() - self.cns_glusterfs_heketi_image = ( - config.get('vmware', 'cns_glusterfs_heketi_image')).strip() - self.cns_glusterfs_heketi_version = ( - config.get('vmware', 'cns_glusterfs_heketi_version')).strip() - self.deployment_type = config.get('vmware', 'deployment_type') - 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.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 = int(config.get('vmware', 'compute_nodes')) or 2 - self.storage_nodes = int(config.get('vmware', 'storage_nodes')) or 3 - self.cns_automation_config_file_path = config.get( - 'vmware', 'cns_automation_config_file_path') - 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.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.node_type = config.get('vmware', 'node_type') - self.node_number = config.get('vmware', 'node_number') - self.tag = config.get('vmware', 'tag') - self.openshift_use_crio = ( - config.get('vmware', 'openshift_use_crio') or '').strip() - err_count = 0 - - if 'storage' in self.node_type: - if self.node_number < 3: - err_count += 1 - print ("Node number for CNS and CRS should be 3 or more.") - if self.container_storage is None: - err_count += 1 - print ("Please specify crs or cns in container_storage in " - "the %s." % vmware_ini_path) - elif self.container_storage in ('cns', 'crs'): - self.inventory_file = ( - "%s-inventory.json" % self.container_storage) - required_vars = { - 'cluster_id': self.cluster_id, - 'dns_zone': self.dns_zone, - 'vcenter_host': self.vcenter_host, - 'vcenter_password': self.vcenter_password, - 'vcenter_datacenter': self.vcenter_datacenter, - } - for k, v in required_vars.items(): - if v == '': - err_count += 1 - print "Missing %s " % k - if not (self.container_storage_disks - and re.search( - r'^[0-9]*(,[0-9]*)*$', self.container_storage_disks)): - err_count += 1 - print ("'container_storage_disks' has improper value - " - "'%s'. Only integers separated with comma are allowed." % ( - self.container_storage_disks)) - if self.container_storage_block_hosting_volume_size: - try: - self.container_storage_block_hosting_volume_size = int( - self.container_storage_block_hosting_volume_size) - except ValueError: - err_count += 1 - print ("'container_storage_block_hosting_volume_size' can be " - "either empty or integer. Provided value is '%s'" % ( - self.container_storage_block_hosting_volume_size)) - if (self.additional_disks_to_storage_nodes and not re.search( - r'^[0-9]*(,[0-9]*)*$', - self.additional_disks_to_storage_nodes)): - err_count += 1 - print ("'additional_disks_to_storage_nodes' has improper " - "value - '%s'. Only integers separated with comma " - "are allowed." % self.additional_disks_to_storage_nodes) - if self.container_storage_glusterfs_timeout: - try: - self.container_storage_glusterfs_timeout = int( - self.container_storage_glusterfs_timeout) - except ValueError: - err_count += 1 - print ("'container_storage_glusterfs_timeout' can be " - "either empty or integer. Provided value is '%s'" % ( - self.container_storage_glusterfs_timeout)) - 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.") - for opt_name in ('cns_glusterfs_image', 'cns_glusterfs_block_image', - 'cns_glusterfs_heketi_image'): - if len(getattr(self, opt_name).split(':')) > 1: - err_count += 1 - print ("'%s' option is expected to contain " - "only image name." % opt_name) - 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 " % ( - vmware_ini_path) - exit(1) - self.wildcard_zone = "%s.%s" % (self.app_dns_prefix, self.dns_zone) - self.support_nodes = 0 - - 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): - if not self.args.no_confirm: - if not click.confirm( - 'Continue creating the inventory file with these values?'): - sys.exit(0) - - d = {'host_inventory': {}} - for i in range(0, int(self.node_number)): - # Determine node_number increment on the number of nodes - if self.node_type == 'compute': - guest_name = '%s-%s' % (self.node_type, i) - guest_type = 'compute' - elif (self.node_type == 'storage' - and self.container_storage == 'crs'): - guest_name = '%s-%s' % (self.container_storage, i) - guest_type = self.container_storage - elif (self.node_type == 'storage' - and self.container_storage == 'cns'): - guest_name = '%s-%s' % (self.container_storage, i) - guest_type = self.container_storage - else: - raise Exception( - "Unexpected combination of 'node_type' (%s) and " - "'container_storage' (%s)." % ( - self.node_type, self.container_storage)) - if self.ocp_hostname_prefix: - guest_name = "%s-%s" % (self.ocp_hostname_prefix, guest_name) - d['host_inventory'][guest_name] = { - 'guestname': guest_name, - 'guesttype': guest_type, - 'tag': str(self.cluster_id) + '-' + self.node_type, - } - - with open(self.inventory_file, 'w') as outfile: - json.dump(d, outfile, indent=4, sort_keys=True) - print 'Inventory file created: %s' % self.inventory_file - - 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) - - if (self.container_storage in ('cns', 'crs') - and 'storage' in self.node_type): - if 'None' in self.tag: - # do the full install and config minus the cleanup - self.tag = 'vms,node-setup' - playbooks = ['playbooks/%s-storage.yaml' % self.container_storage] - else: - if 'None' in self.tag: - # do the full install and config minus the cleanup - self.tag = 'all' - playbooks = ['playbooks/add-node.yaml'] - - playbook_vars_dict = { - 'add_node': 'yes', - '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_datastore': self.vcenter_datastore, - 'vcenter_cluster': self.vcenter_cluster, - 'vcenter_datacenter': self.vcenter_datacenter, - 'vcenter_resource_pool': self.vcenter_resource_pool, - 'dns_zone': self.dns_zone, - 'wildcard_zone': self.wildcard_zone, - 'app_dns_prefix': self.app_dns_prefix, - 'vm_network': self.vm_network, - 'cns_automation_config_file_path': ( - self.cns_automation_config_file_path), - 'console_port': self.console_port, - 'cluster_id': self.cluster_id, - 'container_storage': self.container_storage, - 'container_storage_disks': self.container_storage_disks, - 'container_storage_disk_type': self.container_storage_disk_type, - 'additional_disks_to_storage_nodes': ( - self.additional_disks_to_storage_nodes), - 'dp_tool_heketi_admin_key': self.heketi_admin_key, - 'dp_tool_heketi_user_key': self.heketi_user_key, - 'ose_puddle_repo': self.ose_puddle_repo, - 'gluster_puddle_repo': self.gluster_puddle_repo, - 'deployment_type': self.deployment_type, - 'openshift_deployment_type': self.deployment_type, - 'openshift_vers': self.openshift_vers, - 'admin_key': self.admin_key, - 'user_key': self.user_key, - 'rhel_subscription_user': self.rhel_subscription_user, - 'rhel_subscription_pass': 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, - 'lb_host': self.lb_host, - 'node_type': self.node_type, - '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.container_storage_block_hosting_volume_size: - playbook_vars_dict[ - 'openshift_storage_glusterfs_block_host_vol_size'] = ( - self.container_storage_block_hosting_volume_size) - if self.container_storage_glusterfs_timeout: - playbook_vars_dict['openshift_storage_glusterfs_timeout'] = ( - self.container_storage_glusterfs_timeout) - 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.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", "v3_9"): - for key in ('image', 'version', - 'block_image', 'block_version', - 'heketi_image', 'heketi_version'): - value = getattr(self, 'cns_glusterfs_%s' % key) - if not value: - continue - playbook_vars_dict['openshift_storage_glusterfs_%s' % key] = ( - value) - if self.openshift_vers in ('v3_6', 'v3_7'): - playbook_vars_dict['docker_version'] = '1.12.6' - elif self.openshift_vers != "v3_9": - if self.cns_glusterfs_version: - playbook_vars_dict['openshift_storage_glusterfs_image'] = ( - "%s:%s" % ( - self.cns_glusterfs_image or 'rhgs3/rhgs-server-rhel7', - self.cns_glusterfs_version)) - elif self.cns_glusterfs_image: - playbook_vars_dict['openshift_storage_glusterfs_image'] = ( - "%s:latest" % self.cns_glusterfs_image) - if self.cns_glusterfs_block_version: - playbook_vars_dict[ - 'openshift_storage_glusterfs_block_image'] = ( - "%s:%s" % ( - self.cns_glusterfs_block_image - or 'rhgs3/rhgs-gluster-block-prov-rhel7', - self.cns_glusterfs_block_version)) - elif self.cns_glusterfs_block_image: - playbook_vars_dict[ - "openshift_storage_glusterfs_block_image"] = ( - "%s:latest" % self.cns_glusterfs_block_image) - if self.cns_glusterfs_heketi_version: - playbook_vars_dict[ - 'openshift_storage_glusterfs_heketi_image'] = ( - "%s:%s" % ( - self.cns_glusterfs_heketi_image - or 'rhgs3/rhgs-volmanager-rhel7', - self.cns_glusterfs_heketi_version)) - elif self.cns_glusterfs_heketi_image: - playbook_vars_dict[ - "openshift_storage_glusterfs_heketi_image"] = ( - "%s:latest" % self.cns_glusterfs_heketi_image) - - playbook_vars_str = ' '.join('%s=%s' % (k, v) - for (k, v) in playbook_vars_dict.items()) - - for playbook in playbooks: - devnull = '' if self.verbose > 0 else '> /dev/null' - - # refresh the inventory cache to prevent stale hosts from - # interferring with re-running - command = 'inventory/vsphere/vms/vmware_inventory.py %s' % ( - devnull) - os.system(command) - - # remove any cached facts to prevent stale data during a re-run - command = 'rm -rf .ansible/cached_facts' - os.system(command) - - command = ( - "ansible-playbook" - " --extra-vars '@./%s'" - " --tags %s" - " -e '%s' %s" % ( - self.inventory_file, self.tag, playbook_vars_str, playbook) - ) - - if self.verbose > 0: - command += " -vvvvv" - - 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)) - - command = ( - "ansible-playbook " - "-i %smaster-0, playbooks/get_ocp_info.yaml") % ( - "%s-" % self.ocp_hostname_prefix - if self.ocp_hostname_prefix else "") - os.system(command) - - print "Successful run!" - if click.confirm('Update INI?'): - self.update_ini_file() - if click.confirm('Delete inventory file?'): - print "Removing the existing %s file" % self.inventory_file - os.remove(self.inventory_file) - sys.exit(0) - - -if __name__ == '__main__': - VMWareAddNode() |