Envirionment variable support in GCE inventory plugin.

This commit is contained in:
Luke Sneeringer 2014-08-01 16:12:57 -05:00
parent 3e45791d05
commit f706eba4a5

View file

@ -107,27 +107,38 @@ class GceInventory(object):
sys.exit(0) sys.exit(0)
# Otherwise, assume user wants all instances grouped # Otherwise, assume user wants all instances grouped
print self.json_format_dict(self.group_instances()) print(self.json_format_dict(self.group_instances()))
sys.exit(0) sys.exit(0)
def get_gce_driver(self): def get_gce_driver(self):
'''Determine GCE authorization settings and return libcloud driver.''' """Determine the GCE authorization settings and return a
libcloud driver.
"""
gce_ini_default_path = os.path.join( gce_ini_default_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)), "gce.ini") os.path.dirname(os.path.realpath(__file__)), "gce.ini")
gce_ini_path = os.environ.get('GCE_INI_PATH', gce_ini_default_path) gce_ini_path = os.environ.get('GCE_INI_PATH', gce_ini_default_path)
config = ConfigParser.SafeConfigParser() # Create a ConfigParser.
# This provides empty defaults to each key, so that environment
# variable configuration (as opposed to INI configuration) is able
# to work.
config = ConfigParser.SafeConfigParser(defaults={
'gce_service_account_email_address': '',
'gce_service_account_pem_file_path': '',
'gce_project_id': '',
'libcloud_secrets': '',
})
if 'gce' not in config.sections():
config.add_section('gce')
config.read(gce_ini_path) config.read(gce_ini_path)
# the GCE params in 'secrets.py' will override these # Attempt to get GCE params from a configuration file, if one
# exists.
secrets_path = config.get('gce', 'libcloud_secrets') secrets_path = config.get('gce', 'libcloud_secrets')
secrets_found = False secrets_found = False
try: try:
import secrets import secrets
args = getattr(secrets, 'GCE_PARAMS', ()) args = list(getattr(secrets, 'GCE_PARAMS', []))
kwargs = getattr(secrets, 'GCE_KEYWORD_PARAMS', {}) kwargs = getattr(secrets, 'GCE_KEYWORD_PARAMS', {})
secrets_found = True secrets_found = True
except: except:
@ -142,24 +153,31 @@ class GceInventory(object):
sys.path.append(os.path.dirname(secrets_path)) sys.path.append(os.path.dirname(secrets_path))
try: try:
import secrets import secrets
args = getattr(secrets, 'GCE_PARAMS', ()) args = list(getattr(secrets, 'GCE_PARAMS', []))
kwargs = getattr(secrets, 'GCE_KEYWORD_PARAMS', {}) kwargs = getattr(secrets, 'GCE_KEYWORD_PARAMS', {})
secrets_found = True secrets_found = True
except: except:
pass pass
if not secrets_found: if not secrets_found:
args = ( args = [
config.get('gce','gce_service_account_email_address'), config.get('gce','gce_service_account_email_address'),
config.get('gce','gce_service_account_pem_file_path') config.get('gce','gce_service_account_pem_file_path')
) ]
kwargs = {'project': config.get('gce','gce_project_id')} kwargs = {'project': config.get('gce', 'gce_project_id')}
# If the appropriate environment variables are set, they override
# other configuration; process those into our args and kwargs.
args[0] = os.environ.get('GCE_EMAIL', args[0])
args[1] = os.environ.get('GCE_PEM_FILE_PATH', args[1])
kwargs['project'] = os.environ.get('GCE_PROJECT', kwargs['project'])
# Retrieve and return the GCE driver.
gce = get_driver(Provider.GCE)(*args, **kwargs) gce = get_driver(Provider.GCE)(*args, **kwargs)
gce.connection.user_agent_append("%s/%s" % ( gce.connection.user_agent_append(
USER_AGENT_PRODUCT, USER_AGENT_VERSION)) '%s/%s' % (USER_AGENT_PRODUCT, USER_AGENT_VERSION),
)
return gce return gce
def parse_cli_args(self): def parse_cli_args(self):
''' Command line argument processing ''' ''' Command line argument processing '''