in src/inventory/mappers.py [0:0]
def _do_mapping(self, config_resource: dict) -> List[InventoryData]:
ec2_data_list: List[InventoryData] = []
for nic in config_resource["configuration"]["networkInterfaces"]:
for ipAddress in nic["privateIpAddresses"]:
ec2_data = { "asset_type": "EC2",
"unique_id": config_resource["configuration"]["instanceId"],
"ip_address": ipAddress["privateIpAddress"],
"is_virtual": "Yes",
"authenticated_scan_planned": "Yes",
"mac_address": nic["macAddress"],
"baseline_config": config_resource["configuration"]["imageId"],
"hardware_model": config_resource["configuration"]["instanceType"],
"network_id": config_resource["configuration"]["vpcId"],
"owner": _get_tag_value(config_resource["tags"], "owner") }
if (public_dns_name := config_resource["configuration"].get("publicDnsName")):
ec2_data["dns_name"] = public_dns_name
ec2_data["is_public"] = "Yes"
else:
ec2_data["dns_name"] = config_resource["configuration"]["privateDnsName"]
ec2_data["is_public"] = "No"
ec2_data_list.append(InventoryData(**ec2_data))
if "association" in ipAddress:
# Each IP address needs its own row in report so public IP requires an additional row
ec2_data = copy.deepcopy(ec2_data)
ec2_data["ip_address"] = ipAddress["association"]["publicIp"]
ec2_data_list.append(InventoryData(**ec2_data))
return ec2_data_list