1
0
mirror of https://github.com/ansible/awx.git synced 2024-11-01 08:21:15 +03:00

Added vmware support to tasks.

This commit is contained in:
Luke Sneeringer 2014-07-16 14:42:18 -05:00
parent 89f65d8ba0
commit 7548ffc6dd
2 changed files with 100 additions and 30 deletions

View File

@ -837,19 +837,27 @@ class RunInventoryUpdate(BaseTask):
if credential:
passwords['source_username'] = credential.username
passwords['source_password'] = decrypt_field(credential, 'password')
passwords['source_host'] = credential.host
return passwords
def build_env(self, inventory_update, **kwargs):
'''
Build environment dictionary for inventory import.
'''
env = super(RunInventoryUpdate, self).build_env(inventory_update, **kwargs)
"""Build environment dictionary for inventory import.
This is the mechanism by which any data that needs to be passed
to the inventory update script is set up. In particular, this is how
inventory update is aware of its proper credentials.
"""
env = super(RunInventoryUpdate, self).build_env(inventory_update,
**kwargs)
# Pass inventory source ID to inventory script.
env['INVENTORY_SOURCE_ID'] = str(inventory_update.inventory_source_id)
# Set environment variables specific to each source.
passwords = kwargs.get('passwords', {})
if inventory_update.source == 'ec2':
env['AWS_ACCESS_KEY_ID'] = kwargs.get('passwords', {}).get('source_username', '')
env['AWS_SECRET_ACCESS_KEY'] = kwargs.get('passwords', {}).get('source_password', '')
env['AWS_ACCESS_KEY_ID'] = passwords.get('source_username', '')
env['AWS_SECRET_ACCESS_KEY'] = passwords.get('source_password', '')
env['EC2_INI_PATH'] = kwargs.get('private_data_file', '')
elif inventory_update.source == 'rax':
env['RAX_CREDS_FILE'] = kwargs.get('private_data_file', '')
@ -857,48 +865,81 @@ class RunInventoryUpdate(BaseTask):
# Set this environment variable so the vendored package won't
# complain about not being able to determine its version number.
env['PBR_VERSION'] = '0.5.21'
elif inventory_update.source == 'vmware':
env['VMWARE_HOST'] = passwords.get('source_host', '')
env['VMWARE_USER'] = passwords.get('source_username', '')
env['VMWARE_PASSWORD'] = passwords.get('source_password', '')
elif inventory_update.source == 'file':
# FIXME: Parse source_env to dict, update env.
pass
return env
def build_args(self, inventory_update, **kwargs):
'''
Build command line argument list for running inventory import.
'''
"""Build the command line argument list for running an inventory
import.
"""
# Get the inventory source and inventory.
inventory_source = inventory_update.inventory_source
inventory = inventory_source.group.inventory
# Piece together the initial command to run via. the shell.
args = ['awx-manage', 'inventory_import']
args.extend(['--inventory-id', str(inventory.pk)])
# Add appropriate arguments for overwrite if the inventory_update
# object calls for it.
if inventory_update.overwrite:
args.append('--overwrite')
if inventory_update.overwrite_vars:
args.append('--overwrite-vars')
args.append('--source')
if inventory_update.source == 'ec2':
ec2_path = self.get_path_to('..', 'plugins', 'inventory', 'ec2.py')
args.append(ec2_path)
args.extend(['--enabled-var', settings.EC2_ENABLED_VAR])
args.extend(['--enabled-value', settings.EC2_ENABLED_VALUE])
args.extend(['--group-filter', settings.EC2_GROUP_FILTER])
args.extend(['--host-filter', settings.EC2_HOST_FILTER])
if settings.EC2_EXCLUDE_EMPTY_GROUPS:
# If this is a cloud-based inventory (e.g. from AWS, Rackspace, etc.)
# then we need to set some extra flags based on settings in
# Tower.
#
# These settings are "per-cloud-provider"; it's entirely possible that
# they will be different between cloud providers if a Tower user
# actively uses more than one.
if inventory_update.source in ('ec2', 'rax', 'vmware'):
# We need to reference the source's code frequently, assign it
# to a shorter variable. :)
src = inventory_update.source
# Get the path to the inventory plugin, and append it to our
# arguments.
plugin_path = self.get_path_to('..', 'plugins', 'inventory',
'%s.py' % src)
args.append(plugin_path)
# Add several options to the shell arguments based on the
# cloud-provider-specific setting in the Tower configuration.
args.extend(['--enabled-var',
getattr(settings, '%s_ENABLED_VAR' % src.upper())])
args.extend(['--enabled-value',
getattr(settings, '%s_ENABLED_VALUE' % src.upper())])
args.extend(['--group-filter',
getattr(settings, '%s_GROUP_FILTER' % src.upper())])
args.extend(['--host-filter',
getattr(settings, '%s_HOST_FILTER' % src.upper())])
# We might have a flag set to exclude empty groups; if we do,
# add that flag to the shell arguments.
if getattr(settings, '%s_EXCLUDE_EMPTY_GROUPS' % src.upper()):
args.append('--exclude-empty-groups')
if settings.EC2_INSTANCE_ID_VAR:
args.extend(['--instance-id-var', settings.EC2_INSTANCE_ID_VAR])
elif inventory_update.source == 'rax':
rax_path = self.get_path_to('..', 'plugins', 'inventory', 'rax.py')
args.append(rax_path)
args.extend(['--enabled-var', settings.RAX_ENABLED_VAR])
args.extend(['--enabled-value', settings.RAX_ENABLED_VALUE])
args.extend(['--group-filter', settings.RAX_GROUP_FILTER])
args.extend(['--host-filter', settings.RAX_HOST_FILTER])
if settings.RAX_EXCLUDE_EMPTY_GROUPS:
args.append('--exclude-empty-groups')
if settings.RAX_INSTANCE_ID_VAR:
args.extend(['--instance-id-var', settings.RAX_INSTANCE_ID_VAR])
# We might have a flag for an instance ID variable; if we do,
# add it to the shell arguments.
if getattr(settings, '%s_INSTANCE_ID_VAR' % src.upper()):
args.extend([
'--instance-id-var',
getattr(settings, '%s_INSTANCE_ID_VAR' % src.upper()),
])
elif inventory_update.source == 'file':
args.append(inventory_update.source_path)
verbosity = getattr(settings, 'INVENTORY_UPDATE_VERBOSITY', 1)
args.append('-v%d' % verbosity)
if settings.DEBUG:

