Skip to content

IPv6-only capability and config initialization (#4659) #4695

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions agent/app/agent_capability.go
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down Expand Up @@ -323,6 +324,9 @@ func (agent *ecsAgent) capabilities() ([]types.Attribute, error) {

capabilities = agent.appendFaultInjectionCapabilities(capabilities)

// IPv6-only cap
capabilities = appendIPv6OnlyCapability(capabilities)

return capabilities, nil
}

Expand Down
6 changes: 6 additions & 0 deletions agent/app/agent_capability_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
15 changes: 15 additions & 0 deletions agent/app/agent_capability_unix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
5 changes: 5 additions & 0 deletions agent/app/agent_capability_unspecified.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
5 changes: 5 additions & 0 deletions agent/app/agent_capability_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
14 changes: 14 additions & 0 deletions agent/app/agent_capability_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
3 changes: 1 addition & 2 deletions agent/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions agent/config/config_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -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, "")
Expand Down
2 changes: 0 additions & 2 deletions agent/config/config_unix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Loading