Skip to content

Commit 0a200d6

Browse files
author
Senthil Kumaran
committed
Revert "Fix issues handling unmanaged ENIs with IPv6 only (#3122)"
This reverts commit 7b46f6b.
1 parent 332b6aa commit 0a200d6

File tree

2 files changed

+23
-54
lines changed

2 files changed

+23
-54
lines changed

pkg/awsutils/awsutils.go

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -610,9 +610,7 @@ func (cache *EC2InstanceMetadataCache) getENIMetadata(eniMAC string) (ENIMetadat
610610
awsAPIErrInc("GetMACImdsFields", err)
611611
return ENIMetadata{}, err
612612
}
613-
614-
ipv4Available := false
615-
ipv6Available := false
613+
ipInfoAvailable := false
616614
// Efa-only interfaces do not have any ipv4s or ipv6s associated with it. If we don't find any local-ipv4 or ipv6 info in imds we assume it to be efa-only interface and validate this later via ec2 call
617615
for _, field := range macImdsFields {
618616
if field == "local-ipv4s" {
@@ -622,7 +620,7 @@ func (cache *EC2InstanceMetadataCache) getENIMetadata(eniMAC string) (ENIMetadat
622620
return ENIMetadata{}, err
623621
}
624622
if len(imdsIPv4s) > 0 {
625-
ipv4Available = true
623+
ipInfoAvailable = true
626624
log.Debugf("Found IPv4 addresses associated with interface. This is not efa-only interface")
627625
break
628626
}
@@ -632,14 +630,14 @@ func (cache *EC2InstanceMetadataCache) getENIMetadata(eniMAC string) (ENIMetadat
632630
if err != nil {
633631
awsAPIErrInc("GetIPv6s", err)
634632
} else if len(imdsIPv6s) > 0 {
635-
ipv6Available = true
633+
ipInfoAvailable = true
636634
log.Debugf("Found IPv6 addresses associated with interface. This is not efa-only interface")
637635
break
638636
}
639637
}
640638
}
641639

642-
if !ipv4Available && !ipv6Available {
640+
if !ipInfoAvailable {
643641
return ENIMetadata{
644642
ENIID: eniID,
645643
MAC: eniMAC,
@@ -654,29 +652,23 @@ func (cache *EC2InstanceMetadataCache) getENIMetadata(eniMAC string) (ENIMetadat
654652
}
655653

656654
// Get IPv4 and IPv6 addresses assigned to interface
657-
var ec2ip4s []*ec2.NetworkInterfacePrivateIpAddress
658-
var subnetV4Cidr string
659-
if ipv4Available {
660-
cidr, err := cache.imds.GetSubnetIPv4CIDRBlock(ctx, eniMAC)
661-
if err != nil {
662-
awsAPIErrInc("GetSubnetIPv4CIDRBlock", err)
663-
return ENIMetadata{}, err
664-
}
665-
666-
subnetV4Cidr = cidr.String()
655+
cidr, err := cache.imds.GetSubnetIPv4CIDRBlock(ctx, eniMAC)
656+
if err != nil {
657+
awsAPIErrInc("GetSubnetIPv4CIDRBlock", err)
658+
return ENIMetadata{}, err
659+
}
667660

668-
imdsIPv4s, err := cache.imds.GetLocalIPv4s(ctx, eniMAC)
669-
if err != nil {
670-
awsAPIErrInc("GetLocalIPv4s", err)
671-
return ENIMetadata{}, err
672-
}
661+
imdsIPv4s, err := cache.imds.GetLocalIPv4s(ctx, eniMAC)
662+
if err != nil {
663+
awsAPIErrInc("GetLocalIPv4s", err)
664+
return ENIMetadata{}, err
665+
}
673666

674-
ec2ip4s = make([]*ec2.NetworkInterfacePrivateIpAddress, len(imdsIPv4s))
675-
for i, ip4 := range imdsIPv4s {
676-
ec2ip4s[i] = &ec2.NetworkInterfacePrivateIpAddress{
677-
Primary: aws.Bool(i == 0),
678-
PrivateIpAddress: aws.String(ip4.String()),
679-
}
667+
ec2ip4s := make([]*ec2.NetworkInterfacePrivateIpAddress, len(imdsIPv4s))
668+
for i, ip4 := range imdsIPv4s {
669+
ec2ip4s[i] = &ec2.NetworkInterfacePrivateIpAddress{
670+
Primary: aws.Bool(i == 0),
671+
PrivateIpAddress: aws.String(ip4.String()),
680672
}
681673
}
682674

@@ -740,7 +732,7 @@ func (cache *EC2InstanceMetadataCache) getENIMetadata(eniMAC string) (ENIMetadat
740732
ENIID: eniID,
741733
MAC: eniMAC,
742734
DeviceNumber: deviceNum,
743-
SubnetIPv4CIDR: subnetV4Cidr,
735+
SubnetIPv4CIDR: cidr.String(),
744736
IPv4Addresses: ec2ip4s,
745737
IPv4Prefixes: ec2ipv4Prefixes,
746738
SubnetIPv6CIDR: subnetV6Cidr,
@@ -1415,17 +1407,14 @@ func (cache *EC2InstanceMetadataCache) DescribeAllENIs() (DescribeAllENIsResult,
14151407
efaENIs[eniID] = true
14161408
}
14171409
if interfaceType != "efa-only" {
1418-
if len(eniMetadata.IPv4Addresses) == 0 && len(eniMetadata.IPv6Addresses) == 0 {
1410+
if len(eniMetadata.IPv4Addresses) == 0 {
14191411
log.Errorf("Missing IP addresses from IMDS. Non efa-only interface should have IP address associated with it %s", eniID)
1420-
outOfSyncErr := errors.New("DescribeAllENIs: No IPv4 and IPv6 addresses found")
1412+
outOfSyncErr := errors.New("DescribeAllENIs: No IPv4 address found")
14211413
return DescribeAllENIsResult{}, outOfSyncErr
14221414
}
14231415
}
1424-
14251416
// Check IPv4 addresses
1426-
if len(eniMetadata.IPv4Addresses) > 0 {
1427-
logOutOfSyncState(eniID, eniMetadata.IPv4Addresses, ec2res.PrivateIpAddresses)
1428-
}
1417+
logOutOfSyncState(eniID, eniMetadata.IPv4Addresses, ec2res.PrivateIpAddresses)
14291418
tagMap[eniMetadata.ENIID] = convertSDKTagsToTags(ec2res.TagSet)
14301419
}
14311420
return DescribeAllENIsResult{

pkg/awsutils/awsutils_test.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ const (
5353
metadataSubnetCIDR = "/subnet-ipv4-cidr-block"
5454
metadataIPv4s = "/local-ipv4s"
5555
metadataIPv4Prefixes = "/ipv4-prefix"
56-
metadataIPv6s = "/ipv6s"
5756
metadataIPv6Prefixes = "/ipv6-prefix"
5857

5958
az = "us-east-1a"
@@ -77,14 +76,12 @@ const (
7776
eni2Device = "1"
7877
eni2PrivateIP = "10.0.0.2"
7978
eni2Prefix = "10.0.2.0/28"
80-
eni2v6IP = "2001:db8:8:4::2"
8179
eni2v6Prefix = "2001:db8::/64"
8280
eni2ID = "eni-12341234"
8381
metadataVPCIPv4CIDRs = "192.168.0.0/16 100.66.0.0/1"
8482
myNodeName = "testNodeName"
8583
imdsMACFields = "security-group-ids subnet-id vpc-id vpc-ipv4-cidr-blocks device-number interface-id subnet-ipv4-cidr-block local-ipv4s ipv4-prefix ipv6-prefix"
8684
imdsMACFieldsEfaOnly = "security-group-ids subnet-id vpc-id vpc-ipv4-cidr-blocks device-number interface-id subnet-ipv4-cidr-block ipv4-prefix ipv6-prefix"
87-
imdsMACFieldsV6Only = "security-group-ids subnet-id vpc-id vpc-ipv4-cidr-blocks device-number interface-id subnet-ipv6-cidr-blocks ipv6s ipv6-prefix"
8885
)
8986

9087
func testMetadata(overrides map[string]interface{}) FakeIMDS {
@@ -241,23 +238,6 @@ func TestGetAttachedENIsWithEfaOnly(t *testing.T) {
241238
}
242239
}
243240

244-
func TestGetAttachedENIsWithIPv6Only(t *testing.T) {
245-
mockMetadata := testMetadata(map[string]interface{}{
246-
metadataMACPath: primaryMAC + " " + eni2MAC,
247-
metadataMACPath + eni2MAC: imdsMACFieldsV6Only,
248-
metadataMACPath + eni2MAC + metadataDeviceNum: eni2Device,
249-
metadataMACPath + eni2MAC + metadataInterface: eni2ID,
250-
metadataMACPath + eni2MAC + metadataIPv6s: eni2v6IP,
251-
metadataMACPath + eni2MAC + metadataIPv6Prefixes: eni2v6Prefix,
252-
})
253-
254-
cache := &EC2InstanceMetadataCache{imds: TypedIMDS{mockMetadata}}
255-
ens, err := cache.GetAttachedENIs()
256-
if assert.NoError(t, err) {
257-
assert.Equal(t, len(ens), 2)
258-
}
259-
}
260-
261241
func TestGetAttachedENIsWithPrefixes(t *testing.T) {
262242
mockMetadata := testMetadata(map[string]interface{}{
263243
metadataMACPath: primaryMAC + " " + eni2MAC,

0 commit comments

Comments
 (0)