func()

in internal/inventory/awsfetcher/fetcher_ec2_instance.go [50:102]


func (e *ec2InstanceFetcher) Fetch(ctx context.Context, assetChannel chan<- inventory.AssetEvent) {
	e.logger.Info("Fetching EC2 Instances")
	defer e.logger.Info("Fetching EC2 Instances - Finished")

	instances, err := e.provider.DescribeInstances(ctx)
	if err != nil {
		e.logger.Errorf("Could not list ec2 instances: %v", err)
		return
	}

	for _, i := range instances {
		if i == nil {
			continue
		}

		iamFetcher := inventory.EmptyEnricher()
		if i.IamInstanceProfile != nil {
			iamFetcher = inventory.WithUser(inventory.User{
				ID: pointers.Deref(i.IamInstanceProfile.Arn),
			})
		}

		assetChannel <- inventory.NewAssetEvent(
			inventory.AssetClassificationAwsEc2Instance,
			i.GetResourceArn(),
			pointers.Deref(i.PrivateDnsName),

			inventory.WithRelatedAssetIds([]string{pointers.Deref(i.InstanceId)}),
			inventory.WithRawAsset(i),
			inventory.WithLabels(e.getTags(i)),
			inventory.WithCloud(inventory.Cloud{
				Provider:         inventory.AwsCloudProvider,
				Region:           i.Region,
				AvailabilityZone: e.getAvailabilityZone(i),
				AccountID:        e.AccountId,
				AccountName:      e.AccountName,
				InstanceID:       pointers.Deref(i.InstanceId),
				InstanceName:     i.GetResourceName(),
				MachineType:      string(i.InstanceType),
				ServiceName:      "AWS EC2",
			}),
			inventory.WithHost(inventory.Host{
				ID:           pointers.Deref(i.InstanceId),
				Name:         pointers.Deref(i.PrivateDnsName),
				Architecture: string(i.Architecture),
				Type:         string(i.InstanceType),
				IP:           pointers.Deref(i.PublicIpAddress),
				MacAddress:   i.GetResourceMacAddresses(),
			}),
			iamFetcher,
		)
	}
}