summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorMichael DeHaan <michael.dehaan@gmail.com>2013-04-27 08:10:57 -0700
committerMichael DeHaan <michael.dehaan@gmail.com>2013-04-27 08:10:57 -0700
commit76723f6b37d48bd0a06756ee3c1af84b6af1e21f (patch)
tree376d1518fe8063b057017108c069d20bcb6e877c /plugins
parentcc7122e982b29530bfc38e781ee6079df97a5817 (diff)
parentbcc2e84a4b9f29ff982e693bebbf642e1120e70f (diff)
downloadansible-76723f6b37d48bd0a06756ee3c1af84b6af1e21f.tar.gz
Merge pull request #2610 from peterjanes/devel
Basic RDS support for EC2 inventory
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/inventory/ec2.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/plugins/inventory/ec2.py b/plugins/inventory/ec2.py
index 8cd3212eca..e001385dcc 100755
--- a/plugins/inventory/ec2.py
+++ b/plugins/inventory/ec2.py
@@ -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 '''