in pkg/aws/ec2/instance.go [89:136]
func (i *ec2Instance) LoadDetails(ec2APIHelper api.EC2APIHelper) error {
i.lock.Lock()
defer i.lock.Unlock()
instance, err := ec2APIHelper.GetInstanceDetails(&i.instanceID)
if err != nil {
return err
}
if instance == nil || instance.SubnetId == nil {
return fmt.Errorf("failed to find instance %s details from EC2 API", i.instanceID)
}
// Set instance subnet and cidr during node initialization
i.instanceSubnetID = *instance.SubnetId
instanceSubnet, err := ec2APIHelper.GetSubnet(&i.instanceSubnetID)
if err != nil {
return err
}
if instanceSubnet == nil || instanceSubnet.CidrBlock == nil {
return fmt.Errorf("failed to find subnet or CIDR block for subnet %s for instance %s",
i.instanceSubnetID, i.instanceID)
}
i.instanceSubnetCidrBlock = *instanceSubnet.CidrBlock
i.subnetMask = strings.Split(i.instanceSubnetCidrBlock, "/")[1]
i.instanceType = *instance.InstanceType
limits, ok := vpc.Limits[i.instanceType]
if !ok {
return fmt.Errorf("unsupported instance type, couldn't find ENI Limit for instance %s", i.instanceType)
}
i.deviceIndexes = make([]bool, limits.Interface)
for _, nwInterface := range instance.NetworkInterfaces {
index := nwInterface.Attachment.DeviceIndex
i.deviceIndexes[*index] = true
// Load the Security group of the primary network interface
if i.instanceSecurityGroups == nil && *nwInterface.PrivateIpAddress == *instance.PrivateIpAddress {
i.primaryENIID = *nwInterface.NetworkInterfaceId
// TODO: Group can change, should be refreshed each time we want to use this
for _, group := range nwInterface.Groups {
i.instanceSecurityGroups = append(i.instanceSecurityGroups, *group.GroupId)
}
}
}
return i.updateCurrentSubnetAndCidrBlock(ec2APIHelper)
}