Merge pull request #2610 from peterjanes/devel
Basic RDS support for EC2 inventory
This commit is contained in:
commit
76723f6b37
1 changed files with 66 additions and 0 deletions
|
@ -115,6 +115,7 @@ import re
|
|||
from time import time
|
||||
import boto
|
||||
from boto import ec2
|
||||
from boto import rds
|
||||
import ConfigParser
|
||||
|
||||
try:
|
||||
|
@ -227,6 +228,7 @@ class Ec2Inventory(object):
|
|||
|
||||
for region in self.regions:
|
||||
self.get_instances_by_region(region)
|
||||
self.get_rds_instances_by_region(region)
|
||||
|
||||
self.write_to_cache(self.inventory, self.cache_path_cache)
|
||||
self.write_to_cache(self.index, self.cache_path_index)
|
||||
|
@ -254,6 +256,20 @@ class Ec2Inventory(object):
|
|||
print e
|
||||
sys.exit(1)
|
||||
|
||||
def get_rds_instances_by_region(self, region):
|
||||
''' Makes an AWS API call to the list of RDS instances in a particular
|
||||
region '''
|
||||
|
||||
try:
|
||||
conn = rds.connect_to_region(region)
|
||||
if conn:
|
||||
instances = conn.get_all_dbinstances()
|
||||
for instance in instances:
|
||||
self.add_rds_instance(instance, region)
|
||||
except boto.exception.BotoServerError as e:
|
||||
print "Looks like AWS RDS is down: "
|
||||
print e
|
||||
sys.exit(1)
|
||||
|
||||
def get_instance(self, region, instance_id):
|
||||
''' Gets details about a specific instance '''
|
||||
|
@ -322,6 +338,56 @@ class Ec2Inventory(object):
|
|||
self.push(self.inventory, key, dest)
|
||||
|
||||
|
||||
def add_rds_instance(self, instance, region):
|
||||
''' Adds an RDS instance to the inventory and index, as long as it is
|
||||
addressable '''
|
||||
|
||||
# Only want available instances
|
||||
if instance.status != 'available':
|
||||
return
|
||||
|
||||
# Select the best destination address
|
||||
#if instance.subnet_id:
|
||||
#dest = getattr(instance, self.vpc_destination_variable)
|
||||
#else:
|
||||
#dest = getattr(instance, self.destination_variable)
|
||||
dest = instance.endpoint[0]
|
||||
|
||||
if not dest:
|
||||
# Skip instances we cannot address (e.g. private VPC subnet)
|
||||
return
|
||||
|
||||
# Add to index
|
||||
self.index[dest] = [region, instance.id]
|
||||
|
||||
# Inventory: Group by instance ID (always a group of 1)
|
||||
self.inventory[instance.id] = [dest]
|
||||
|
||||
# Inventory: Group by region
|
||||
self.push(self.inventory, region, dest)
|
||||
|
||||
# Inventory: Group by availability zone
|
||||
self.push(self.inventory, instance.availability_zone, dest)
|
||||
|
||||
# Inventory: Group by instance type
|
||||
self.push(self.inventory, self.to_safe('type_' + instance.instance_class), dest)
|
||||
|
||||
# Inventory: Group by security group
|
||||
try:
|
||||
key = self.to_safe("security_group_" + instance.security_group.name)
|
||||
self.push(self.inventory, key, dest)
|
||||
except AttributeError:
|
||||
print 'Package boto seems a bit older.'
|
||||
print 'Please upgrade boto >= 2.3.0.'
|
||||
sys.exit(1)
|
||||
|
||||
# Inventory: Group by engine
|
||||
self.push(self.inventory, self.to_safe("rds_" + instance.engine), dest)
|
||||
|
||||
# Inventory: Group by parameter group
|
||||
self.push(self.inventory, self.to_safe("rds_parameter_group_" + instance.parameter_group.name), dest)
|
||||
|
||||
|
||||
def get_host_info(self):
|
||||
''' Get variables about a specific host '''
|
||||
|
||||
|
|
Loading…
Reference in a new issue