agent/app/agent_capability_windows.go (103 lines of code) (raw):

//go:build windows // +build 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 ( "path/filepath" "github.com/aws/amazon-ecs-agent/agent/config" "github.com/aws/amazon-ecs-agent/agent/ecscni" "github.com/aws/amazon-ecs-agent/agent/taskresource/volume" "github.com/aws/aws-sdk-go-v2/service/ecs/types" "github.com/aws/aws-sdk-go/aws" "github.com/cihub/seelog" ) var ( capabilityDepsRootDir = filepath.Join(config.AmazonECSProgramFiles, "managed-agents") ssmPluginDir = filepath.Join(config.AmazonProgramFiles, "SSM", "Plugins") sessionManagerShellDir = filepath.Join(ssmPluginDir, "SessionManagerShell") awsCloudWatchDir = filepath.Join(ssmPluginDir, "awsCloudWatch") awsDomainJoin = filepath.Join(ssmPluginDir, "awsDomainJoin") capabilityExecRequiredBinaries = []string{ "amazon-ssm-agent.exe", "ssm-agent-worker.exe", "ssm-session-worker.exe", } // top-level folders, /bin, /config, /plugins dependencies = map[string][]string{ binDir: []string{}, configDir: []string{}, ssmPluginDir: []string{}, sessionManagerShellDir: []string{}, awsCloudWatchDir: []string{}, awsDomainJoin: []string{}, } ) func (agent *ecsAgent) appendVolumeDriverCapabilities(capabilities []types.Attribute) []types.Attribute { // "local" is default docker driver return appendNameOnlyAttribute(capabilities, attributePrefix+capabilityDockerPluginInfix+volume.DockerLocalVolumeDriver) } 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) 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 { if agent.cfg.FSxWindowsFileServerCapable.Enabled() { return appendNameOnlyAttribute(capabilities, attributePrefix+capabilityFSxWindowsFileServer) } return capabilities } // getTaskENIPluginVersionAttribute returns the version information of the ECS // CNI plugins. It just executes the vpc-eni plugin to get the Version information. // Currently, only this plugin is used by ECS Windows for awsvpc mode. func (agent *ecsAgent) getTaskENIPluginVersionAttribute() (types.Attribute, error) { version, err := agent.cniClient.Version(ecscni.ECSVPCENIPluginExecutable) if err != nil { seelog.Warnf( "Unable to determine the version of the plugin '%s': %v", ecscni.VPCENIPluginName, err) return types.Attribute{}, err } return types.Attribute{ Name: aws.String(attributePrefix + cniPluginVersionSuffix), Value: aws.String(version), }, nil } var isWindows2016 = config.IsWindows2016 func defaultIsPlatformExecSupported() (bool, error) { if windows2016, err := isWindows2016(); err != nil || windows2016 { return false, err } return true, 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 { seelog.Warnf("Fault injection tooling is not supported on windows") return false }