From 2035d7e63e5e33d3e79c785d2fe625b0d2c3ac28 Mon Sep 17 00:00:00 2001 From: Valerii Ponomarov Date: Fri, 8 Feb 2019 19:25:24 +0530 Subject: Fix pep8 errors in the deployment py files Change-Id: I5f25b1dfce5d3298295939f59c3ff435ae7c6d8a --- deployment/add-node.py | 149 ++++++++-------- .../inventory/vsphere/vms/vmware_inventory.py | 195 +++++++++------------ deployment/ocp-on-vmware.py | 108 ++++++------ deployment/playbooks/library/vmware_folder.py | 107 +++++------ .../playbooks/library/vmware_resource_pool.py | 156 ++++++++++------- .../playbooks/roles/prerequisites/library/rpm_q.py | 3 +- 6 files changed, 361 insertions(+), 357 deletions(-) diff --git a/deployment/add-node.py b/deployment/add-node.py index d2b8383a..128e9ec8 100755 --- a/deployment/add-node.py +++ b/deployment/add-node.py @@ -3,17 +3,13 @@ import argparse import click -from collections import defaultdict import fileinput import os import re import requests -from shutil import copyfile import six from six.moves import configparser import sys -import textwrap -from time import time import yaml try: @@ -21,64 +17,65 @@ try: 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 + 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 + disable_yum_update_and_reboot = None def __init__(self): self.parse_cli_args() @@ -93,7 +90,7 @@ class VMWareAddNode(object): 'ini_path': os.path.join( os.path.dirname(__file__), '%s.ini' % scriptbasename), 'storage_nodes': '3', - 'compute_nodes':'2', + 'compute_nodes': '2', }} # where is the config? if six.PY3: @@ -185,7 +182,7 @@ class VMWareAddNode(object): '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_disk_type': 'eagerZeroedThick', 'container_storage_glusterfs_timeout': '', 'heketi_admin_key': '', 'heketi_user_key': '', @@ -210,7 +207,7 @@ class VMWareAddNode(object): 'app_dns_prefix': 'apps', 'vm_network': 'VM Network', 'rhel_subscription_pool': 'Employee SKU', - 'openshift_sdn':'redhat/openshift-ovs-subnet', + 'openshift_sdn': 'redhat/openshift-ovs-subnet', 'compute_nodes': '2', 'storage_nodes': '3', 'cns_automation_config_file_path': '', @@ -235,7 +232,7 @@ class VMWareAddNode(object): config.read(vmware_ini_path) # apply defaults - for k,v in defaults['vmware'].items(): + for k, v in defaults['vmware'].items(): if not config.has_option('vmware', k): config.set('vmware', k, str(v)) @@ -276,8 +273,8 @@ class VMWareAddNode(object): 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.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') @@ -290,7 +287,7 @@ class VMWareAddNode(object): 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.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( @@ -317,7 +314,7 @@ class VMWareAddNode(object): self.node_type = config.get('vmware', 'node_type') self.node_number = config.get('vmware', 'node_number') self.tag = config.get('vmware', 'tag') - err_count=0 + err_count = 0 if 'storage' in self.node_type: if self.node_number < 3: @@ -335,7 +332,7 @@ class VMWareAddNode(object): 'dns_zone': self.dns_zone, 'vcenter_host': self.vcenter_host, 'vcenter_password': self.vcenter_password, - 'vcenter_datacenter':self.vcenter_datacenter, + 'vcenter_datacenter': self.vcenter_datacenter, } for k, v in required_vars.items(): if v == '': @@ -358,7 +355,8 @@ class VMWareAddNode(object): "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)): + 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 " @@ -423,21 +421,21 @@ class VMWareAddNode(object): 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 "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 ) + print '\t %s: ******' % key else: - print '\t %s: %s' % ( key, val ) + print '\t %s: %s' % (key, val) print '\n' - def create_inventory_file(self): if not self.args.no_confirm: if not click.confirm( @@ -446,7 +444,7 @@ class VMWareAddNode(object): d = {'host_inventory': {}} for i in range(0, int(self.node_number)): - # Determine node_number increment on the number of nodes + # 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' @@ -470,9 +468,6 @@ class VMWareAddNode(object): 'guesttype': guest_type, 'tag': str(self.cluster_id) + '-' + self.node_type, } - # NOTE(vponomar): following will be replaced automatically in - # playbooks. - storage_address = '__%s__' % guest_name with open(self.inventory_file, 'w') as outfile: json.dump(d, outfile, indent=4, sort_keys=True) @@ -506,7 +501,6 @@ class VMWareAddNode(object): 'vcenter_template_name': self.vcenter_template_name, 'vcenter_folder': self.vcenter_folder, 'vcenter_datastore': self.vcenter_datastore, - 'vcenter_datacenter': self.vcenter_datacenter, 'vcenter_cluster': self.vcenter_cluster, 'vcenter_datacenter': self.vcenter_datacenter, 'vcenter_resource_pool': self.vcenter_resource_pool, @@ -616,11 +610,12 @@ class VMWareAddNode(object): # refresh the inventory cache to prevent stale hosts from # interferring with re-running - command='inventory/vsphere/vms/vmware_inventory.py %s' % (devnull) + 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' + command = 'rm -rf .ansible/cached_facts' os.system(command) command = ( diff --git a/deployment/inventory/vsphere/vms/vmware_inventory.py b/deployment/inventory/vsphere/vms/vmware_inventory.py index 22a2ad78..59cea196 100755 --- a/deployment/inventory/vsphere/vms/vmware_inventory.py +++ b/deployment/inventory/vsphere/vms/vmware_inventory.py @@ -26,7 +26,6 @@ from __future__ import print_function import argparse import atexit import datetime -import getpass import jinja2 import os import six @@ -34,13 +33,11 @@ import ssl import sys import uuid -from collections import defaultdict from six.moves import configparser from time import time HAS_PYVMOMI = False try: - from pyVmomi import vim from pyVim.connect import SmartConnect, Disconnect HAS_PYVMOMI = True except ImportError: @@ -51,13 +48,6 @@ try: except ImportError: import simplejson as json -hasvcr = False -try: - import vcr - hasvcr = True -except ImportError: - pass - class VMWareInventory(object): @@ -88,10 +78,8 @@ class VMWareInventory(object): iter_types = [dict, list] skip_keys = ['dynamicproperty', 'dynamictype', 'managedby', 'childtype'] - def _empty_inventory(self): - return {"_meta" : {"hostvars" : {}}} - + return {"_meta": {"hostvars": {}}} def __init__(self, load=True): self.inventory = self._empty_inventory() @@ -115,7 +103,7 @@ class VMWareInventory(object): try: text = str(text) except UnicodeEncodeError: - text = text.encode('ascii','ignore') + text = text.encode('ascii', 'ignore') print(text) def show(self): @@ -128,10 +116,8 @@ class VMWareInventory(object): data_to_print = self.inventory return json.dumps(data_to_print, indent=2) - def is_cache_valid(self): - - ''' Determines if the cache files have expired, or if it is still valid ''' + """Determine if the cache files have expired or it is still valid.""" valid = False @@ -143,38 +129,29 @@ class VMWareInventory(object): return valid - def do_api_calls_update_cache(self): - - ''' Get instances and cache the data ''' + """Get instances and cache the data.""" instances = self.get_instances() self.instances = instances self.inventory = self.instances_to_inventory(instances) self.write_to_cache(self.inventory, self.cache_path_cache) - def write_to_cache(self, data, cache_path): - - ''' Dump inventory to json file ''' - + """Dump inventory to json file.""" with open(self.cache_path_cache, 'wb') as f: f.write(json.dumps(data)) - def get_inventory_from_cache(self): - - ''' Read in jsonified inventory ''' + """Read in jsonified inventory.""" jdata = None with open(self.cache_path_cache, 'rb') as f: jdata = f.read() return json.loads(jdata) - def read_settings(self): - - ''' Reads the settings from the vmware_inventory.ini file ''' + """Reads the settings from the vmware_inventory.ini file.""" scriptbasename = __file__ scriptbasename = os.path.basename(scriptbasename) @@ -185,17 +162,19 @@ class VMWareInventory(object): 'port': 443, 'username': '', 'password': '', - 'ini_path': os.path.join(os.path.dirname(__file__), '%s.ini' % scriptbasename), + 'ini_path': os.path.join( + os.path.dirname(__file__), '%s.ini' % scriptbasename), 'cache_name': 'ansible-vmware', 'cache_path': '~/.ansible/tmp', 'cache_max_age': 3600, - 'max_object_level': 1, - 'alias_pattern': '{{ config.name + "_" + config.uuid }}', - 'host_pattern': '{{ guest.ipaddress }}', - 'host_filters': '{{ guest.gueststate == "running" }}', - 'groupby_patterns': '{{ guest.guestid }},{{ "templates" if config.template else "guests"}}', - 'lower_var_keys': True } - } + 'max_object_level': 1, + 'alias_pattern': '{{ config.name + "_" + config.uuid }}', + 'host_pattern': '{{ guest.ipaddress }}', + 'host_filters': '{{ guest.gueststate == "running" }}', + 'groupby_patterns': ('{{ guest.guestid }},{{ "templates" if ' + 'config.template else "guests"}}'), + 'lower_var_keys': True, + }} if six.PY3: config = configparser.ConfigParser() @@ -203,12 +182,14 @@ class VMWareInventory(object): 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)) + 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'].iteritems(): + for k, v in defaults['vmware'].items(): if not config.has_option('vmware', k): config.set('vmware', k, str(v)) @@ -223,10 +204,14 @@ class VMWareInventory(object): self.cache_max_age = int(config.getint('vmware', 'cache_max_age')) # mark the connection info - self.server = os.environ.get('VMWARE_SERVER', config.get('vmware', 'server')) - self.port = int(os.environ.get('VMWARE_PORT', config.get('vmware', 'port'))) - self.username = os.environ.get('VMWARE_USERNAME', config.get('vmware', 'username')) - self.password = os.environ.get('VMWARE_PASSWORD', config.get('vmware', 'password')) + self.server = os.environ.get( + 'VMWARE_SERVER', config.get('vmware', 'server')) + self.port = int(os.environ.get( + 'VMWARE_PORT', config.get('vmware', 'port'))) + self.username = os.environ.get( + 'VMWARE_USERNAME', config.get('vmware', 'username')) + self.password = os.environ.get( + 'VMWARE_PASSWORD', config.get('vmware', 'password')) # behavior control self.maxlevel = int(config.get('vmware', 'max_object_level')) @@ -237,41 +222,44 @@ class VMWareInventory(object): else: self.lowerkeys = False - self.host_filters = list(config.get('vmware', 'host_filters').split(',')) - self.groupby_patterns = list(config.get('vmware', 'groupby_patterns').split(',')) + self.host_filters = list( + config.get('vmware', 'host_filters').split(',')) + self.groupby_patterns = list( + config.get('vmware', 'groupby_patterns').split(',')) # save the config self.config = config - def parse_cli_args(self): + """Command line argument processing.""" - ''' Command line argument processing ''' - - parser = argparse.ArgumentParser(description='Produce an Ansible Inventory file based on PyVmomi') + parser = argparse.ArgumentParser( + description='Produce an Ansible Inventory file based on PyVmomi') parser.add_argument('--debug', action='store_true', default=False, - help='show debug info') + help='show debug info') parser.add_argument('--list', action='store_true', default=True, - help='List instances (default: True)') - parser.add_argument('--host', action='store', - help='Get all the variables about a specific instance') - parser.add_argument('--refresh-cache', action='store_true', default=False, - help='Force refresh of cache by making API requests to VSphere (default: False - use cache files)') + help='List instances (default: True)') + parser.add_argument( + '--host', action='store', + help='Get all the variables about a specific instance') + parser.add_argument( + '--refresh-cache', action='store_true', default=False, + help=("Force refresh of cache by making API requests to VSphere " + "(default: False - use cache files)")) parser.add_argument('--max-instances', default=None, type=int, - help='maximum number of instances to retrieve') + help='maximum number of instances to retrieve') self.args = parser.parse_args() - def get_instances(self): + """Get a list of vm instances with pyvmomi.""" - ''' Get a list of vm instances with pyvmomi ''' - - instances = [] - - kwargs = {'host': self.server, - 'user': self.username, - 'pwd': self.password, - 'port': int(self.port) } + instances = [] + kwargs = { + 'host': self.server, + 'user': self.username, + 'pwd': self.password, + 'port': int(self.port), + } if hasattr(ssl, 'SSLContext'): # older ssl libs do not have an SSLContext method: @@ -287,17 +275,15 @@ class VMWareInventory(object): self.debugl("### INSTANCES RETRIEVED") return instances - def _get_instances(self, inkwargs): - - ''' Make API calls ''' + """Make API calls.""" instances = [] si = SmartConnect(**inkwargs) if not si: print("Could not connect to the specified host using specified " - "username and password") + "username and password") return -1 atexit.register(Disconnect, si) content = si.RetrieveContent() @@ -306,13 +292,12 @@ class VMWareInventory(object): if self.args.max_instances: if len(instances) >= (self.args.max_instances+1): instances = instances[0:(self.args.max_instances+1)] - instance_tuples = [] - for instance in sorted(instances): + instance_tuples = [] + for instance in sorted(instances): ifacts = self.facts_from_vobj(instance) instance_tuples.append((instance, ifacts)) return instance_tuples - def _get_instances_from_children(self, child): instances = [] @@ -339,22 +324,19 @@ class VMWareInventory(object): self.debugl("ELSE ...") try: self.debugl(child.__dict__) - except Exception as e: + except Exception: pass self.debugl(child) return instances - def instances_to_inventory(self, instances): - - ''' Convert a list of vm objects into a json compliant inventory ''' + """Convert a list of vm objects into a json compliant inventory.""" inventory = self._empty_inventory() inventory['all'] = {} inventory['all']['hosts'] = [] - last_idata = None - total = len(instances) - for idx,instance in enumerate(instances): + + for idx, instance in enumerate(instances): # make a unique id for this object to avoid vmware's # numerous uuid's which aren't all unique. @@ -367,27 +349,30 @@ class VMWareInventory(object): inventory['_meta']['hostvars'][thisid]['ansible_uuid'] = thisid # Make a map of the uuid to the name the user wants - name_mapping = self.create_template_mapping(inventory, - self.config.get('vmware', 'alias_pattern')) + name_mapping = self.create_template_mapping( + inventory, self.config.get('vmware', 'alias_pattern')) # Make a map of the uuid to the ssh hostname the user wants - host_mapping = self.create_template_mapping(inventory, - self.config.get('vmware', 'host_pattern')) + host_mapping = self.create_template_mapping( + inventory, self.config.get('vmware', 'host_pattern')) # Reset the inventory keys - for k,v in name_mapping.iteritems(): + for k, v in name_mapping.items(): # set ansible_host (2.x) inventory['_meta']['hostvars'][k]['ansible_host'] = host_mapping[k] + # 1.9.x backwards compliance - inventory['_meta']['hostvars'][k]['ansible_ssh_host'] = host_mapping[k] + inventory['_meta']['hostvars'][k]['ansible_ssh_host'] = ( + host_mapping[k]) if k == v: continue # add new key inventory['all']['hosts'].append(v) - inventory['_meta']['hostvars'][v] = inventory['_meta']['hostvars'][k] + inventory['_meta']['hostvars'][v] = ( + inventory['_meta']['hostvars'][k]) # cleanup old key inventory['all']['hosts'].remove(k) @@ -419,8 +404,9 @@ class VMWareInventory(object): if not hf: continue self.debugl('FILTER: %s' % hf) - filter_map = self.create_template_mapping(inventory, hf, dtype='boolean') - for k,v in filter_map.iteritems(): + filter_map = self.create_template_mapping( + inventory, hf, dtype='boolean') + for k, v in filter_map.items(): if not v: # delete this host inventory['all']['hosts'].remove(k) @@ -433,7 +419,7 @@ class VMWareInventory(object): # Create groups for gbp in self.groupby_patterns: groupby_map = self.create_template_mapping(inventory, gbp) - for k,v in groupby_map.iteritems(): + for k, v in groupby_map.items(): if v not in inventory: inventory[v] = {} inventory[v]['hosts'] = [] @@ -442,13 +428,11 @@ class VMWareInventory(object): return inventory - def create_template_mapping(self, inventory, pattern, dtype='string'): - - ''' Return a hash of uuid to templated string from pattern ''' + """Return a hash of uuid to templated string from pattern.""" mapping = {} - for k,v in inventory['_meta']['hostvars'].iteritems(): + for k, v in inventory['_meta']['hostvars'].items(): t = jinja2.Template(pattern) newkey = None try: @@ -456,7 +440,6 @@ class VMWareInventory(object): newkey = newkey.strip() except Exception as e: self.debugl(e) - #import epdb; epdb.st() if not newkey: continue elif dtype == 'integer': @@ -471,10 +454,8 @@ class VMWareInventory(object): mapping[k] = newkey return mapping - def facts_from_vobj(self, vobj, level=0): - - ''' Traverse a VM object and return a json compliant data structure ''' + """Traverse a VM object and return a json compliant data structure.""" # pyvmomi objects are not yet serializable, but may be one day ... # https://github.com/vmware/pyvmomi/issues/21 @@ -507,12 +488,10 @@ class VMWareInventory(object): k = k.lower() rdata[k] = self._process_object_types(v, level=level) - else: - methods = dir(vobj) methods = [str(x) for x in methods if not x.startswith('_')] - methods = [x for x in methods if not x in self.bad_types] + methods = [x for x in methods if x not in self.bad_types] methods = sorted(methods) for method in methods: @@ -523,7 +502,7 @@ class VMWareInventory(object): # Attempt to get the method, skip on fail try: methodToCall = getattr(vobj, method) - except Exception as e: + except Exception: continue # Skip callable methods @@ -535,15 +514,13 @@ class VMWareInventory(object): rdata[method] = self._process_object_types( methodToCall, - level=((level - 1) if method in ('guest', 'net') else level)) + level=((level - 1) + if method in ('guest', 'net') else level)) return rdata - def _process_object_types(self, vobj, level=0): - rdata = {} - self.debugl("PROCESSING: %s" % vobj) if type(vobj) in self.safe_types: @@ -581,9 +558,7 @@ class VMWareInventory(object): return rdata def get_host_info(self, host): - - ''' Return hostvars for a single host ''' - + """Return hostvars for a single host.""" return self.inventory['_meta']['hostvars'][host] diff --git a/deployment/ocp-on-vmware.py b/deployment/ocp-on-vmware.py index 3ba0a03a..c8872659 100755 --- a/deployment/ocp-on-vmware.py +++ b/deployment/ocp-on-vmware.py @@ -16,49 +16,49 @@ 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 + 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 def __init__(self): self._parse_cli_args() @@ -132,7 +132,7 @@ class OCPOnVMWare(object): 'vcenter_folder': 'ocp', 'vcenter_resource_pool': '/Resources/OCP3', 'app_dns_prefix': 'apps', - 'vm_network':'VM Network', + 'vm_network': 'VM Network', 'cns_automation_config_file_path': '', 'docker_registry_url': '', 'docker_additional_registries': '', @@ -163,20 +163,20 @@ class OCPOnVMWare(object): config.read(self.vmware_ini_path) # apply defaults - for k,v in defaults['vmware'].iteritems(): + 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') + 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.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') @@ -189,7 +189,7 @@ class OCPOnVMWare(object): 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.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( @@ -225,7 +225,7 @@ class OCPOnVMWare(object): 'docker_storage,docker_image_availability,disk_availability') self.disable_yum_update_and_reboot = config.get( 'vmware', 'disable_yum_update_and_reboot').strip() or 'no' - err_count=0 + err_count = 0 required_vars = { 'vcenter_datacenter': self.vcenter_datacenter, @@ -286,8 +286,8 @@ class OCPOnVMWare(object): 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) + 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 @@ -305,9 +305,9 @@ class OCPOnVMWare(object): for each_section in config.sections(): for (key, val) in config.items(each_section): if 'pass' in key: - print '\t %s: ******' % ( key ) + print '\t %s: ******' % (key) else: - print '\t %s: %s' % ( key, val ) + print '\t %s: %s' % (key, val) print '\n' def _create_inventory_file(self): @@ -384,7 +384,7 @@ class OCPOnVMWare(object): tags = ",".join(tags) # remove any cached facts to prevent stale data during a re-run - command='rm -rf .ansible/cached_facts' + command = 'rm -rf .ansible/cached_facts' os.system(command) playbook_vars_dict = { diff --git a/deployment/playbooks/library/vmware_folder.py b/deployment/playbooks/library/vmware_folder.py index 399f1d04..d223768e 100644 --- a/deployment/playbooks/library/vmware_folder.py +++ b/deployment/playbooks/library/vmware_folder.py @@ -18,11 +18,13 @@ # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . -ANSIBLE_METADATA = {'status': ['preview'], - 'supported_by': 'community', - 'version': '1.0'} +ANSIBLE_METADATA = { + 'status': ['preview'], + 'supported_by': 'community', + 'version': '1.0', +} -DOCUMENTATION = ''' +DOCUMENTATION = """ --- module: vmware_folder short_description: Add/remove folders to/from vCenter @@ -68,9 +70,9 @@ options: - 'present' - 'absent' extends_documentation_fragment: vmware.documentation -''' -EXAMPLES = ''' + +EXAMPLES = # Create a folder - name: Add a folder to vCenter vmware_folder: @@ -81,9 +83,9 @@ EXAMPLES = ''' cluster: cluster folder: folder state: present -''' -RETURN = """ + +RETURN = instance: descripton: metadata about the new folder returned: always @@ -97,9 +99,9 @@ try: except ImportError: HAS_PYVMOMI = False -from ansible.module_utils.vmware import get_all_objs, connect_to_api, vmware_argument_spec, find_datacenter_by_name, \ - find_cluster_by_name_datacenter, wait_for_task -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils import basic # noqa +from ansible.module_utils import vmware # noqa + class VMwareFolder(object): def __init__(self, module): @@ -118,11 +120,13 @@ class VMwareFolder(object): self.folder_name = None self.folder_expanded = None self.folder_full_path = [] - self.content = connect_to_api(module) + self.content = vmware.connect_to_api(module) def find_host_by_cluster_datacenter(self): - self.dc_obj = find_datacenter_by_name(self.content, self.datacenter) - self.cluster_obj = find_cluster_by_name_datacenter(self.dc_obj, self.cluster) + self.dc_obj = vmware.find_datacenter_by_name( + self.content, self.datacenter) + self.cluster_obj = vmware.find_cluster_by_name_datacenter( + self.dc_obj, self.cluster) for host in self.cluster_obj.host: if host.name == self.hostname: @@ -134,13 +138,13 @@ class VMwareFolder(object): fold_obj = None self.folder_expanded = self.folder.split("/") last_e = self.folder_expanded.pop() - fold_obj = self.get_obj([vim.Folder],last_e) + fold_obj = self.get_obj([vim.Folder], last_e) if fold_obj: return fold_obj if fold_obj is None: return fold_obj - def get_obj(self, vimtype, name, return_all = False): + def get_obj(self, vimtype, name, return_all=False): obj = list() container = self.content.viewManager.CreateContainerView( self.content.rootFolder, vimtype, True) @@ -171,57 +175,58 @@ class VMwareFolder(object): 'absent': self.state_add_folder, } } - folder_states[self.state][self.check_folder_state()]() - except vmodl.RuntimeFault as runtime_fault: - self.module.fail_json(msg = runtime_fault.msg) + self.module.fail_json(msg=runtime_fault.msg) except vmodl.MethodFault as method_fault: - self.module.fail_json(msg = method_fault.msg) + self.module.fail_json(msg=method_fault.msg) except Exception as e: - self.module.fail_json(msg = str(e)) + self.module.fail_json(msg=str(e)) def state_exit_unchanged(self): - self.module.exit_json(changed = False) + self.module.exit_json(changed=False) def state_remove_folder(self): changed = True result = None self.folder_expanded = self.folder.split("/") f = self.folder_expanded.pop() - task = self.get_obj([vim.Folder],f).Destroy() + task = self.get_obj([vim.Folder], f).Destroy() try: - success, result = wait_for_task(task) - - except: - self.module.fail_json(msg = "Failed to remove folder '%s' '%s'" % (self.folder,folder)) + success, result = vmware.wait_for_task(task) + except Exception: + self.module.fail_json( + msg="Failed to remove folder '%s'" % self.folder) - self.module.exit_json(changed = changed, result = str(result)) + self.module.exit_json(changed=changed, result=str(result)) def state_add_folder(self): changed = True - result = None - self.dc_obj = find_datacenter_by_name(self.content, self.datacenter) - self.cluster_obj = find_cluster_by_name_datacenter(self.dc_obj, self.cluster) + self.dc_obj = vmware.find_datacenter_by_name( + self.content, self.datacenter) + self.cluster_obj = vmware.find_cluster_by_name_datacenter( + self.dc_obj, self.cluster) self.folder_expanded = self.folder.split("/") index = 0 for f in self.folder_expanded: - if not self.get_obj([vim.Folder],f): + if not self.get_obj([vim.Folder], f): if index == 0: - #First object gets created on the datacenter - task = self.dc_obj.vmFolder.CreateFolder(name=f) + # First object gets created on the datacenter + self.dc_obj.vmFolder.CreateFolder(name=f) else: - parent_f = self.get_obj([vim.Folder],self.folder_expanded[index - 1]) - task = parent_f.CreateFolder(name=f) + parent_f = self.get_obj( + [vim.Folder], self.folder_expanded[index - 1]) + parent_f.CreateFolder(name=f) index = index + 1 - self.module.exit_json(changed = changed) + self.module.exit_json(changed=changed) def check_folder_state(self): - self.host_obj, self.cluster_obj = self.find_host_by_cluster_datacenter() + self.host_obj, self.cluster_obj = ( + self.find_host_by_cluster_datacenter()) self.folder_obj = self.select_folder(self.host_obj) if self.folder_obj is None: @@ -231,19 +236,23 @@ class VMwareFolder(object): def main(): - argument_spec = vmware_argument_spec() - argument_spec.update(dict(datacenter = dict(required = True, type = 'str'), - cluster = dict(required = True, type = 'str'), - folder = dict(required=True, type='str'), - hostname = dict(required = True, type = 'str'), - username = dict(required = True, type = 'str'), - password = dict(required = True, type = 'str', no_log = True), - state = dict(default = 'present', choices = ['present', 'absent'], type = 'str'))) - - module = AnsibleModule(argument_spec = argument_spec, supports_check_mode = True) + argument_spec = vmware.vmware_argument_spec() + argument_spec.update(dict(datacenter=dict(required=True, type='str'), + cluster=dict(required=True, type='str'), + folder=dict(required=True, type='str'), + hostname=dict(required=True, type='str'), + username=dict(required=True, type='str'), + password=dict( + required=True, type='str', no_log=True), + state=dict( + default='present', + choices=['present', 'absent'], type='str'))) + + module = basic.AnsibleModule( + argument_spec=argument_spec, supports_check_mode=True) if not HAS_PYVMOMI: - module.fail_json(msg = 'pyvmomi is required for this module') + module.fail_json(msg='pyvmomi is required for this module') vmware_folder = VMwareFolder(module) vmware_folder.process_state() diff --git a/deployment/playbooks/library/vmware_resource_pool.py b/deployment/playbooks/library/vmware_resource_pool.py index b4b891ee..7dab5526 100644 --- a/deployment/playbooks/library/vmware_resource_pool.py +++ b/deployment/playbooks/library/vmware_resource_pool.py @@ -18,11 +18,13 @@ # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . -ANSIBLE_METADATA = {'status': ['preview'], - 'supported_by': 'community', - 'version': '1.0'} +ANSIBLE_METADATA = { + 'status': ['preview'], + 'supported_by': 'community', + 'version': '1.0', +} -DOCUMENTATION = ''' +DOCUMENTATION = """ --- module: vmware_resource_pool short_description: Add/remove resource pools to/from vCenter @@ -62,15 +64,19 @@ options: required: True cpu_expandable_reservations: description: - - In a resource pool with an expandable reservation, the reservation on a resource pool can grow beyond the specified value. + - In a resource pool with an expandable reservation, + the reservation on a resource pool can grow beyond + the specified value. default: True cpu_reservation: description: - - Amount of resource that is guaranteed available to the virtual machine or resource pool. + - Amount of resource that is guaranteed available to + the virtual machine or resource pool. default: 0 cpu_limit: description: - - The utilization of a virtual machine/resource pool will not exceed this limit, even if there are available resources. + - The utilization of a virtual machine/resource pool will not + exceed this limit, even if there are available resources. default: -1 (No limit) cpu_shares: description: @@ -83,15 +89,19 @@ options: default: Normal mem_expandable_reservations: description: - - In a resource pool with an expandable reservation, the reservation on a resource pool can grow beyond the specified value. + - In a resource pool with an expandable reservation, + the reservation on a resource pool can grow beyond + the specified value. default: True mem_reservation: description: - - Amount of resource that is guaranteed available to the virtual machine or resource pool. + - Amount of resource that is guaranteed available to + the virtual machine or resource pool. default: 0 mem_limit: description: - - The utilization of a virtual machine/resource pool will not exceed this limit, even if there are available resources. + - The utilization of a virtual machine/resource pool will not + exceed this limit, even if there are available resources. default: -1 (No limit) mem_shares: description: @@ -110,9 +120,9 @@ options: - 'present' - 'absent' extends_documentation_fragment: vmware.documentation -''' -EXAMPLES = ''' + +EXAMPLES = # Create a resource pool - name: Add resource pool to vCenter vmware_resource_pool: @@ -131,9 +141,9 @@ EXAMPLES = ''' cpu_reservation: 0 cpu_expandable_reservations: True state: present -''' -RETURN = """ + +RETURN = instance: descripton: metadata about the new resource pool returned: always @@ -147,9 +157,9 @@ try: except ImportError: HAS_PYVMOMI = False -from ansible.module_utils.vmware import get_all_objs, connect_to_api, vmware_argument_spec, find_datacenter_by_name, \ - find_cluster_by_name_datacenter, wait_for_task -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils import basic # noqa +from ansible.module_utils import vmware # noqa + class VMwareResourcePool(object): def __init__(self, module): @@ -164,20 +174,24 @@ class VMwareResourcePool(object): self.mem_shares = module.params['mem_shares'] self.mem_limit = module.params['mem_limit'] self.mem_reservation = module.params['mem_reservation'] - self.mem_expandable_reservations = module.params['cpu_expandable_reservations'] + self.mem_expandable_reservations = ( + module.params['cpu_expandable_reservations']) self.cpu_shares = module.params['cpu_shares'] self.cpu_limit = module.params['cpu_limit'] self.cpu_reservation = module.params['cpu_reservation'] - self.cpu_expandable_reservations = module.params['cpu_expandable_reservations'] + self.cpu_expandable_reservations = ( + module.params['cpu_expandable_reservations']) self.dc_obj = None self.cluster_obj = None self.host_obj = None self.resource_pool_obj = None - self.content = connect_to_api(module) + self.content = vmware.connect_to_api(module) def find_host_by_cluster_datacenter(self): - self.dc_obj = find_datacenter_by_name(self.content, self.datacenter) - self.cluster_obj = find_cluster_by_name_datacenter(self.dc_obj, self.cluster) + self.dc_obj = vmware.find_datacenter_by_name( + self.content, self.datacenter) + self.cluster_obj = vmware.find_cluster_by_name_datacenter( + self.dc_obj, self.cluster) for host in self.cluster_obj.host: if host.name == self.hostname: @@ -185,17 +199,13 @@ class VMwareResourcePool(object): return None, self.cluster - def select_resource_pool(self, host): pool_obj = None - resource_pools = get_all_objs(self.content, [vim.ResourcePool]) + resource_pools = vmware.get_all_objs(self.content, [vim.ResourcePool]) pool_selections = self.get_obj( - [vim.ResourcePool], - self.resource_pool, - return_all = True - ) + [vim.ResourcePool], self.resource_pool, return_all=True) if pool_selections: for p in pool_selections: if p in resource_pools: @@ -203,7 +213,7 @@ class VMwareResourcePool(object): break return pool_obj - def get_obj(self, vimtype, name, return_all = False): + def get_obj(self, vimtype, name, return_all=False): obj = list() container = self.content.viewManager.CreateContainerView( self.content.rootFolder, vimtype, True) @@ -238,14 +248,14 @@ class VMwareResourcePool(object): rp_states[self.state][self.check_rp_state()]() except vmodl.RuntimeFault as runtime_fault: - self.module.fail_json(msg = runtime_fault.msg) + self.module.fail_json(msg=runtime_fault.msg) except vmodl.MethodFault as method_fault: - self.module.fail_json(msg = method_fault.msg) + self.module.fail_json(msg=method_fault.msg) except Exception as e: - self.module.fail_json(msg = str(e)) + self.module.fail_json(msg=str(e)) def state_exit_unchanged(self): - self.module.exit_json(changed = False) + self.module.exit_json(changed=False) def state_remove_rp(self): changed = True @@ -253,25 +263,25 @@ class VMwareResourcePool(object): resource_pool = self.select_resource_pool(self.host_obj) try: task = self.resource_pool_obj.Destroy() - success, result = wait_for_task(task) + success, result = vmware.wait_for_task(task) - except: - self.module.fail_json(msg = "Failed to remove resource pool '%s' '%s'" % (self.resource_pool,resource_pool)) - self.module.exit_json(changed = changed, result = str(result)) + except Exception: + self.module.fail_json( + msg="Failed to remove resource pool '%s' '%s'" % ( + self.resource_pool, resource_pool)) + self.module.exit_json(changed=changed, result=str(result)) def state_add_rp(self): changed = True - result = None - root_resource_pool = None - rp_spec=vim.ResourceConfigSpec() - cpu_alloc=vim.ResourceAllocationInfo() + rp_spec = vim.ResourceConfigSpec() + cpu_alloc = vim.ResourceAllocationInfo() cpu_alloc.expandableReservation = self.cpu_expandable_reservations cpu_alloc.limit = int(self.cpu_limit) cpu_alloc.reservation = int(self.cpu_reservation) cpu_alloc_shares = vim.SharesInfo() cpu_alloc_shares.level = self.cpu_shares - cpu_alloc.shares = cpu_alloc_shares + cpu_alloc.shares = cpu_alloc_shares rp_spec.cpuAllocation = cpu_alloc mem_alloc = vim.ResourceAllocationInfo() mem_alloc.limit = int(self.mem_limit) @@ -282,16 +292,19 @@ class VMwareResourcePool(object): mem_alloc.shares = mem_alloc_shares rp_spec.memoryAllocation = mem_alloc - self.dc_obj = find_datacenter_by_name(self.content, self.datacenter) - self.cluster_obj = find_cluster_by_name_datacenter(self.dc_obj, self.cluster) + self.dc_obj = vmware.find_datacenter_by_name( + self.content, self.datacenter) + self.cluster_obj = vmware.find_cluster_by_name_datacenter( + self.dc_obj, self.cluster) rootResourcePool = self.cluster_obj.resourcePool - task = rootResourcePool.CreateResourcePool(self.resource_pool, rp_spec) + rootResourcePool.CreateResourcePool(self.resource_pool, rp_spec) - self.module.exit_json(changed = changed) + self.module.exit_json(changed=changed) def check_rp_state(self): - self.host_obj, self.cluster_obj = self.find_host_by_cluster_datacenter() + self.host_obj, self.cluster_obj = ( + self.find_host_by_cluster_datacenter()) self.resource_pool_obj = self.select_resource_pool(self.host_obj) if self.resource_pool_obj is None: @@ -301,30 +314,41 @@ class VMwareResourcePool(object): def main(): - argument_spec = vmware_argument_spec() - argument_spec.update(dict(datacenter = dict(required = True, type = 'str'), - cluster = dict(required = True, type = 'str'), - resource_pool = dict(required=True, type='str'), - hostname = dict(required = True, type = 'str'), - username = dict(required = True, type = 'str'), - password = dict(required = True, type = 'str', no_log = True), - mem_shares = dict(type = 'str', default = "normal", choices = ['high','custom','normal', 'low']), - mem_limit = dict(type = 'int',default = "-1"), - mem_reservation = dict(type = 'int',default = "0"), - mem_expandable_reservations = dict(type = 'bool',default = "True"), - cpu_shares = dict(type = 'str', default = "normal", choices = ['high','custom','normal', 'low']), - cpu_limit = dict(type = 'int',default = "-1"), - cpu_reservation = dict(type = 'int',default = "0"), - cpu_expandable_reservations = dict(type = 'bool',default = "True"), - state = dict(default = 'present', choices = ['present', 'absent'], type = 'str'))) - - module = AnsibleModule(argument_spec = argument_spec, supports_check_mode = True) + argument_spec = vmware.vmware_argument_spec() + argument_spec.update(dict(datacenter=dict(required=True, type='str'), + cluster=dict(required=True, type='str'), + resource_pool=dict(required=True, type='str'), + hostname=dict(required=True, type='str'), + username=dict(required=True, type='str'), + password=dict( + required=True, type='str', no_log=True), + mem_shares=dict( + type='str', default="normal", + choices=['high', 'custom', 'normal', 'low']), + mem_limit=dict(type='int', default="-1"), + mem_reservation=dict(type='int', default="0"), + mem_expandable_reservations=dict( + type='bool', default="True"), + cpu_shares=dict( + type='str', default="normal", + choices=['high', 'custom', 'normal', 'low']), + cpu_limit=dict(type='int', default="-1"), + cpu_reservation=dict(type='int', default="0"), + cpu_expandable_reservations=dict( + type='bool', default="True"), + state=dict( + default='present', + choices=['present', 'absent'], type='str'))) + + module = basic.AnsibleModule( + argument_spec=argument_spec, supports_check_mode=True) if not HAS_PYVMOMI: - module.fail_json(msg = 'pyvmomi is required for this module') + module.fail_json(msg='pyvmomi is required for this module') vmware_rp = VMwareResourcePool(module) vmware_rp.process_state() + if __name__ == '__main__': main() diff --git a/deployment/playbooks/roles/prerequisites/library/rpm_q.py b/deployment/playbooks/roles/prerequisites/library/rpm_q.py index 3dec50fc..afc261ba 100644 --- a/deployment/playbooks/roles/prerequisites/library/rpm_q.py +++ b/deployment/playbooks/roles/prerequisites/library/rpm_q.py @@ -59,7 +59,8 @@ def main(): if rc != 0: if state == 'present': - module.fail_json(msg="%s is not installed" % name, stdout=out, stderr=err, rc=rc) + module.fail_json(msg="%s is not installed" % name, + stdout=out, stderr=err, rc=rc) else: module.exit_json(changed=False) elif state == 'present': -- cgit