mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 01:17:37 -02:30
Update ec2 inventory from core.
This commit is contained in:
@@ -24,14 +24,17 @@ regions_exclude = us-gov-west-1,cn-north-1
|
|||||||
# This is the normal destination variable to use. If you are running Ansible
|
# This is the normal destination variable to use. If you are running Ansible
|
||||||
# from outside EC2, then 'public_dns_name' makes the most sense. If you are
|
# from outside EC2, then 'public_dns_name' makes the most sense. If you are
|
||||||
# running Ansible from within EC2, then perhaps you want to use the internal
|
# running Ansible from within EC2, then perhaps you want to use the internal
|
||||||
# address, and should set this to 'private_dns_name'.
|
# address, and should set this to 'private_dns_name'. The key of an EC2 tag
|
||||||
|
# may optionally be used; however the boto instance variables hold precedence
|
||||||
|
# in the event of a collision.
|
||||||
destination_variable = public_dns_name
|
destination_variable = public_dns_name
|
||||||
|
|
||||||
# For server inside a VPC, using DNS names may not make sense. When an instance
|
# For server inside a VPC, using DNS names may not make sense. When an instance
|
||||||
# has 'subnet_id' set, this variable is used. If the subnet is public, setting
|
# has 'subnet_id' set, this variable is used. If the subnet is public, setting
|
||||||
# this to 'ip_address' will return the public IP address. For instances in a
|
# this to 'ip_address' will return the public IP address. For instances in a
|
||||||
# private subnet, this should be set to 'private_ip_address', and Ansible must
|
# private subnet, this should be set to 'private_ip_address', and Ansible must
|
||||||
# be run from with EC2.
|
# be run from within EC2. The key of an EC2 tag may optionally be used; however
|
||||||
|
# the boto instance variables hold precedence in the event of a collision.
|
||||||
vpc_destination_variable = ip_address
|
vpc_destination_variable = ip_address
|
||||||
|
|
||||||
# To tag instances on EC2 with the resource records that point to them from
|
# To tag instances on EC2 with the resource records that point to them from
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ import boto
|
|||||||
from boto import ec2
|
from boto import ec2
|
||||||
from boto import rds
|
from boto import rds
|
||||||
from boto import route53
|
from boto import route53
|
||||||
import ConfigParser
|
import six
|
||||||
|
|
||||||
|
from six.moves import configparser
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -166,7 +168,7 @@ class Ec2Inventory(object):
|
|||||||
else:
|
else:
|
||||||
data_to_print = self.json_format_dict(self.inventory, True)
|
data_to_print = self.json_format_dict(self.inventory, True)
|
||||||
|
|
||||||
print data_to_print
|
print(data_to_print)
|
||||||
|
|
||||||
|
|
||||||
def is_cache_valid(self):
|
def is_cache_valid(self):
|
||||||
@@ -184,8 +186,10 @@ class Ec2Inventory(object):
|
|||||||
|
|
||||||
def read_settings(self):
|
def read_settings(self):
|
||||||
''' Reads the settings from the ec2.ini file '''
|
''' Reads the settings from the ec2.ini file '''
|
||||||
|
if six.PY2:
|
||||||
config = ConfigParser.SafeConfigParser()
|
config = configparser.SafeConfigParser()
|
||||||
|
else:
|
||||||
|
config = configparser.ConfigParser()
|
||||||
ec2_default_ini_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'ec2.ini')
|
ec2_default_ini_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'ec2.ini')
|
||||||
ec2_ini_path = os.environ.get('EC2_INI_PATH', ec2_default_ini_path)
|
ec2_ini_path = os.environ.get('EC2_INI_PATH', ec2_default_ini_path)
|
||||||
config.read(ec2_ini_path)
|
config.read(ec2_ini_path)
|
||||||
@@ -282,7 +286,7 @@ class Ec2Inventory(object):
|
|||||||
self.pattern_include = re.compile(pattern_include)
|
self.pattern_include = re.compile(pattern_include)
|
||||||
else:
|
else:
|
||||||
self.pattern_include = None
|
self.pattern_include = None
|
||||||
except ConfigParser.NoOptionError, e:
|
except configparser.NoOptionError as e:
|
||||||
self.pattern_include = None
|
self.pattern_include = None
|
||||||
|
|
||||||
# Do we need to exclude hosts that match a pattern?
|
# Do we need to exclude hosts that match a pattern?
|
||||||
@@ -292,7 +296,7 @@ class Ec2Inventory(object):
|
|||||||
self.pattern_exclude = re.compile(pattern_exclude)
|
self.pattern_exclude = re.compile(pattern_exclude)
|
||||||
else:
|
else:
|
||||||
self.pattern_exclude = None
|
self.pattern_exclude = None
|
||||||
except ConfigParser.NoOptionError, e:
|
except configparser.NoOptionError as e:
|
||||||
self.pattern_exclude = None
|
self.pattern_exclude = None
|
||||||
|
|
||||||
# Instance filters (see boto and EC2 API docs). Ignore invalid filters.
|
# Instance filters (see boto and EC2 API docs). Ignore invalid filters.
|
||||||
@@ -354,7 +358,7 @@ class Ec2Inventory(object):
|
|||||||
conn = self.connect(region)
|
conn = self.connect(region)
|
||||||
reservations = []
|
reservations = []
|
||||||
if self.ec2_instance_filters:
|
if self.ec2_instance_filters:
|
||||||
for filter_key, filter_values in self.ec2_instance_filters.iteritems():
|
for filter_key, filter_values in self.ec2_instance_filters.items():
|
||||||
reservations.extend(conn.get_all_instances(filters = { filter_key : filter_values }))
|
reservations.extend(conn.get_all_instances(filters = { filter_key : filter_values }))
|
||||||
else:
|
else:
|
||||||
reservations = conn.get_all_instances()
|
reservations = conn.get_all_instances()
|
||||||
@@ -363,7 +367,7 @@ class Ec2Inventory(object):
|
|||||||
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 as e:
|
||||||
if e.error_code == 'AuthFailure':
|
if e.error_code == 'AuthFailure':
|
||||||
error = self.get_auth_error_message()
|
error = self.get_auth_error_message()
|
||||||
else:
|
else:
|
||||||
@@ -381,7 +385,7 @@ class Ec2Inventory(object):
|
|||||||
instances = conn.get_all_dbinstances()
|
instances = conn.get_all_dbinstances()
|
||||||
for instance in instances:
|
for instance in instances:
|
||||||
self.add_rds_instance(instance, region)
|
self.add_rds_instance(instance, region)
|
||||||
except boto.exception.BotoServerError, e:
|
except boto.exception.BotoServerError as e:
|
||||||
error = e.reason
|
error = e.reason
|
||||||
|
|
||||||
if e.error_code == 'AuthFailure':
|
if e.error_code == 'AuthFailure':
|
||||||
@@ -515,7 +519,7 @@ class Ec2Inventory(object):
|
|||||||
|
|
||||||
# Inventory: Group by tag keys
|
# Inventory: Group by tag keys
|
||||||
if self.group_by_tag_keys:
|
if self.group_by_tag_keys:
|
||||||
for k, v in instance.tags.iteritems():
|
for k, v in instance.tags.items():
|
||||||
key = self.to_safe("tag_" + k + "=" + v)
|
key = self.to_safe("tag_" + k + "=" + v)
|
||||||
self.push(self.inventory, key, dest)
|
self.push(self.inventory, key, dest)
|
||||||
if self.nested_groups:
|
if self.nested_groups:
|
||||||
@@ -690,7 +694,7 @@ class Ec2Inventory(object):
|
|||||||
instance_vars['ec2_previous_state_code'] = instance.previous_state_code
|
instance_vars['ec2_previous_state_code'] = instance.previous_state_code
|
||||||
elif type(value) in [int, bool]:
|
elif type(value) in [int, bool]:
|
||||||
instance_vars[key] = value
|
instance_vars[key] = value
|
||||||
elif type(value) in [str, unicode]:
|
elif isinstance(value, six.string_types):
|
||||||
instance_vars[key] = value.strip()
|
instance_vars[key] = value.strip()
|
||||||
elif type(value) == type(None):
|
elif type(value) == type(None):
|
||||||
instance_vars[key] = ''
|
instance_vars[key] = ''
|
||||||
@@ -699,7 +703,7 @@ class Ec2Inventory(object):
|
|||||||
elif key == 'ec2__placement':
|
elif key == 'ec2__placement':
|
||||||
instance_vars['ec2_placement'] = value.zone
|
instance_vars['ec2_placement'] = value.zone
|
||||||
elif key == 'ec2_tags':
|
elif key == 'ec2_tags':
|
||||||
for k, v in value.iteritems():
|
for k, v in value.items():
|
||||||
key = self.to_safe('ec2_tag_' + k)
|
key = self.to_safe('ec2_tag_' + k)
|
||||||
instance_vars[key] = v
|
instance_vars[key] = v
|
||||||
elif key == 'ec2_groups':
|
elif key == 'ec2_groups':
|
||||||
@@ -787,7 +791,7 @@ class Ec2Inventory(object):
|
|||||||
''' Converts 'bad' characters in a string to underscores so they can be
|
''' Converts 'bad' characters in a string to underscores so they can be
|
||||||
used as Ansible groups '''
|
used as Ansible groups '''
|
||||||
|
|
||||||
return re.sub("[^A-Za-z0-9\-]", "_", word)
|
return re.sub("[^A-Za-z0-9\_]", "_", word)
|
||||||
|
|
||||||
|
|
||||||
def json_format_dict(self, data, pretty=False):
|
def json_format_dict(self, data, pretty=False):
|
||||||
|
|||||||
Reference in New Issue
Block a user