diff --git a/agent/app/agent_capability.go b/agent/app/agent_capability.go index dca8b2176ca..c7609bf6ee4 100644 --- a/agent/app/agent_capability.go +++ b/agent/app/agent_capability.go @@ -85,6 +85,7 @@ const ( capabilityEBSTaskAttach = "storage.ebs-task-volume-attach" capabilityContainerRestartPolicy = "container-restart-policy" capabilityFaultInjection = "fault-injection" + capabilityIPv6Only = "ipv6-only" // network capabilities, going forward, please append "network." prefix to any new networking capability we introduce networkCapabilityPrefix = "network." @@ -323,6 +324,9 @@ func (agent *ecsAgent) capabilities() ([]types.Attribute, error) { capabilities = agent.appendFaultInjectionCapabilities(capabilities) + // IPv6-only cap + capabilities = appendIPv6OnlyCapability(capabilities) + return capabilities, nil } diff --git a/agent/app/agent_capability_unix.go b/agent/app/agent_capability_unix.go index 5f403a92fcb..b04b1a9d59d 100644 --- a/agent/app/agent_capability_unix.go +++ b/agent/app/agent_capability_unix.go @@ -311,3 +311,9 @@ func checkTCShowTooling() bool { } return true } + +// appendIPv6OnlyCapability appends ecs.capability.ipv6-only to passed capabilities and returns +// the updated capabilities slice. +func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute { + return appendNameOnlyAttribute(capabilities, attributePrefix+capabilityIPv6Only) +} diff --git a/agent/app/agent_capability_unix_test.go b/agent/app/agent_capability_unix_test.go index 0e56ce7ae05..97e35cc2aba 100644 --- a/agent/app/agent_capability_unix_test.go +++ b/agent/app/agent_capability_unix_test.go @@ -1154,3 +1154,18 @@ func convertToInterfaceList(strings []string) []interface{} { } return interfaces } + +func TestAppendIPv6OnlyCapability(t *testing.T) { + capabilities := []types.Attribute{ + types.Attribute{Name: aws.String("cap1")}, + types.Attribute{Name: aws.String("cap2")}, + } + capabilities = appendIPv6OnlyCapability(capabilities) + assert.Equal(t, + []types.Attribute{ + types.Attribute{Name: aws.String("cap1")}, + types.Attribute{Name: aws.String("cap2")}, + types.Attribute{Name: aws.String("ecs.capability.ipv6-only")}, + }, + capabilities) +} diff --git a/agent/app/agent_capability_unspecified.go b/agent/app/agent_capability_unspecified.go index 8a9f012e0b1..3b7a2cfb514 100644 --- a/agent/app/agent_capability_unspecified.go +++ b/agent/app/agent_capability_unspecified.go @@ -158,3 +158,8 @@ var isFaultInjectionToolingAvailable = checkFaultInjectionTooling func checkFaultInjectionTooling(_ *config.Config) bool { return false } + +// appendIPv6OnlyCapability is a no-op. +func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute { + return capabilities +} diff --git a/agent/app/agent_capability_windows.go b/agent/app/agent_capability_windows.go index 1df41ff60d1..c202225734c 100644 --- a/agent/app/agent_capability_windows.go +++ b/agent/app/agent_capability_windows.go @@ -157,3 +157,8 @@ func checkFaultInjectionTooling(_ *config.Config) bool { seelog.Warnf("Fault injection tooling is not supported on windows") return false } + +// appendIPv6OnlyCapability is a no-op as IPv6-only capability is not supported on Windows. +func appendIPv6OnlyCapability(capabilities []types.Attribute) []types.Attribute { + return capabilities +} diff --git a/agent/app/agent_capability_windows_test.go b/agent/app/agent_capability_windows_test.go index 3c6cba27703..c8e3b7abced 100644 --- a/agent/app/agent_capability_windows_test.go +++ b/agent/app/agent_capability_windows_test.go @@ -345,3 +345,17 @@ func TestAppendExecCapabilities(t *testing.T) { }) } } + +func TestAppendIPv6OnlyCapability(t *testing.T) { + capabilities := []types.Attribute{ + types.Attribute{Name: aws.String("cap1")}, + types.Attribute{Name: aws.String("cap2")}, + } + capabilities = appendIPv6OnlyCapability(capabilities) + assert.Equal(t, + []types.Attribute{ + types.Attribute{Name: aws.String("cap1")}, + types.Attribute{Name: aws.String("cap2")}, + }, + capabilities) +} diff --git a/agent/config/config.go b/agent/config/config.go index 562565a1f92..4a703b73073 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -240,8 +240,7 @@ func NewConfig(ec2client ec2.EC2MetadataClient) (*Config, error) { ec2client = ec2.NewBlackholeEC2MetadataClient() } - // TODO feat:IPv6-only - Enable when launching IPv6-only support - // config.determineIPCompatibility(ec2client) + config.determineIPCompatibility() if config.complete() { // No need to do file / network IO diff --git a/agent/config/config_unix.go b/agent/config/config_unix.go index a84b174d42d..49aee712ad1 100644 --- a/agent/config/config_unix.go +++ b/agent/config/config_unix.go @@ -174,10 +174,6 @@ func getConfigFileName() (string, error) { // determining the IP compatibility of the container instance. // This is a fallback to help with graceful adoption of Agent in IPv6-only environments // without disrupting existing environments. -// -// TODO feat:IPv6-only - Remove lint rule below -// -//lint:ignore U1000 Function will be used in the future func (c *Config) determineIPCompatibility() { var err error c.InstanceIPCompatibility, err = netutils.DetermineIPCompatibility(nlWrapper, "") diff --git a/agent/config/config_unix_test.go b/agent/config/config_unix_test.go index 757405cbfa8..83538ca0de8 100644 --- a/agent/config/config_unix_test.go +++ b/agent/config/config_unix_test.go @@ -354,8 +354,6 @@ func TestDetermineIPCompatibility(t *testing.T) { // Tests that IPCompatibility defaults to IPv4-only when determining IP compatibility of // the container instance fails due to some error. func TestIPCompatibilityFallback(t *testing.T) { - // TODO feat:IPv6-only - Remove skip - t.Skip("Enable when launching IPv6-only support") defer setTestRegion()() ctrl := gomock.NewController(t)