summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdeployment/add-node.py149
-rwxr-xr-xdeployment/inventory/vsphere/vms/vmware_inventory.py195
-rwxr-xr-xdeployment/ocp-on-vmware.py108
-rw-r--r--deployment/playbooks/library/vmware_folder.py107
-rw-r--r--deployment/playbooks/library/vmware_resource_pool.py156
-rw-r--r--deployment/playbooks/roles/prerequisites/library/rpm_q.py3
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 <http://www.gnu.org/licenses/>.
-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 <http://www.gnu.org/licenses/>.
-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':