in pkg/awsutils/awsutils.go [424:497]
func (cache *EC2InstanceMetadataCache) initWithEC2Metadata(ctx context.Context) error {
var err error
// retrieve availability-zone
cache.availabilityZone, err = cache.imds.GetAZ(ctx)
if err != nil {
awsAPIErrInc("GetAZ", err)
return err
}
log.Debugf("Found availability zone: %s ", cache.availabilityZone)
// retrieve primary interface local-ipv4
cache.localIPv4, err = cache.imds.GetLocalIPv4(ctx)
if err != nil {
awsAPIErrInc("GetLocalIPv4", err)
return err
}
log.Debugf("Discovered the instance primary IPv4 address: %s", cache.localIPv4)
// retrieve instance-id
cache.instanceID, err = cache.imds.GetInstanceID(ctx)
if err != nil {
awsAPIErrInc("GetInstanceID", err)
return err
}
log.Debugf("Found instance-id: %s ", cache.instanceID)
// retrieve instance-type
cache.instanceType, err = cache.imds.GetInstanceType(ctx)
if err != nil {
awsAPIErrInc("GetInstanceType", err)
return err
}
log.Debugf("Found instance-type: %s ", cache.instanceType)
// retrieve primary interface's mac
mac, err := cache.imds.GetMAC(ctx)
if err != nil {
awsAPIErrInc("GetMAC", err)
return err
}
cache.primaryENImac = mac
log.Debugf("Found primary interface's MAC address: %s", mac)
cache.primaryENI, err = cache.imds.GetInterfaceID(ctx, mac)
if err != nil {
awsAPIErrInc("GetInterfaceID", err)
return errors.Wrap(err, "get instance metadata: failed to find primary ENI")
}
log.Debugf("%s is the primary ENI of this instance", cache.primaryENI)
// retrieve subnet-id
cache.subnetID, err = cache.imds.GetSubnetID(ctx, mac)
if err != nil {
awsAPIErrInc("GetSubnetID", err)
return err
}
log.Debugf("Found subnet-id: %s ", cache.subnetID)
// retrieve vpc-id
cache.vpcID, err = cache.imds.GetVpcID(ctx, mac)
if err != nil {
awsAPIErrInc("GetVpcID", err)
return err
}
log.Debugf("Found vpc-id: %s ", cache.vpcID)
// We use the ctx here for testing, since we spawn go-routines above which will run forever.
select {
case <-ctx.Done():
return nil
default:
}
return nil
}