mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 01:47:35 -02:30
Update ec2 inventory script from core, no more tower-specific changes.
This commit is contained in:
@@ -815,6 +815,7 @@ class RunInventoryUpdate(BaseTask):
|
|||||||
ec2_opts.setdefault('route53', 'False')
|
ec2_opts.setdefault('route53', 'False')
|
||||||
ec2_opts.setdefault('all_instances', 'True')
|
ec2_opts.setdefault('all_instances', 'True')
|
||||||
ec2_opts.setdefault('all_rds_instances', 'False')
|
ec2_opts.setdefault('all_rds_instances', 'False')
|
||||||
|
ec2_opts.setdefault('rds', 'False')
|
||||||
ec2_opts.setdefault('nested_groups', 'True')
|
ec2_opts.setdefault('nested_groups', 'True')
|
||||||
ec2_opts.setdefault('cache_path', tempfile.mkdtemp(prefix='awx_ec2_'))
|
ec2_opts.setdefault('cache_path', tempfile.mkdtemp(prefix='awx_ec2_'))
|
||||||
ec2_opts.setdefault('cache_max_age', '300')
|
ec2_opts.setdefault('cache_max_age', '300')
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ vpc_destination_variable = ip_address
|
|||||||
# Route53, uncomment and set 'route53' to True.
|
# Route53, uncomment and set 'route53' to True.
|
||||||
route53 = False
|
route53 = False
|
||||||
|
|
||||||
|
# To exclude RDS instances from the inventory, uncomment and set to False.
|
||||||
|
#rds = False
|
||||||
|
|
||||||
# Additionally, you can specify the list of zones to exclude looking up in
|
# Additionally, you can specify the list of zones to exclude looking up in
|
||||||
# 'route53_excluded_zones' as a comma-separated list.
|
# 'route53_excluded_zones' as a comma-separated list.
|
||||||
# route53_excluded_zones = samplezone1.com, samplezone2.com
|
# route53_excluded_zones = samplezone1.com, samplezone2.com
|
||||||
@@ -59,8 +62,8 @@ cache_path = ~/.ansible/tmp
|
|||||||
|
|
||||||
# The number of seconds a cache file is considered valid. After this many
|
# The number of seconds a cache file is considered valid. After this many
|
||||||
# seconds, a new API call will be made, and the cache file will be updated.
|
# seconds, a new API call will be made, and the cache file will be updated.
|
||||||
|
# To disable the cache, set this value to 0
|
||||||
cache_max_age = 300
|
cache_max_age = 300
|
||||||
|
|
||||||
# For Ansible Tower, organize groups into a nested/hierarchy instead of a flat
|
# Organize groups into a nested/hierarchy instead of a flat namespace.
|
||||||
# namespace.
|
nested_groups = False
|
||||||
nested_groups = True
|
|
||||||
|
|||||||
@@ -222,12 +222,17 @@ class Ec2Inventory(object):
|
|||||||
self.route53_excluded_zones.extend(
|
self.route53_excluded_zones.extend(
|
||||||
config.get('ec2', 'route53_excluded_zones', '').split(','))
|
config.get('ec2', 'route53_excluded_zones', '').split(','))
|
||||||
|
|
||||||
# Return all EC2/RDS instances
|
# Include RDS instances?
|
||||||
|
self.rds_enabled = True
|
||||||
|
if config.has_option('ec2', 'rds'):
|
||||||
|
self.rds_enabled = config.getboolean('ec2', 'rds')
|
||||||
|
|
||||||
|
# Return all EC2 and RDS instances (if RDS is enabled)
|
||||||
if config.has_option('ec2', 'all_instances'):
|
if config.has_option('ec2', 'all_instances'):
|
||||||
self.all_instances = config.getboolean('ec2', 'all_instances')
|
self.all_instances = config.getboolean('ec2', 'all_instances')
|
||||||
else:
|
else:
|
||||||
self.all_instances = False
|
self.all_instances = False
|
||||||
if config.has_option('ec2', 'all_rds_instances'):
|
if config.has_option('ec2', 'all_rds_instances') and self.rds_enabled:
|
||||||
self.all_rds_instances = config.getboolean('ec2', 'all_rds_instances')
|
self.all_rds_instances = config.getboolean('ec2', 'all_rds_instances')
|
||||||
else:
|
else:
|
||||||
self.all_rds_instances = False
|
self.all_rds_instances = False
|
||||||
@@ -241,7 +246,7 @@ class Ec2Inventory(object):
|
|||||||
self.cache_path_index = cache_dir + "/ansible-ec2.index"
|
self.cache_path_index = cache_dir + "/ansible-ec2.index"
|
||||||
self.cache_max_age = config.getint('ec2', 'cache_max_age')
|
self.cache_max_age = config.getint('ec2', 'cache_max_age')
|
||||||
|
|
||||||
# Ansible Tower - configure nested groups instead of flat namespace.
|
# Configure nested groups instead of flat namespace.
|
||||||
if config.has_option('ec2', 'nested_groups'):
|
if config.has_option('ec2', 'nested_groups'):
|
||||||
self.nested_groups = config.getboolean('ec2', 'nested_groups')
|
self.nested_groups = config.getboolean('ec2', 'nested_groups')
|
||||||
else:
|
else:
|
||||||
@@ -268,7 +273,8 @@ class Ec2Inventory(object):
|
|||||||
|
|
||||||
for region in self.regions:
|
for region in self.regions:
|
||||||
self.get_instances_by_region(region)
|
self.get_instances_by_region(region)
|
||||||
self.get_rds_instances_by_region(region)
|
if self.rds_enabled:
|
||||||
|
self.get_rds_instances_by_region(region)
|
||||||
|
|
||||||
self.write_to_cache(self.inventory, self.cache_path_cache)
|
self.write_to_cache(self.inventory, self.cache_path_cache)
|
||||||
self.write_to_cache(self.index, self.cache_path_index)
|
self.write_to_cache(self.index, self.cache_path_index)
|
||||||
@@ -289,12 +295,12 @@ class Ec2Inventory(object):
|
|||||||
if conn is None:
|
if conn is None:
|
||||||
print("region name: %s likely not supported, or AWS is down. connection to region failed." % region)
|
print("region name: %s likely not supported, or AWS is down. connection to region failed." % region)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
reservations = conn.get_all_instances()
|
reservations = conn.get_all_instances()
|
||||||
for reservation in reservations:
|
for reservation in reservations:
|
||||||
for instance in reservation.instances:
|
for instance in reservation.instances:
|
||||||
self.add_instance(instance, region)
|
self.add_instance(instance, region)
|
||||||
|
|
||||||
except boto.exception.BotoServerError, e:
|
except boto.exception.BotoServerError, e:
|
||||||
if not self.eucalyptus:
|
if not self.eucalyptus:
|
||||||
print "Looks like AWS is down again:"
|
print "Looks like AWS is down again:"
|
||||||
@@ -358,6 +364,8 @@ class Ec2Inventory(object):
|
|||||||
|
|
||||||
# Inventory: Group by instance ID (always a group of 1)
|
# Inventory: Group by instance ID (always a group of 1)
|
||||||
self.inventory[instance.id] = [dest]
|
self.inventory[instance.id] = [dest]
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'instances', instance.id)
|
||||||
|
|
||||||
# Inventory: Group by region
|
# Inventory: Group by region
|
||||||
if self.nested_groups:
|
if self.nested_groups:
|
||||||
@@ -441,21 +449,34 @@ class Ec2Inventory(object):
|
|||||||
|
|
||||||
# Inventory: Group by instance ID (always a group of 1)
|
# Inventory: Group by instance ID (always a group of 1)
|
||||||
self.inventory[instance.id] = [dest]
|
self.inventory[instance.id] = [dest]
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'instances', instance.id)
|
||||||
|
|
||||||
# Inventory: Group by region
|
# Inventory: Group by region
|
||||||
self.push(self.inventory, region, dest)
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'regions', region)
|
||||||
|
else:
|
||||||
|
self.push(self.inventory, region, dest)
|
||||||
|
|
||||||
# Inventory: Group by availability zone
|
# Inventory: Group by availability zone
|
||||||
self.push(self.inventory, instance.availability_zone, dest)
|
self.push(self.inventory, instance.availability_zone, dest)
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, region, instance.availability_zone)
|
||||||
|
|
||||||
# Inventory: Group by instance type
|
# Inventory: Group by instance type
|
||||||
self.push(self.inventory, self.to_safe('type_' + instance.instance_class), dest)
|
type_name = self.to_safe('type_' + instance.instance_class)
|
||||||
|
self.push(self.inventory, type_name, dest)
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'types', type_name)
|
||||||
|
|
||||||
# Inventory: Group by security group
|
# Inventory: Group by security group
|
||||||
try:
|
try:
|
||||||
if instance.security_group:
|
if instance.security_group:
|
||||||
key = self.to_safe("security_group_" + instance.security_group.name)
|
key = self.to_safe("security_group_" + instance.security_group.name)
|
||||||
self.push(self.inventory, key, dest)
|
self.push(self.inventory, key, dest)
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'security_groups', key)
|
||||||
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
print 'Package boto seems a bit older.'
|
print 'Package boto seems a bit older.'
|
||||||
print 'Please upgrade boto >= 2.3.0.'
|
print 'Please upgrade boto >= 2.3.0.'
|
||||||
@@ -463,13 +484,19 @@ class Ec2Inventory(object):
|
|||||||
|
|
||||||
# Inventory: Group by engine
|
# Inventory: Group by engine
|
||||||
self.push(self.inventory, self.to_safe("rds_" + instance.engine), dest)
|
self.push(self.inventory, self.to_safe("rds_" + instance.engine), dest)
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'rds_engines', self.to_safe("rds_" + instance.engine))
|
||||||
|
|
||||||
# Inventory: Group by parameter group
|
# Inventory: Group by parameter group
|
||||||
self.push(self.inventory, self.to_safe("rds_parameter_group_" + instance.parameter_group.name), dest)
|
self.push(self.inventory, self.to_safe("rds_parameter_group_" + instance.parameter_group.name), dest)
|
||||||
|
if self.nested_groups:
|
||||||
|
self.push_group(self.inventory, 'rds_parameter_groups', self.to_safe("rds_parameter_group_" + instance.parameter_group.name))
|
||||||
|
|
||||||
# Global Tag: all RDS instances
|
# Global Tag: all RDS instances
|
||||||
self.push(self.inventory, 'rds', dest)
|
self.push(self.inventory, 'rds', dest)
|
||||||
|
|
||||||
|
self.inventory["_meta"]["hostvars"][dest] = self.get_host_info_dict_from_instance(instance)
|
||||||
|
|
||||||
|
|
||||||
def get_route53_records(self):
|
def get_route53_records(self):
|
||||||
''' Get and store the map of resource records to domain names that
|
''' Get and store the map of resource records to domain names that
|
||||||
@@ -584,7 +611,7 @@ class Ec2Inventory(object):
|
|||||||
return self.json_format_dict(self.get_host_info_dict_from_instance(instance), True)
|
return self.json_format_dict(self.get_host_info_dict_from_instance(instance), True)
|
||||||
|
|
||||||
def push(self, my_dict, key, element):
|
def push(self, my_dict, key, element):
|
||||||
''' Pushed an element onto an array that may not have been defined in
|
''' Push an element onto an array that may not have been defined in
|
||||||
the dict '''
|
the dict '''
|
||||||
group_info = my_dict.setdefault(key, [])
|
group_info = my_dict.setdefault(key, [])
|
||||||
if isinstance(group_info, dict):
|
if isinstance(group_info, dict):
|
||||||
|
|||||||
@@ -382,7 +382,7 @@ EC2_INSTANCE_ID_VAR = 'ec2_id'
|
|||||||
# By default, filter group of one created for each instance, filter all RDS
|
# By default, filter group of one created for each instance, filter all RDS
|
||||||
# hosts, and exclude all groups without children, hosts and variables.
|
# hosts, and exclude all groups without children, hosts and variables.
|
||||||
EC2_GROUP_FILTER = r'^(?!i-[a-f0-9]{8,}).+$'
|
EC2_GROUP_FILTER = r'^(?!i-[a-f0-9]{8,}).+$'
|
||||||
EC2_HOST_FILTER = r'^.+(?<!rds\.amazonaws\.com)$'
|
EC2_HOST_FILTER = r'^.+$'
|
||||||
EC2_EXCLUDE_EMPTY_GROUPS = True
|
EC2_EXCLUDE_EMPTY_GROUPS = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user