Merge branch 'ec2-tag-filter' of https://github.com/michalgasek/ansible into michalgasek-ec2-tag-filter
This commit is contained in:
commit
21409d6052
2 changed files with 35 additions and 1 deletions
|
@ -73,3 +73,23 @@ nested_groups = False
|
||||||
|
|
||||||
# If you want to exclude any hosts that match a certain regular expression
|
# If you want to exclude any hosts that match a certain regular expression
|
||||||
# pattern_exclude = stage-*
|
# pattern_exclude = stage-*
|
||||||
|
|
||||||
|
# Instance filters can be used to control which instances are retrieved for
|
||||||
|
# inventory. For the full list of possible filters, please read the EC2 API
|
||||||
|
# docs: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html#query-DescribeInstances-filters
|
||||||
|
# Filters are key/value pairs separated by '=', to list multiple filters use
|
||||||
|
# a list separated by commas. See examples below.
|
||||||
|
|
||||||
|
# Retrieve only instances with (key=value) env=stage tag
|
||||||
|
# instance_filters = tag:env=stage
|
||||||
|
|
||||||
|
# Retrieve only instances with role=webservers OR role=dbservers tag
|
||||||
|
# instance_filters = tag:role=webservers,tag:role=dbservers
|
||||||
|
|
||||||
|
# Retrieve only t1.micro instances OR instances with tag env=stage
|
||||||
|
# instance_filters = instance-type=t1.micro,tag:env=stage
|
||||||
|
|
||||||
|
# You can use wildcards in filter values also. Below will list instances which
|
||||||
|
# tag Name value matches webservers1*
|
||||||
|
# (ex. webservers15, webservers1a, webservers123 etc)
|
||||||
|
# instance_filters = tag:Name=webservers1*
|
||||||
|
|
|
@ -123,6 +123,7 @@ from boto import ec2
|
||||||
from boto import rds
|
from boto import rds
|
||||||
from boto import route53
|
from boto import route53
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
|
@ -272,6 +273,13 @@ class Ec2Inventory(object):
|
||||||
except ConfigParser.NoOptionError, e:
|
except ConfigParser.NoOptionError, e:
|
||||||
self.pattern_exclude = None
|
self.pattern_exclude = None
|
||||||
|
|
||||||
|
# Instance filters (see boto and EC2 API docs)
|
||||||
|
self.ec2_instance_filters = defaultdict(list)
|
||||||
|
if config.has_option('ec2', 'instance_filters'):
|
||||||
|
for x in config.get('ec2', 'instance_filters', '').split(','):
|
||||||
|
filter_key, filter_value = x.split('=')
|
||||||
|
self.ec2_instance_filters[filter_key].append(filter_value)
|
||||||
|
|
||||||
def parse_cli_args(self):
|
def parse_cli_args(self):
|
||||||
''' Command line argument processing '''
|
''' Command line argument processing '''
|
||||||
|
|
||||||
|
@ -316,7 +324,13 @@ class Ec2Inventory(object):
|
||||||
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 = []
|
||||||
|
if self.ec2_instance_filters:
|
||||||
|
for filter_key, filter_values in self.ec2_instance_filters.iteritems():
|
||||||
|
reservations.extend(conn.get_all_instances(filters = { filter_key : filter_values }))
|
||||||
|
else:
|
||||||
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)
|
||||||
|
|
Loading…
Reference in a new issue