Where hosts can appear and disappear (e.g. with AWS ASGs) the EC2 external inventory script (
ec2.py) comes in useful.
All you need to do is to export your AWS keys as environment variables and
ec2.py is good.
The EC2 inventory output can become very large. To manage its size, you can configure which groups should be created using
ec2.ini options. E.g.
group_by_instance_id = False group_by_region = False group_by_availability_zone = False group_by_ami_id = False group_by_instance_type = False group_by_key_pair = False group_by_vpc_id = False group_by_security_group = False group_by_tag_keys = True group_by_tag_none = True group_by_route53_names = True group_by_rds_engine = True group_by_rds_parameter_group = False
Note on how these are created:
- format is
- special characters are changed to an underscore
E.g. with a
my instance name we would get a tag of
inikeys are read in
# Configure which groups should be created. group_by_options = [ 'group_by_instance_id', 'group_by_region', 'group_by_availability_zone', 'group_by_ami_id', 'group_by_instance_type', 'group_by_instance_state', 'group_by_key_pair', 'group_by_vpc_id', 'group_by_security_group', 'group_by_tag_keys', 'group_by_tag_none', 'group_by_route53_names', 'group_by_rds_engine', 'group_by_rds_parameter_group', 'group_by_elasticache_engine', 'group_by_elasticache_cluster', 'group_by_elasticache_parameter_group', 'group_by_elasticache_replication_group', 'group_by_aws_account', ] for option in group_by_options: if config.has_option('ec2', option): setattr(self, option, config.getboolean('ec2', option)) else: setattr(self, option, True)