Skip to content

Commit 5de433d

Browse files
committed
IPv6-only capability and config initialization (#4659)
1 parent 83a96ab commit 5de433d

9 files changed

+50
-8
lines changed

agent/app/agent_capability.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ const (
8484
capabilityEBSTaskAttach = "storage.ebs-task-volume-attach"
8585
capabilityContainerRestartPolicy = "container-restart-policy"
8686
capabilityFaultInjection = "fault-injection"
87+
capabilityIPv6Only = "ipv6-only"
8788

8889
// network capabilities, going forward, please append "network." prefix to any new networking capability we introduce
8990
networkCapabilityPrefix = "network."
@@ -318,6 +319,9 @@ func (agent *ecsAgent) capabilities() ([]types.Attribute, error) {
318319

319320
capabilities = agent.appendFaultInjectionCapabilities(capabilities)
320321

322+
// IPv6-only cap
323+
capabilities = appendIPv6OnlyCapability(capabilities)
324+
321325
return capabilities, nil
322326
}
323327

agent/app/agent_capability_unix.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,3 +306,9 @@ func checkTCShowTooling() bool {
306306
}
307307
return true
308308
}
309+
310+
// appendIPv6OnlyCapability appends ecs.capability.ipv6-only to passed capabilities and returns
311+
// the updated capabilities slice.
312+
func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute {
313+
return appendNameOnlyAttribute(capabilities, attributePrefix+capabilityIPv6Only)
314+
}

agent/app/agent_capability_unix_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,3 +1153,18 @@ func convertToInterfaceList(strings []string) []interface{} {
11531153
}
11541154
return interfaces
11551155
}
1156+
1157+
func TestAppendIPv6OnlyCapability(t *testing.T) {
1158+
capabilities := []types.Attribute{
1159+
types.Attribute{Name: aws.String("cap1")},
1160+
types.Attribute{Name: aws.String("cap2")},
1161+
}
1162+
capabilities = appendIPv6OnlyCapability(capabilities)
1163+
assert.Equal(t,
1164+
[]types.Attribute{
1165+
types.Attribute{Name: aws.String("cap1")},
1166+
types.Attribute{Name: aws.String("cap2")},
1167+
types.Attribute{Name: aws.String("ecs.capability.ipv6-only")},
1168+
},
1169+
capabilities)
1170+
}

agent/app/agent_capability_unspecified.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,8 @@ var isFaultInjectionToolingAvailable = checkFaultInjectionTooling
154154
func checkFaultInjectionTooling(_ *config.Config) bool {
155155
return false
156156
}
157+
158+
// appendIPv6OnlyCapability is a no-op.
159+
func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute {
160+
return capabilities
161+
}

agent/app/agent_capability_windows.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,8 @@ func checkFaultInjectionTooling(_ *config.Config) bool {
153153
seelog.Warnf("Fault injection tooling is not supported on windows")
154154
return false
155155
}
156+
157+
// appendIPv6OnlyCapability is a no-op as IPv6-only capability is not supported on Windows.
158+
func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute {
159+
return capabilities
160+
}

agent/app/agent_capability_windows_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,3 +345,17 @@ func TestAppendExecCapabilities(t *testing.T) {
345345
})
346346
}
347347
}
348+
349+
func TestAppendIPv6OnlyCapability(t *testing.T) {
350+
capabilities := []types.Attribute{
351+
types.Attribute{Name: aws.String("cap1")},
352+
types.Attribute{Name: aws.String("cap2")},
353+
}
354+
capabilities = appendIPv6OnlyCapability(capabilities)
355+
assert.Equal(t,
356+
[]types.Attribute{
357+
types.Attribute{Name: aws.String("cap1")},
358+
types.Attribute{Name: aws.String("cap2")},
359+
},
360+
capabilities)
361+
}

agent/config/config.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,7 @@ func NewConfig(ec2client ec2.EC2MetadataClient) (*Config, error) {
240240
ec2client = ec2.NewBlackholeEC2MetadataClient()
241241
}
242242

243-
// TODO feat:IPv6-only - Enable when launching IPv6-only support
244-
// config.determineIPCompatibility(ec2client)
243+
config.determineIPCompatibility(ec2client)
245244

246245
if config.complete() {
247246
// No need to do file / network IO

agent/config/config_unix.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,6 @@ func getConfigFileName() (string, error) {
175175
// determining the IP compatibility of the container instance.
176176
// This is a fallback to help with graceful adoption of Agent in IPv6-only environments
177177
// without disrupting existing environments.
178-
//
179-
// TODO feat:IPv6-only - Remove lint rule below
180-
//
181-
//lint:ignore U1000 Function will be used in the future
182178
func (c *Config) determineIPCompatibility(ec2client ec2.EC2MetadataClient) {
183179
var err error
184180
c.InstanceIPCompatibility, err = netutils.DetermineIPCompatibility(nlWrapper, "")

agent/config/config_unix_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,8 +353,6 @@ func TestDetermineIPCompatibility(t *testing.T) {
353353
// Tests that IPCompatibility defaults to IPv4-only when determining IP compatibility of
354354
// the container instance fails due to some error.
355355
func TestIPCompatibilityFallback(t *testing.T) {
356-
// TODO feat:IPv6-only - Remove skip
357-
t.Skip("Enable when launching IPv6-only support")
358356
defer setTestRegion()()
359357
ctrl := gomock.NewController(t)
360358
mockEc2Metadata := mock_ec2.NewMockEC2MetadataClient(ctrl)

0 commit comments

Comments
 (0)