View File

@ -347,6 +347,10 @@ RAX_GROUP_FILTER = r'^(?!instance-.+).+$'
RAX_HOST_FILTER = r'^.+$'
RAX_EXCLUDE_EMPTY_GROUPS = True
# ----------------
# -- Amazon EC2 --
# ----------------
# AWS does not appear to provide pretty region names via any API, so store the
# list of names here. The available region IDs will be pulled from boto.
# http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region
@ -381,6 +385,31 @@ EC2_GROUP_FILTER = r'^(?!i-[a-f0-9]{8,}).+$'
EC2_HOST_FILTER = r'^.+(?<!rds\.amazonaws\.com)$'
EC2_EXCLUDE_EMPTY_GROUPS = True
# ------------
# -- VMWare --
# ------------
VMWARE_REGION_NAMES = {}
VMWARE_REGIONS_BLACKLIST = []
# Inventory variable name/values for determining whether a host is
# active in vSphere.
VMWARE_ENABLED_VAR = 'status'
VMWARE_ENABLED_VALUE = 'POWERED ON'
# Inventory variable name containing the unique instance ID.
VMWARE_INSTANCE_ID_VAR = 'guest_id'
# Filter for allowed group and host names when importing inventory
# from EC2.
VMWARE_GROUP_FILTER = r'^.+$'
VMWARE_HOST_FILTER = r'^.+$'
VMWARE_EXCLUDE_EMPTY_GROUPS = True
# ---------------------
# -- Activity Stream --
# ---------------------
# Defaults for enabling/disabling activity stream.
ACTIVITY_STREAM_ENABLED = True
ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC = False