|
|
|
@ -366,6 +366,7 @@ class Ec2Inventory(object):
|
|
|
|
|
self.get_rds_instances_by_region(region)
|
|
|
|
|
if self.elasticache_enabled:
|
|
|
|
|
self.get_elasticache_clusters_by_region(region)
|
|
|
|
|
self.get_elasticache_replication_groups_by_region(region)
|
|
|
|
|
|
|
|
|
|
self.write_to_cache(self.inventory, self.cache_path_cache)
|
|
|
|
|
self.write_to_cache(self.index, self.cache_path_index)
|
|
|
|
@ -462,6 +463,40 @@ class Ec2Inventory(object):
|
|
|
|
|
for cluster in clusters:
|
|
|
|
|
self.add_elasticache_cluster(cluster, region)
|
|
|
|
|
|
|
|
|
|
def get_elasticache_replication_groups_by_region(self, region):
|
|
|
|
|
''' Makes an AWS API call to the list of ElastiCache replication groups
|
|
|
|
|
in a particular region.'''
|
|
|
|
|
|
|
|
|
|
# ElastiCache boto module doesn't provide a get_all_intances method,
|
|
|
|
|
# that's why we need to call describe directly (it would be called by
|
|
|
|
|
# the shorthand method anyway...)
|
|
|
|
|
try:
|
|
|
|
|
conn = elasticache.connect_to_region(region)
|
|
|
|
|
if conn:
|
|
|
|
|
response = conn.describe_replication_groups()
|
|
|
|
|
|
|
|
|
|
except boto.exception.BotoServerError as e:
|
|
|
|
|
error = e.reason
|
|
|
|
|
|
|
|
|
|
if e.error_code == 'AuthFailure':
|
|
|
|
|
error = self.get_auth_error_message()
|
|
|
|
|
if not e.reason == "Forbidden":
|
|
|
|
|
error = "Looks like AWS RDS is down:\n%s" % e.message
|
|
|
|
|
self.fail_with_error(error)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
# Boto also doesn't provide wrapper classes to ReplicationGroups
|
|
|
|
|
# Because of that wo can't make use of the get_list method in the
|
|
|
|
|
# AWSQueryConnection. Let's do the work manually
|
|
|
|
|
replication_groups = response['DescribeReplicationGroupsResponse']['DescribeReplicationGroupsResult']['ReplicationGroups']
|
|
|
|
|
|
|
|
|
|
except KeyError as e:
|
|
|
|
|
error = "ElastiCache query to AWS failed (unexpected format)."
|
|
|
|
|
self.fail_with_error(error)
|
|
|
|
|
|
|
|
|
|
for replication_group in replication_groups:
|
|
|
|
|
self.add_elasticache_replication_group(replication_group, region)
|
|
|
|
|
|
|
|
|
|
def get_auth_error_message(self):
|
|
|
|
|
''' create an informative error message if there is an issue authenticating'''
|
|
|
|
|
errors = ["Authentication error retrieving ec2 inventory."]
|
|
|
|
|