Skip to content

Commit ebde5d2

Browse files
committed
IPv6-only capability and config initialization (aws#4659)
1 parent 191b54d commit ebde5d2

9 files changed

Lines changed: 50 additions & 8 deletions

agent/app/agent_capability.go

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

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

324325
capabilities = agent.appendFaultInjectionCapabilities(capabilities)
325326

327+
// IPv6-only cap
328+
capabilities = appendIPv6OnlyCapability(capabilities)
329+
326330
return capabilities, nil
327331
}
328332

agent/app/agent_capability_unix.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,9 @@ func checkTCShowTooling() bool {
311311
}
312312
return true
313313
}
314+
315+
// appendIPv6OnlyCapability appends ecs.capability.ipv6-only to passed capabilities and returns
316+
// the updated capabilities slice.
317+
func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute {
318+
return appendNameOnlyAttribute(capabilities, attributePrefix+capabilityIPv6Only)
319+
}

agent/app/agent_capability_unix_test.go

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

agent/app/agent_capability_unspecified.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,8 @@ var isFaultInjectionToolingAvailable = checkFaultInjectionTooling
158158
func checkFaultInjectionTooling(_ *config.Config) bool {
159159
return false
160160
}
161+
162+
// appendIPv6OnlyCapability is a no-op.
163+
func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute {
164+
return capabilities
165+
}

agent/app/agent_capability_windows.go

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

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()
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
@@ -174,10 +174,6 @@ func getConfigFileName() (string, error) {
174174
// determining the IP compatibility of the container instance.
175175
// This is a fallback to help with graceful adoption of Agent in IPv6-only environments
176176
// without disrupting existing environments.
177-
//
178-
// TODO feat:IPv6-only - Remove lint rule below
179-
//
180-
//lint:ignore U1000 Function will be used in the future
181177
func (c *Config) determineIPCompatibility() {
182178
var err error
183179
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
@@ -354,8 +354,6 @@ func TestDetermineIPCompatibility(t *testing.T) {
354354
// Tests that IPCompatibility defaults to IPv4-only when determining IP compatibility of
355355
// the container instance fails due to some error.
356356
func TestIPCompatibilityFallback(t *testing.T) {
357-
// TODO feat:IPv6-only - Remove skip
358-
t.Skip("Enable when launching IPv6-only support")
359357
defer setTestRegion()()
360358

361359
ctrl := gomock.NewController(t)

0 commit comments

Comments
 (0)