diff --git a/plugins/inventory/ec2.py b/plugins/inventory/ec2.py index 76fc83497d0..9cb7219f66c 100755 --- a/plugins/inventory/ec2.py +++ b/plugins/inventory/ec2.py @@ -1087,12 +1087,18 @@ class Ec2Inventory(object): key = self.to_safe('ec2_' + self.uncammelize(key)) # Handle complex types + + # Target: Memcached Cache Clusters if key == 'ec2_configuration_endpoint' and value: host_info['ec2_configuration_endpoint_address'] = value['Address'] host_info['ec2_configuration_endpoint_port'] = value['Port'] + + # Target: Cache Nodes and Redis Cache Clusters (single node) if key == 'ec2_endpoint' and value: host_info['ec2_endpoint_address'] = value['Address'] host_info['ec2_endpoint_port'] = value['Port'] + + # Target: Redis Replication Groups if key == 'ec2_node_groups' and value: host_info['ec2_endpoint_address'] = value[0]['PrimaryEndpoint']['Address'] host_info['ec2_endpoint_port'] = value[0]['PrimaryEndpoint']['Port'] @@ -1107,25 +1113,41 @@ class Ec2Inventory(object): host_info['ec2_replica_cluster_port_'+ str(replica_count)] = node['ReadEndpoint']['Port'] host_info['ec2_replica_cluster_id_'+ str(replica_count)] = node['CacheClusterId'] replica_count += 1 + + # Target: Redis Replication Groups if key == 'ec2_member_clusters' and value: host_info['ec2_member_clusters'] = ','.join([str(i) for i in value]) + + # Target: All Cache Clusters elif key == 'ec2_cache_parameter_group': host_info["ec2_cache_node_ids_to_reboot"] = ','.join([str(i) for i in value['CacheNodeIdsToReboot']]) host_info['ec2_cache_parameter_group_name'] = value['CacheParameterGroupName'] host_info['ec2_cache_parameter_apply_status'] = value['ParameterApplyStatus'] + + # Target: Almost everything elif key == 'ec2_security_groups': sg_ids = [] for sg in value: sg_ids.append(sg['SecurityGroupId']) host_info["ec2_security_group_ids"] = ','.join([str(i) for i in sg_ids]) + + # Target: Everything + # Preserve booleans and integers elif type(value) in [int, bool]: host_info[key] = value + + # Target: Everything + # Sanitize string values elif isinstance(value, six.string_types): host_info[key] = value.strip() + + # Target: Everything + # Replace None by an empty string elif type(value) == type(None): host_info[key] = '' else: + # Remove non-processed complex types pass return host_info