agent/app/agent_capability_unspecified.go (100 lines of code) (raw):
//go:build !linux && !windows
// +build !linux,!windows
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.
package app
import (
"errors"
"strings"
"github.com/aws/amazon-ecs-agent/agent/config"
"github.com/aws/amazon-ecs-agent/agent/dockerclient"
"github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi"
"github.com/aws/amazon-ecs-agent/agent/taskresource/volume"
"github.com/aws/aws-sdk-go-v2/service/ecs/types"
"github.com/cihub/seelog"
)
const (
capabilityDepsRootDir = ""
)
var (
capabilityExecRequiredBinaries = []string{}
dependencies = map[string][]string{}
)
func (agent *ecsAgent) appendVolumeDriverCapabilities(capabilities []types.Attribute) []types.Attribute {
// "local" is default docker driver
capabilities = appendNameOnlyAttribute(capabilities, attributePrefix+capabilityDockerPluginInfix+volume.DockerLocalVolumeDriver)
// for non-standardized plugins, call docker pkg's plugins.Scan()
nonStandardizedPlugins, err := agent.mobyPlugins.Scan()
if err != nil {
seelog.Warnf("Scanning plugins failed: %v", err)
// do not return yet, we need the list of plugins below. range handles nil slice.
}
for _, pluginName := range nonStandardizedPlugins {
// Replace the ':' to '.' in the plugin name for attributes
capabilities = appendNameOnlyAttribute(capabilities,
attributePrefix+capabilityDockerPluginInfix+strings.Replace(pluginName, config.DockerTagSeparator, attributeSeparator, -1))
}
// for standardized plugins, call docker's plugin ls API
pluginEnabled := true
volumeDriverType := []string{dockerapi.VolumeDriverType}
standardizedPlugins, err := agent.dockerClient.ListPluginsWithFilters(agent.ctx, pluginEnabled, volumeDriverType, dockerclient.ListPluginsTimeout)
if err != nil {
seelog.Warnf("Listing plugins with filters enabled=%t, capabilities=%v failed: %v", pluginEnabled, volumeDriverType, err)
return capabilities
}
// For plugin with default tag latest, register two attributes with and without the latest tag
// as the tag is optional and can be added by docker or customer
for _, pluginName := range standardizedPlugins {
names := strings.Split(pluginName, config.DockerTagSeparator)
if len(names) > 1 && names[len(names)-1] == config.DefaultDockerTag {
capabilities = appendNameOnlyAttribute(capabilities, attributePrefix+capabilityDockerPluginInfix+strings.Join(names[:len(names)-1], attributeSeparator))
}
capabilities = appendNameOnlyAttribute(capabilities,
attributePrefix+capabilityDockerPluginInfix+strings.Replace(pluginName, config.DockerTagSeparator, attributeSeparator, -1))
}
return capabilities
}
func (agent *ecsAgent) appendNvidiaDriverVersionAttribute(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendENITrunkingCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendPIDAndIPCNamespaceSharingCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendAppMeshCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendTaskEIACapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendFirelensFluentdCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendFirelensFluentbitCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendEFSCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendFirelensLoggingDriverCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendFirelensLoggingDriverConfigCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendFirelensConfigCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendGMSACapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendEFSVolumePluginCapabilities(capabilities []types.Attribute, pluginCapability string) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendIPv6Capability(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
func (agent *ecsAgent) appendFSxWindowsFileServerCapabilities(capabilities []types.Attribute) []types.Attribute {
return capabilities
}
// getTaskENIPluginVersionAttribute for unsupported platform would return an error
func (agent *ecsAgent) getTaskENIPluginVersionAttribute() (types.Attribute, error) {
return types.Attribute{}, errors.New("unsupported platform")
}
func defaultIsPlatformExecSupported() (bool, error) {
return false, nil
}
// var to allow mocking for checkNetworkTooling
var isFaultInjectionToolingAvailable = checkFaultInjectionTooling
// checkFaultInjectionTooling checks for the required network packages like iptables, tc
// to be available on the host before ecs.capability.fault-injection can be advertised
func checkFaultInjectionTooling() bool {
return false
}