Documentation ¶
Index ¶
- Constants
- func IsInstanceTypeChangedError(err error) bool
- func PortBindingFromDockerPortBinding(dockerPortBindings map[docker.Port][]docker.PortBinding) ([]PortBinding, NamedError)
- func ValidateTaskENI(acsenis []*ecsacs.ElasticNetworkInterface) error
- type Container
- func (c *Container) AWSLogAuthExecutionRole() bool
- func (c *Container) DesiredTerminal() bool
- func (c *Container) GetDesiredStatus() ContainerStatus
- func (c *Container) GetKnownExitCode() *int
- func (c *Container) GetKnownStatus() ContainerStatus
- func (c *Container) GetNextKnownStateProgression() ContainerStatus
- func (c *Container) GetSentStatus() ContainerStatus
- func (c *Container) GetSteadyStateStatus() ContainerStatus
- func (c *Container) IsEssential() bool
- func (c *Container) IsInternal() bool
- func (c *Container) IsKnownSteadyState() bool
- func (c *Container) IsMetadataFileUpdated() bool
- func (c *Container) IsRunning() bool
- func (c *Container) KnownTerminal() bool
- func (c *Container) SetDesiredStatus(status ContainerStatus)
- func (c *Container) SetKnownExitCode(i *int)
- func (c *Container) SetKnownStatus(status ContainerStatus)
- func (c *Container) SetMetadataFileUpdated()
- func (c *Container) SetRegistryAuthCredentials(credential credentials.IAMRoleCredentials)
- func (c *Container) SetSentStatus(status ContainerStatus)
- func (c *Container) ShouldPullWithExecutionRole() bool
- func (c *Container) String() string
- type ContainerDependency
- type ContainerOverrides
- type ContainerOverridesCopy
- type ContainerStateChange
- type ContainerStatus
- func (cs *ContainerStatus) BackendStatus(steadyStateStatus ContainerStatus) ContainerStatus
- func (cs ContainerStatus) IsRunning() bool
- func (cs *ContainerStatus) MarshalJSON() ([]byte, error)
- func (cs *ContainerStatus) ShouldReportToBackend(steadyStateStatus ContainerStatus) bool
- func (cs ContainerStatus) String() string
- func (cs *ContainerStatus) TaskStatus(steadyStateStatus ContainerStatus) TaskStatus
- func (cs ContainerStatus) Terminal() bool
- func (cs *ContainerStatus) UnmarshalJSON(b []byte) error
- type ContainerType
- type DefaultNamedError
- type DockerClientConfigError
- type DockerConfig
- type DockerContainer
- type ECRAuthData
- type ECSClient
- type ECSSDK
- type ECSSubmitStateSDK
- type ENI
- type ENIAttachment
- type ENIAttachmentStatus
- type ENIIPV4Address
- type ENIIPV6Address
- type EmptyHostVolume
- type FSHostVolume
- type HostConfigError
- type HostVolume
- type MountPoint
- type NamedError
- type PortBinding
- type RegistryAuthenticationData
- type Task
- func (task *Task) ApplyExecutionRoleLogsAuth(hostConfig *docker.HostConfig, credentialsManager credentials.Manager) *HostConfigError
- func (task *Task) BuildCNIConfig() (*ecscni.Config, error)
- func (task *Task) BuildCgroupRoot() (string, error)
- func (task *Task) BuildLinuxResourceSpec() (specs.LinuxResources, error)
- func (task *Task) ContainerByName(name string) (*Container, bool)
- func (task *Task) DockerConfig(container *Container, apiVersion dockerclient.DockerVersion) (*docker.Config, *DockerClientConfigError)
- func (task *Task) DockerHostConfig(container *Container, dockerContainerMap map[string]*DockerContainer, ...) (*docker.HostConfig, *HostConfigError)
- func (task *Task) GetCredentialsID() string
- func (task *Task) GetDesiredStatus() TaskStatus
- func (task *Task) GetExecutionCredentialsID() string
- func (task *Task) GetExecutionStoppedAt() time.Time
- func (task *Task) GetID() (string, error)
- func (task *Task) GetKnownStatus() TaskStatus
- func (task *Task) GetKnownStatusTime() time.Time
- func (task *Task) GetPullStartedAt() time.Time
- func (task *Task) GetPullStoppedAt() time.Time
- func (task *Task) GetSentStatus() TaskStatus
- func (task *Task) GetStopSequenceNumber() int64
- func (task *Task) GetTaskENI() *ENI
- func (task *Task) HostVolumeByName(name string) (HostVolume, bool)
- func (task *Task) PostUnmarshalTask(cfg *config.Config, credentialsManager credentials.Manager)
- func (task *Task) SetConfigHostconfigBasedOnVersion(container *Container, config *docker.Config, hc *docker.HostConfig, ...) error
- func (task *Task) SetCredentialsID(id string)
- func (task *Task) SetDesiredStatus(status TaskStatus)
- func (task *Task) SetExecutionRoleCredentialsID(id string)
- func (task *Task) SetExecutionStoppedAt(timestamp time.Time) bool
- func (task *Task) SetKnownStatus(status TaskStatus)
- func (task *Task) SetPullStartedAt(timestamp time.Time) bool
- func (task *Task) SetPullStoppedAt(timestamp time.Time)
- func (task *Task) SetSentStatus(status TaskStatus)
- func (task *Task) SetStopSequenceNumber(seqnum int64)
- func (task *Task) SetTaskENI(eni *ENI)
- func (task *Task) String() string
- func (task *Task) UpdateDesiredStatus()
- func (task *Task) UpdateMountPoints(cont *Container, vols map[string]string)
- func (task *Task) UpdateStatus() bool
- type TaskOverrides
- type TaskStateChange
- type TaskStatus
- func (ts *TaskStatus) BackendRecognized() bool
- func (ts *TaskStatus) BackendStatus() string
- func (ts *TaskStatus) ContainerStatus(steadyState ContainerStatus) ContainerStatus
- func (ts *TaskStatus) MarshalJSON() ([]byte, error)
- func (ts TaskStatus) String() string
- func (ts TaskStatus) Terminal() bool
- func (ts *TaskStatus) UnmarshalJSON(b []byte) error
- type TaskVolume
- type TransitionDependencySet
- type TransportProtocol
- type VolumeFrom
- Bugs
Constants ¶
const ( UnrecognizedTransportProtocolErrorName = "UnrecognizedTransportProtocol" UnparseablePortErrorName = "UnparsablePort" )
const ( // DockerContainerMinimumMemoryInBytes is the minimum amount of // memory to be allocated to a docker container DockerContainerMinimumMemoryInBytes = 4 * 1024 * 1024 // 4MB )
const InstanceTypeChangedErrorMessage = "Container instance type changes are not supported."
InstanceTypeChangedErrorMessage is the error message to print for the instance type changed error when registering a container instance
const OSType = "unknown"
const (
// PauseContainerName is the internal name for the pause container
PauseContainerName = "~internal~ecs~pause"
)
Variables ¶
This section is empty.
Functions ¶
func IsInstanceTypeChangedError ¶ added in v1.3.1
IsInstanceTypeChangedError returns true if the error when registering the container instance is because of instance type being changed
func PortBindingFromDockerPortBinding ¶
func PortBindingFromDockerPortBinding(dockerPortBindings map[docker.Port][]docker.PortBinding) ([]PortBinding, NamedError)
PortBindingFromDockerPortBinding constructs a PortBinding slice from a docker NetworkSettings.Ports map.
func ValidateTaskENI ¶ added in v1.14.5
func ValidateTaskENI(acsenis []*ecsacs.ElasticNetworkInterface) error
ValidateTaskENI validates the eni informaiton sent from acs
Types ¶
type Container ¶
type Container struct { // Name is the name of the container specified in the task definition Name string // Image is the image name specified in the task definition Image string // ImageID is the local ID of the image used in the container ImageID string Command []string CPU uint `json:"Cpu"` Memory uint Links []string VolumesFrom []VolumeFrom `json:"volumesFrom"` MountPoints []MountPoint `json:"mountPoints"` Ports []PortBinding `json:"portMappings"` Essential bool EntryPoint *[]string Environment map[string]string `json:"environment"` Overrides ContainerOverrides `json:"overrides"` DockerConfig DockerConfig `json:"dockerConfig"` RegistryAuthentication *RegistryAuthenticationData `json:"registryAuthentication"` // LogsAuthStrategy specifies how the logs driver for the container will be // authenticated LogsAuthStrategy string // DesiredStatusUnsafe represents the state where the container should go. Generally, // the desired status is informed by the ECS backend as a result of either // API calls made to ECS or decisions made by the ECS service scheduler, // though the agent may also set the DesiredStatusUnsafe if a different "essential" // container in the task exits. The DesiredStatus is almost always either // ContainerRunning or ContainerStopped. // NOTE: Do not access DesiredStatusUnsafe directly. Instead, use `GetDesiredStatus` // and `SetDesiredStatus`. // TODO DesiredStatusUnsafe should probably be private with appropriately written // setter/getter. When this is done, we need to ensure that the UnmarshalJSON // is handled properly so that the state storage continues to work. DesiredStatusUnsafe ContainerStatus `json:"desiredStatus"` // KnownStatusUnsafe represents the state where the container is. // NOTE: Do not access `KnownStatusUnsafe` directly. Instead, use `GetKnownStatus` // and `SetKnownStatus`. // TODO KnownStatusUnsafe should probably be private with appropriately written // setter/getter. When this is done, we need to ensure that the UnmarshalJSON // is handled properly so that the state storage continues to work. KnownStatusUnsafe ContainerStatus `json:"KnownStatus"` // TransitionDependencySet is a set of dependencies that must be satisfied // in order for this container to transition. Each transition dependency // specifies a resource upon which the transition is dependent, a status // that depends on the resource, and the state of the dependency that // satisfies. TransitionDependencySet TransitionDependencySet `json:"TransitionDependencySet"` // SteadyStateDependencies is a list of containers that must be in "steady state" before // this one is created // Note: Current logic requires that the containers specified here are run // before this container can even be pulled. // // Deprecated: Use TransitionDependencySet instead. SteadyStateDependencies is retained for compatibility with old // state files. SteadyStateDependencies []string `json:"RunDependencies"` // Type specifies the container type. Except the 'Normal' type, all other types // are not directly specified by task definitions, but created by the agent. The // JSON tag is retained as this field's previous name 'IsInternal' for maintaining // backwards compatibility. Please see JSON parsing hooks for this type for more // details Type ContainerType `json:"IsInternal"` // AppliedStatus is the status that has been "applied" (e.g., we've called Pull, // Create, Start, or Stop) but we don't yet know that the application was successful. AppliedStatus ContainerStatus // ApplyingError is an error that occured trying to transition the container // to its desired state. It is propagated to the backend in the form // 'Name: ErrorString' as the 'reason' field. ApplyingError *DefaultNamedError // SentStatusUnsafe represents the last KnownStatusUnsafe that was sent to the ECS // SubmitContainerStateChange API. // TODO SentStatusUnsafe should probably be private with appropriately written // setter/getter. When this is done, we need to ensure that the UnmarshalJSON is // handled properly so that the state storage continues to work. SentStatusUnsafe ContainerStatus `json:"SentStatus"` // MetadataFileUpdated is set to true when we have completed updating the // metadata file MetadataFileUpdated bool `json:"metadataFileUpdated"` KnownPortBindings []PortBinding // SteadyStateStatusUnsafe specifies the steady state status for the container // If uninitialized, it's assumed to be set to 'ContainerRunning'. Even though // it's not only supposed to be set when the container is being created, it's // exposed outside of the package so that it's marshalled/unmarshalled in the // the JSON body while saving the state SteadyStateStatusUnsafe *ContainerStatus `json:"SteadyStateStatus,omitempty"` // contains filtered or unexported fields }
Container is the internal representation of a container in the ECS agent
func NewContainerWithSteadyState ¶ added in v1.14.5
func NewContainerWithSteadyState(steadyState ContainerStatus) *Container
NewContainerWithSteadyState creates a new Container object with the specified steady state. Containers that need the non default steady state set will use this method instead of setting it directly
func (*Container) AWSLogAuthExecutionRole ¶ added in v1.16.0
LogAuthExecutionRole returns true if the auth is by exectution role
func (*Container) DesiredTerminal ¶
DesiredTerminal returns true if the container's desired status is STOPPED
func (*Container) GetDesiredStatus ¶ added in v1.12.2
func (c *Container) GetDesiredStatus() ContainerStatus
GetDesiredStatus gets the desired status of the container
func (*Container) GetKnownExitCode ¶ added in v1.14.4
GetKnownExitCode returns the container exit code
func (*Container) GetKnownStatus ¶ added in v1.12.2
func (c *Container) GetKnownStatus() ContainerStatus
GetKnownStatus returns the known status of the container
func (*Container) GetNextKnownStateProgression ¶ added in v1.14.5
func (c *Container) GetNextKnownStateProgression() ContainerStatus
GetNextKnownStateProgression returns the state that the container should progress to based on its `KnownState`. The progression is incremental until the container reaches its steady state. From then on, it transitions to `ContainerStopped`.
For example: a. if the steady state of the container is defined as `ContainerRunning`, the progression is: Container: None -> Pulled -> Created -> Running* -> Stopped -> Zombie
b. if the steady state of the container is defined as `ContainerResourcesProvisioned`, the progression is: Container: None -> Pulled -> Created -> Running -> Provisioned* -> Stopped -> Zombie
c. if the steady state of the container is defined as `ContainerCreated`, the progression is: Container: None -> Pulled -> Created* -> Stopped -> Zombie
func (*Container) GetSentStatus ¶ added in v1.14.1
func (c *Container) GetSentStatus() ContainerStatus
GetSentStatus safely returns the SentStatusUnsafe of the container
func (*Container) GetSteadyStateStatus ¶ added in v1.14.5
func (c *Container) GetSteadyStateStatus() ContainerStatus
GetSteadyStateStatus returns the steady state status for the container. If Container.steadyState is not initialized, the default steady state status defined by `defaultContainerSteadyStateStatus` is returned. The 'pause' container's steady state differs from that of other containers, as the 'pause' container can reach its teady state once networking resources have been provisioned for it, which is done in the `ContainerResourcesProvisioned` state
func (*Container) IsEssential ¶ added in v1.16.0
IsEssential returns whether the container is an essential container or not
func (*Container) IsInternal ¶
IsInternal returns true if the container type is either `ContainerEmptyHostVolume` or `ContainerCNIPause`. It returns false otherwise
func (*Container) IsKnownSteadyState ¶ added in v1.14.5
IsKnownSteadyState returns true if the `KnownState` of the container equals the `steadyState` defined for the container
func (*Container) IsMetadataFileUpdated ¶ added in v1.15.0
IsMetadataFileUpdated returns true if the metadata file has been once the metadata file is ready and will no longer change
func (*Container) IsRunning ¶ added in v1.14.5
IsRunning returns true if the container's known status is either RUNNING or RESOURCES_PROVISIONED. It returns false otherwise
func (*Container) KnownTerminal ¶
KnownTerminal returns true if the container's known status is STOPPED
func (*Container) SetDesiredStatus ¶ added in v1.12.2
func (c *Container) SetDesiredStatus(status ContainerStatus)
SetDesiredStatus sets the desired status of the container
func (*Container) SetKnownExitCode ¶ added in v1.14.4
SetKnownExitCode sets exit code field in container struct
func (*Container) SetKnownStatus ¶ added in v1.12.2
func (c *Container) SetKnownStatus(status ContainerStatus)
SetKnownStatus sets the known status of the container
func (*Container) SetMetadataFileUpdated ¶ added in v1.15.0
func (c *Container) SetMetadataFileUpdated()
SetMetadataFileUpdated sets the container's MetadataFileUpdated status to true
func (*Container) SetRegistryAuthCredentials ¶ added in v1.16.0
func (c *Container) SetRegistryAuthCredentials(credential credentials.IAMRoleCredentials)
SetRegistryAuthCredentials sets the credentials for pulling image from ECR
func (*Container) SetSentStatus ¶ added in v1.14.1
func (c *Container) SetSentStatus(status ContainerStatus)
SetSentStatus safely sets the SentStatusUnsafe of the container
func (*Container) ShouldPullWithExecutionRole ¶ added in v1.16.0
ShouldPullWithExecutionRole returns whether this container has its own ECR credentials
type ContainerDependency ¶ added in v1.14.5
type ContainerDependency struct { // ContainerName defines the container on which a transition depends ContainerName string `json:"ContainerName"` // SatisfiedStatus defines the status that satisfies the dependency SatisfiedStatus ContainerStatus `json:"SatisfiedStatus"` // DependentStatus defines the status that cannot be reached until the // resource satisfies the dependency DependentStatus ContainerStatus `json:"DependentStatus"` }
ContainerDependency defines the relationship between a dependent container and its dependency.
type ContainerOverrides ¶
type ContainerOverrides struct {
Command *[]string `json:"command"`
}
ContainerOverrides are overrides applied to the container
func (*ContainerOverrides) UnmarshalJSON ¶
func (overrides *ContainerOverrides) UnmarshalJSON(b []byte) error
UnmarshalJSON overrides the logic for parsing the JSON-encoded ContainerOverrides data This custom unmarshaller is needed because the json sent to us as a string rather than a fully typed object. We support both formats in the hopes that one day everything will be fully typed Note: the `json:",string"` tag DOES NOT apply here; it DOES NOT work with struct types, only ints/floats/etc. We're basically doing that though We also intentionally fail if there are any keys we were unable to unmarshal into our struct
type ContainerOverridesCopy ¶
type ContainerOverridesCopy ContainerOverrides
ContainerOverridesCopy is a type alias that doesn't have a custom unmarshaller so we can unmarshal ContainerOverrides data into something without recursing
type ContainerStateChange ¶
type ContainerStateChange struct { // TaskArn is the unique identifier for the task TaskArn string // ContainerName is the name of the container ContainerName string // Status is the status to send Status ContainerStatus // Reason may contain details of why the container stopped Reason string // ExitCode is the exit code of the container, if available ExitCode *int // PortBindings are the details of the host ports picked for the specified // container ports PortBindings []PortBinding // Container is a pointer to the container involved in the state change that gives the event handler a hook into // storing what status was sent. This is used to ensure the same event is handled only once. Container *Container }
ContainerStateChange represents a state change that needs to be sent to the SubmitContainerStateChange API
func (ContainerStateChange) GetEventType ¶ added in v1.14.2
func (c ContainerStateChange) GetEventType() statechange.EventType
GetEventType returns an enum identifying the event type
func (*ContainerStateChange) String ¶ added in v1.3.1
func (c *ContainerStateChange) String() string
String returns a human readable string representation of this object
type ContainerStatus ¶
type ContainerStatus int32
ContainerStatus is an enumeration of valid states in the container lifecycle
const ( // ContainerStatusNone is the zero state of a container; this container has not completed pull ContainerStatusNone ContainerStatus = iota // ContainerPulled represents a container which has had the image pulled ContainerPulled // ContainerCreated represents a container that has been created ContainerCreated // ContainerRunning represents a container that has started ContainerRunning // ContainerResourcesProvisioned represents a container that has completed provisioning all of its // resources. Non-internal containers (containers present in the task definition) transition to // this state without doing any additional work. However, containers that are added to a task // by the ECS Agent would possibly need to perform additional actions before they can be // considered "ready" and contribute to the progress of a task. For example, the "pause" container // would be provisioned by invoking CNI plugins ContainerResourcesProvisioned // ContainerStopped represents a container that has stopped ContainerStopped // ContainerZombie is an "impossible" state that is used as the maximum ContainerZombie )
func (*ContainerStatus) BackendStatus ¶ added in v1.14.5
func (cs *ContainerStatus) BackendStatus(steadyStateStatus ContainerStatus) ContainerStatus
BackendStatus maps the internal container status in the agent to that in the backend
func (ContainerStatus) IsRunning ¶ added in v1.14.5
func (cs ContainerStatus) IsRunning() bool
IsRunning returns true if the container status is either RUNNING or RESOURCES_PROVISIONED
func (*ContainerStatus) MarshalJSON ¶
func (cs *ContainerStatus) MarshalJSON() ([]byte, error)
MarshalJSON overrides the logic for JSON-encoding the ContainerStatus type
func (*ContainerStatus) ShouldReportToBackend ¶ added in v1.14.5
func (cs *ContainerStatus) ShouldReportToBackend(steadyStateStatus ContainerStatus) bool
ShouldReportToBackend returns true if the container status is recognized as a valid state by ECS. Note that not all container statuses are recognized by ECS or map to ECS states
func (ContainerStatus) String ¶
func (cs ContainerStatus) String() string
String returns a human readable string representation of this object
func (*ContainerStatus) TaskStatus ¶
func (cs *ContainerStatus) TaskStatus(steadyStateStatus ContainerStatus) TaskStatus
TaskStatus maps the container status to the corresponding task status. The transition map is illustrated below.
Container: None -> Pulled -> Created -> Running -> Provisioned -> Stopped -> Zombie
Task : None -> Created -> Running -> Stopped
func (ContainerStatus) Terminal ¶
func (cs ContainerStatus) Terminal() bool
Terminal returns true if the container status is STOPPED
func (*ContainerStatus) UnmarshalJSON ¶
func (cs *ContainerStatus) UnmarshalJSON(b []byte) error
UnmarshalJSON overrides the logic for parsing the JSON-encoded TaskStatus data
type ContainerType ¶ added in v1.14.5
type ContainerType int32
ContainerType represents the type of the internal container created
const ( // ContainerNormal represents the container type for 'Normal' containers // These are the ones specified in the task definition via container // definitions ContainerNormal ContainerType = iota // ContainerEmptyHostVolume represents the internal container type // for the empty volumes container ContainerEmptyHostVolume // ContainerCNIPause represents the internal container type for the // pause container ContainerCNIPause )
func (*ContainerType) MarshalJSON ¶ added in v1.14.5
func (containerType *ContainerType) MarshalJSON() ([]byte, error)
MarshalJSON overrides the logic for JSON-encoding a ContainerType object
func (ContainerType) String ¶ added in v1.14.5
func (containerType ContainerType) String() string
String converts the container type enum to a string
func (*ContainerType) UnmarshalJSON ¶ added in v1.14.5
func (containerType *ContainerType) UnmarshalJSON(b []byte) error
UnmarshalJSON decodes the container type field in the JSON encoded string into the ContainerType object
type DefaultNamedError ¶ added in v1.1.0
DefaultNamedError is a wrapper type for 'error' which adds an optional name and provides a symmetric marshal/unmarshal
func NewNamedError ¶ added in v1.1.0
func NewNamedError(err error) *DefaultNamedError
NewNamedError creates a NamedError.
func (*DefaultNamedError) Error ¶ added in v1.1.0
func (err *DefaultNamedError) Error() string
Error implements error
func (*DefaultNamedError) ErrorName ¶ added in v1.1.0
func (err *DefaultNamedError) ErrorName() string
ErrorName implements NamedError
type DockerClientConfigError ¶ added in v1.1.0
type DockerClientConfigError struct {
// contains filtered or unexported fields
}
func (*DockerClientConfigError) Error ¶ added in v1.1.0
func (err *DockerClientConfigError) Error() string
func (*DockerClientConfigError) ErrorName ¶ added in v1.1.0
func (err *DockerClientConfigError) ErrorName() string
type DockerConfig ¶ added in v1.5.0
type DockerConfig struct { Config *string `json:"config"` HostConfig *string `json:"hostConfig"` Version *string `json:"version"` }
DockerConfig represents additional metadata about a container to run. It's remodeled from the `ecsacs` api model file. Eventually it should not exist once this remodeling is refactored out.
type DockerContainer ¶
type DockerContainer struct { DockerID string `json:"DockerId"` DockerName string // needed for linking Container *Container }
DockerContainer is a mapping between containers-as-docker-knows-them and containers-as-we-know-them. This is primarily used in DockerState, but lives here such that tasks and containers know how to convert themselves into Docker's desired config format
func (*DockerContainer) String ¶
func (dc *DockerContainer) String() string
String returns a human readable string representation of DockerContainer
type ECRAuthData ¶ added in v1.7.0
type ECRAuthData struct { EndpointOverride string `json:"endpointOverride"` Region string `json:"region"` RegistryID string `json:"registryId"` UseExecutionRole bool `json:"useExecutionRole"` // contains filtered or unexported fields }
ECRAuthData is the authentication details for ECR specifying the region, registryID, and possible endpoint override
func (*ECRAuthData) GetPullCredentials ¶ added in v1.16.0
func (auth *ECRAuthData) GetPullCredentials() credentials.IAMRoleCredentials
GetPullCredentials returns the pull credentials in the auth
func (*ECRAuthData) SetPullCredentials ¶ added in v1.16.0
func (auth *ECRAuthData) SetPullCredentials(creds credentials.IAMRoleCredentials)
SetPullCredentials sets the credentials to pull from ECR in the auth
type ECSClient ¶
type ECSClient interface { // RegisterContainerInstance calculates the appropriate resources, creates // the default cluster if necessary, and returns the registered // ContainerInstanceARN if successful. Supplying a non-empty container // instance ARN allows a container instance to update its registered // resources. RegisterContainerInstance(existingContainerInstanceArn string, attributes []*ecs.Attribute) (string, error) // SubmitTaskStateChange sends a state change and returns an error // indicating if it was submitted SubmitTaskStateChange(change TaskStateChange) error // SubmitContainerStateChange sends a state change and returns an error // indicating if it was submitted SubmitContainerStateChange(change ContainerStateChange) error // DiscoverPollEndpoint takes a ContainerInstanceARN and returns the // endpoint at which this Agent should contact ACS DiscoverPollEndpoint(containerInstanceArn string) (string, error) // DiscoverTelemetryEndpoint takes a ContainerInstanceARN and returns the // endpoint at which this Agent should contact Telemetry Service DiscoverTelemetryEndpoint(containerInstanceArn string) (string, error) }
ECSClient is an interface over the ECSSDK interface which abstracts away some details around constructing the request and reading the response down to the parts the agent cares about. For example, the ever-present 'Cluster' member is abstracted out so that it may be configured once and used throughout transparently.
type ECSSDK ¶ added in v1.1.0
type ECSSDK interface { CreateCluster(*ecs.CreateClusterInput) (*ecs.CreateClusterOutput, error) RegisterContainerInstance(*ecs.RegisterContainerInstanceInput) (*ecs.RegisterContainerInstanceOutput, error) DiscoverPollEndpoint(*ecs.DiscoverPollEndpointInput) (*ecs.DiscoverPollEndpointOutput, error) }
ECSSDK is an interface that specifies the subset of the AWS Go SDK's ECS client that the Agent uses. This interface is meant to allow injecting a mock for testing.
type ECSSubmitStateSDK ¶ added in v1.4.0
type ECSSubmitStateSDK interface { SubmitContainerStateChange(*ecs.SubmitContainerStateChangeInput) (*ecs.SubmitContainerStateChangeOutput, error) SubmitTaskStateChange(*ecs.SubmitTaskStateChangeInput) (*ecs.SubmitTaskStateChangeOutput, error) }
type ENI ¶ added in v1.14.5
type ENI struct { // ID is the id of eni ID string `json:"ec2Id"` // IPV4Addresses is the ipv4 address associated with the eni IPV4Addresses []*ENIIPV4Address // IPV6Addresses is the ipv6 address associated with the eni IPV6Addresses []*ENIIPV6Address // MacAddress is the mac address of the eni MacAddress string // DomainNameServers specifies the nameserver IP addresses for // the eni DomainNameServers []string `json:"omitempty"` // DomainNameSearchList specifies the search list for the domain // name lookup, for the eni DomainNameSearchList []string `json:"omitempty"` }
ENI contains information of the eni
func ENIFromACS ¶ added in v1.14.5
func ENIFromACS(acsenis []*ecsacs.ElasticNetworkInterface) (*ENI, error)
ENIFromACS validates the information from acs message and create the ENI object
type ENIAttachment ¶ added in v1.14.5
type ENIAttachment struct { // TaskARN is the task identifier from ecs TaskARN string `json:"taskArn"` // AttachmentARN is the identifier for the eni attachment AttachmentARN string `json:"attachmentArn"` // AttachStatusSent indicates whether the attached status has been sent to backend AttachStatusSent bool `json:"attachSent"` // MACAddress is the mac address of eni MACAddress string `json:"macAddress"` // Status is the status of the eni: none/attached/detached Status ENIAttachmentStatus `json:"status"` // ExpiresAt is the timestamp past which the ENI Attachment is considered // unsuccessful. The SubmitTaskStateChange API, with the attachment information // should be invoked before this timestamp. ExpiresAt time.Time `json:"expiresAt"` // contains filtered or unexported fields }
ENIAttachment contains the information of the eni attachment
func (*ENIAttachment) HasExpired ¶ added in v1.15.0
func (eni *ENIAttachment) HasExpired() bool
HasExpired returns true if the ENI attachment object has exceeded the threshold for notifying the backend of the attachment
func (*ENIAttachment) IsSent ¶ added in v1.14.5
func (eni *ENIAttachment) IsSent() bool
IsSent checks if the eni attached status has been sent
func (*ENIAttachment) SetSentStatus ¶ added in v1.14.5
func (eni *ENIAttachment) SetSentStatus()
SetSentStatus marks the eni attached status has been sent
func (*ENIAttachment) StartTimer ¶ added in v1.14.5
func (eni *ENIAttachment) StartTimer(timeoutFunc func()) error
StartTimer starts the ack timer to record the expiration of ENI attachment
func (*ENIAttachment) StopAckTimer ¶ added in v1.14.5
func (eni *ENIAttachment) StopAckTimer()
StopAckTimer stops the ack timer set on the ENI attachment
func (*ENIAttachment) String ¶ added in v1.14.5
func (eni *ENIAttachment) String() string
String returns a string representation of the ENI Attachment
type ENIAttachmentStatus ¶ added in v1.14.5
type ENIAttachmentStatus int32
ENIAttachmentStatus is an enumeration type for eni attachment state
const ( // ENIAttachmentNone is zero state of a task when received attachemessage from acs ENIAttachmentNone ENIAttachmentStatus = iota // ENIAttached represents that a eni has shown on the host ENIAttached // ENIDetached represents that a eni has been actually detached from the host ENIDetached )
func (*ENIAttachmentStatus) ShouldSend ¶ added in v1.14.5
func (eni *ENIAttachmentStatus) ShouldSend() bool
ShouldSend returns whether the status should be sent to backend
func (*ENIAttachmentStatus) String ¶ added in v1.14.5
func (eni *ENIAttachmentStatus) String() string
String return the string value of the eniattachment status
type ENIIPV4Address ¶ added in v1.14.5
type ENIIPV4Address struct { // Primary indicates whether the ip address is primary Primary bool // Address is the ipv4 address associated with eni Address string }
ENIIPV4Address is the ipv4 information of the eni
type ENIIPV6Address ¶ added in v1.14.5
type ENIIPV6Address struct { // Address is the ipv6 address associated with eni Address string }
ENIIPV6Address is the ipv6 information of the eni
type EmptyHostVolume ¶
type EmptyHostVolume struct {
HostPath string `json:"hostPath"`
}
EmptyHostVolume represents a volume without a specified host path
func (*EmptyHostVolume) SourcePath ¶
func (e *EmptyHostVolume) SourcePath() string
SourcePath returns the generated host path for the volume
type FSHostVolume ¶
type FSHostVolume struct {
FSSourcePath string `json:"sourcePath"`
}
FSHostVolume is a simple type of HostVolume which references an arbitrary location on the host as the Volume.
func (*FSHostVolume) SourcePath ¶
func (fs *FSHostVolume) SourcePath() string
SourcePath returns the path on the host filesystem that should be mounted
type HostConfigError ¶ added in v1.1.0
type HostConfigError struct {
// contains filtered or unexported fields
}
func (*HostConfigError) Error ¶ added in v1.1.0
func (err *HostConfigError) Error() string
func (*HostConfigError) ErrorName ¶ added in v1.1.0
func (err *HostConfigError) ErrorName() string
type HostVolume ¶
type HostVolume interface {
SourcePath() string
}
HostVolume is an interface for something that may be used as the host half of a docker volume mount
type MountPoint ¶
type MountPoint struct { SourceVolume string `json:"sourceVolume"` ContainerPath string `json:"containerPath"` ReadOnly bool `json:"readOnly"` }
MountPoint describes the in-container location of a Volume and references that Volume by name.
type NamedError ¶ added in v1.1.0
type PortBinding ¶
type PortBinding struct { // ContainerPort is the port inside the container ContainerPort uint16 // HostPort is the port exposed on the host HostPort uint16 // BindIP is the IP address to which the port is bound BindIP string `json:"BindIp"` // Protocol is the protocol of the port Protocol TransportProtocol }
PortBinding represents a port binding for a container
type RegistryAuthenticationData ¶ added in v1.7.0
type RegistryAuthenticationData struct { Type string `json:"type"` ECRAuthData *ECRAuthData `json:"ecrAuthData"` }
RegistryAuthenticationData is the authentication data sent by the ECS backend. Currently, the only supported authentication data is for ECR.
type Task ¶
type Task struct { // Arn is the unique identifer for the task Arn string // Overrides are the overrides applied to a task Overrides TaskOverrides `json:"-"` // Family is the name of the task definition family Family string // Version is the version of the task definition Version string // Containers are the containers for the task Containers []*Container // Volumes are the volumes for the task Volumes []TaskVolume `json:"volumes"` // CPU is a task-level limit for compute resources. A value of 1 means that // the task may access 100% of 1 vCPU on the instance CPU float64 `json:"Cpu,omitempty"` // Memory is a task-level limit for memory resources in bytes Memory int64 `json:"Memory,omitempty"` // DesiredStatusUnsafe represents the state where the task should go. Generally, // the desired status is informed by the ECS backend as a result of either // API calls made to ECS or decisions made by the ECS service scheduler. // The DesiredStatusUnsafe is almost always either TaskRunning or TaskStopped. // NOTE: Do not access DesiredStatusUnsafe directly. Instead, use `UpdateStatus`, // `UpdateDesiredStatus`, `SetDesiredStatus`, and `SetDesiredStatus`. // TODO DesiredStatusUnsafe should probably be private with appropriately written // setter/getter. When this is done, we need to ensure that the UnmarshalJSON // is handled properly so that the state storage continues to work. DesiredStatusUnsafe TaskStatus `json:"DesiredStatus"` // KnownStatusUnsafe represents the state where the task is. This is generally // the minimum of equivalent status types for the containers in the task; // if one container is at ContainerRunning and another is at ContainerPulled, // the task KnownStatusUnsafe would be TaskPulled. // NOTE: Do not access KnownStatusUnsafe directly. Instead, use `UpdateStatus`, // and `GetKnownStatus`. // TODO KnownStatusUnsafe should probably be private with appropriately written // setter/getter. When this is done, we need to ensure that the UnmarshalJSON // is handled properly so that the state storage continues to work. KnownStatusUnsafe TaskStatus `json:"KnownStatus"` // KnownStatusTimeUnsafe captures the time when the KnownStatusUnsafe was last updated. // NOTE: Do not access KnownStatusTime directly, instead use `GetKnownStatusTime`. KnownStatusTimeUnsafe time.Time `json:"KnownTime"` // PullStartedAt is the timestamp when the task start pulling the first container, // it won't be set if the pull never happens PullStartedAt time.Time `json:"PullStartedAt"` // PullStoppedAt is the timestamp when the task finished pulling the last container, // it won't be set if the pull never happens PullStoppedAt time.Time `json:"PullStoppedAt"` // ExecutionStoppedAt is the timestamp when the task desired status moved to stopped, // which is when the any of the essential containers stopped ExecutionStoppedAt time.Time `json:"ExecutionStoppedAt"` // SentStatusUnsafe represents the last KnownStatusUnsafe that was sent to the ECS SubmitTaskStateChange API. // TODO(samuelkarp) SentStatusUnsafe needs a lock and setters/getters. // TODO SentStatusUnsafe should probably be private with appropriately written // setter/getter. When this is done, we need to ensure that the UnmarshalJSON // is handled properly so that the state storage continues to work. SentStatusUnsafe TaskStatus `json:"SentStatus"` StartSequenceNumber int64 StopSequenceNumber int64 // ExecutionCredentialsID is the ID of credentials that are used by agent to // perform some action at the task level, such as pulling image from ECR ExecutionCredentialsID string `json:"executionCredentialsID"` // ENI is the elastic network interface specified by this task ENI *ENI // MemoryCPULimitsEnabled to determine if task supports CPU, memory limits MemoryCPULimitsEnabled bool `json:"MemoryCPULimitsEnabled,omitempty"` // contains filtered or unexported fields }
Task is the internal representation of a task in the ECS agent
func RemoveFromTaskArray ¶
RemoveFromTaskArray removes the element at ndx from an array of task pointers, arr. If the ndx is out of bounds, it returns arr unchanged.
func TaskFromACS ¶ added in v1.0.0
TaskFromACS translates ecsacs.Task to api.Task by first marshaling the recieved ecsacs.Task to json and unmrashaling it as api.Task
func (*Task) ApplyExecutionRoleLogsAuth ¶ added in v1.16.0
func (task *Task) ApplyExecutionRoleLogsAuth(hostConfig *docker.HostConfig, credentialsManager credentials.Manager) *HostConfigError
ApplyExecutionRoleLogsAuth will check whether the task has excecution role credentials, and add the genereated credentials endpoint to the associated HostConfig
func (*Task) BuildCNIConfig ¶ added in v1.14.5
BuildCNIConfig constructs the cni configuration from eni
func (*Task) BuildCgroupRoot ¶ added in v1.16.0
BuildCgroupRoot helps build the task cgroup prefix Example: /ecs/task-id
func (*Task) BuildLinuxResourceSpec ¶ added in v1.16.0
func (task *Task) BuildLinuxResourceSpec() (specs.LinuxResources, error)
BuildLinuxResourceSpec returns a linuxResources object for the task cgroup
func (*Task) ContainerByName ¶
ContainerByName returns the *Container for the given name
func (*Task) DockerConfig ¶
func (task *Task) DockerConfig(container *Container, apiVersion dockerclient.DockerVersion) (*docker.Config, *DockerClientConfigError)
DockerConfig converts the given container in this task to the format of GoDockerClient's 'Config' struct
func (*Task) DockerHostConfig ¶
func (task *Task) DockerHostConfig(container *Container, dockerContainerMap map[string]*DockerContainer, apiVersion dockerclient.DockerVersion) (*docker.HostConfig, *HostConfigError)
DockerHostConfig construct the configuration recognized by docker
func (*Task) GetCredentialsID ¶ added in v1.14.2
GetCredentialsID gets the credentials ID for the task
func (*Task) GetDesiredStatus ¶ added in v1.13.0
func (task *Task) GetDesiredStatus() TaskStatus
GetDesiredStatus gets the desired status of the task
func (*Task) GetExecutionCredentialsID ¶ added in v1.16.0
GetExecutionCredentialsID gets the credentials ID for the task
func (*Task) GetExecutionStoppedAt ¶ added in v1.16.0
GetExecutionStoppedAt returns the task executionStoppedAt timestamp
func (*Task) GetID ¶ added in v1.16.0
GetID is used to retrieve the taskID from taskARN Reference: http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-ecs
func (*Task) GetKnownStatus ¶ added in v1.9.0
func (task *Task) GetKnownStatus() TaskStatus
GetKnownStatus gets the KnownStatus of the task
func (*Task) GetKnownStatusTime ¶ added in v1.9.0
GetKnownStatusTime gets the KnownStatusTime of the task
func (*Task) GetPullStartedAt ¶ added in v1.16.0
GetPullStartedAt returns the PullStartedAt timestamp
func (*Task) GetPullStoppedAt ¶ added in v1.16.0
GetPullStoppedAt returns the PullStoppedAt timestamp
func (*Task) GetSentStatus ¶ added in v1.14.1
func (task *Task) GetSentStatus() TaskStatus
GetSentStatus safely returns the SentStatus of the task
func (*Task) GetStopSequenceNumber ¶ added in v1.16.0
GetStopSequenceNumber returns the stop sequence number of a task
func (*Task) GetTaskENI ¶ added in v1.14.5
GetTaskENI returns the eni of task, for now task can only have one enis
func (*Task) HostVolumeByName ¶
func (task *Task) HostVolumeByName(name string) (HostVolume, bool)
HostVolumeByName returns the task Volume for the given a volume name in that task. The second return value indicates the presense of that volume
func (*Task) PostUnmarshalTask ¶
func (task *Task) PostUnmarshalTask(cfg *config.Config, credentialsManager credentials.Manager)
PostUnmarshalTask is run after a task has been unmarshalled, but before it has been run. It is possible it will be subsequently called after that and should be able to handle such an occurrence appropriately (e.g. behave idempotently).
func (*Task) SetConfigHostconfigBasedOnVersion ¶ added in v1.16.0
func (task *Task) SetConfigHostconfigBasedOnVersion(container *Container, config *docker.Config, hc *docker.HostConfig, apiVersion dockerclient.DockerVersion) error
SetConfigHostconfigBasedOnVersion sets the fields in both Config and HostConfig based on api version for backward compatibility
func (*Task) SetCredentialsID ¶ added in v1.14.2
SetCredentialsID sets the credentials ID for the task
func (*Task) SetDesiredStatus ¶ added in v1.13.0
func (task *Task) SetDesiredStatus(status TaskStatus)
SetDesiredStatus sets the desired status of the task
func (*Task) SetExecutionRoleCredentialsID ¶ added in v1.16.0
SetExecutionRoleCredentialsID sets the ID for the task execution role credentials
func (*Task) SetExecutionStoppedAt ¶ added in v1.16.0
SetExecutionStoppedAt sets the ExecutionStoppedAt timestamp of the task
func (*Task) SetKnownStatus ¶ added in v1.1.0
func (task *Task) SetKnownStatus(status TaskStatus)
SetKnownStatus sets the known status of the task
func (*Task) SetPullStartedAt ¶ added in v1.16.0
SetPullStartedAt sets the task pullstartedat timestamp and returns whether this field was updated or not
func (*Task) SetPullStoppedAt ¶ added in v1.16.0
SetPullStoppedAt sets the task pullstoppedat timestamp
func (*Task) SetSentStatus ¶ added in v1.14.1
func (task *Task) SetSentStatus(status TaskStatus)
SetSentStatus safely sets the SentStatus of the task
func (*Task) SetStopSequenceNumber ¶ added in v1.16.0
SetStopSequenceNumber sets the stop seqence number of a task
func (*Task) SetTaskENI ¶ added in v1.14.5
SetTaskENI sets the eni information of the task
func (*Task) UpdateDesiredStatus ¶ added in v1.1.0
func (task *Task) UpdateDesiredStatus()
UpdateDesiredStatus sets the known status of the task
func (*Task) UpdateMountPoints ¶
UpdateMountPoints updates the mount points of volumes that were created without specifying a host path. This is used as part of the empty host volume feature.
func (*Task) UpdateStatus ¶ added in v1.1.0
UpdateStatus updates a task's known and desired statuses to be compatible with all of its containers It will return a bool indicating if there was a change
type TaskStateChange ¶ added in v1.1.0
type TaskStateChange struct { // Attachment is the eni attachment object to send Attachment *ENIAttachment // TaskArn is the unique identifier for the task TaskARN string // Status is the status to send Status TaskStatus // Reason may contain details of why the task stopped Reason string // Containers holds the events generated by containers owned by this task Containers []ContainerStateChange // PullStartedAt is the timestamp when the task start pulling PullStartedAt *time.Time // PullStoppedAt is the timestamp when the task finished pulling PullStoppedAt *time.Time // ExecutionStoppedAt is the timestamp when the essential container stopped ExecutionStoppedAt *time.Time // Task is a pointer to the task involved in the state change that gives the event handler a hook into storing // what status was sent. This is used to ensure the same event is handled only once. Task *Task }
TaskStateChange represents a state change that needs to be sent to the SubmitTaskStateChange API
func (TaskStateChange) GetEventType ¶ added in v1.14.2
func (t TaskStateChange) GetEventType() statechange.EventType
GetEventType returns an enum identifying the event type
func (*TaskStateChange) SetTaskTimestamps ¶ added in v1.16.0
func (change *TaskStateChange) SetTaskTimestamps()
SetTaskTimestamps adds the timestamp information of task into the event to be sent by SubmitTaskStateChange
func (*TaskStateChange) ShouldBeReported ¶ added in v1.16.0
func (change *TaskStateChange) ShouldBeReported() bool
ShouldBeReported checks if the statechange should be reported to backend
func (*TaskStateChange) String ¶ added in v1.3.1
func (t *TaskStateChange) String() string
String returns a human readable string representation of this object
type TaskStatus ¶
type TaskStatus int32
TaskStatus is an enumeration of valid states in the task lifecycle
const ( // TaskStatusNone is the zero state of a task; this task has been received but no further progress has completed TaskStatusNone TaskStatus = iota // TaskPulled represents a task which has had all its container images pulled, but not all have yet progressed passed pull TaskPulled // TaskCreated represents a task which has had all its containers created TaskCreated // TaskRunning represents a task which has had all its containers started TaskRunning // TaskStopped represents a task in which all containers are stopped TaskStopped // TaskZombie is an "impossible" state that is used as the maximum TaskZombie )
func (*TaskStatus) BackendRecognized ¶ added in v1.1.0
func (ts *TaskStatus) BackendRecognized() bool
BackendRecognized returns true if the task status is recognized as a valid state by ECS. Note that not all task statuses are recognized by ECS or map to ECS states
func (*TaskStatus) BackendStatus ¶ added in v1.0.0
func (ts *TaskStatus) BackendStatus() string
BackendStatus maps the internal task status in the agent to that in the backend
func (*TaskStatus) ContainerStatus ¶
func (ts *TaskStatus) ContainerStatus(steadyState ContainerStatus) ContainerStatus
ContainerStatus maps the task status to the corresponding container status
func (*TaskStatus) MarshalJSON ¶
func (ts *TaskStatus) MarshalJSON() ([]byte, error)
MarshalJSON overrides the logic for JSON-encoding the TaskStatus type
func (TaskStatus) String ¶
func (ts TaskStatus) String() string
String returns a human readable string representation of this object
func (TaskStatus) Terminal ¶
func (ts TaskStatus) Terminal() bool
Terminal returns true if the Task status is STOPPED
func (*TaskStatus) UnmarshalJSON ¶
func (ts *TaskStatus) UnmarshalJSON(b []byte) error
UnmarshalJSON overrides the logic for parsing the JSON-encoded TaskStatus data
type TaskVolume ¶
type TaskVolume struct { Name string `json:"name"` Volume HostVolume }
TaskVolume is a definition of all the volumes available for containers to reference within a task. It must be named.
func (*TaskVolume) MarshalJSON ¶
func (tv *TaskVolume) MarshalJSON() ([]byte, error)
MarshalJSON overrides the logic for JSON-encoding a TaskVolume object
func (*TaskVolume) UnmarshalJSON ¶
func (tv *TaskVolume) UnmarshalJSON(b []byte) error
UnmarshalJSON for TaskVolume determines the name and volume type, and unmarshals it into the appropriate HostVolume fulfilling interfaces
type TransitionDependencySet ¶ added in v1.14.5
type TransitionDependencySet struct { // ContainerDependencies is the set of containers on which a transition is // dependent. ContainerDependencies []ContainerDependency `json:"ContainerDependencies"` }
TransitionDependencySet contains dependencies that impact transitions of containers.
type TransportProtocol ¶ added in v1.2.0
type TransportProtocol int32
TransportProtocol is an enumeration of valid transport protocols
const ( // TransportProtocolTCP represents TCP TransportProtocolTCP TransportProtocol = iota // TransportProtocolUDP represents UDP TransportProtocolUDP )
func NewTransportProtocol ¶ added in v1.2.0
func NewTransportProtocol(protocol string) (TransportProtocol, error)
NewTransportProtocol returns a TransportProtocol from a string in the task
func (*TransportProtocol) MarshalJSON ¶ added in v1.2.0
func (tp *TransportProtocol) MarshalJSON() ([]byte, error)
MarshalJSON overrides the logic for JSON-encoding the TransportProtocol type
func (*TransportProtocol) String ¶ added in v1.2.0
func (tp *TransportProtocol) String() string
String converts TransportProtocol to a string
func (*TransportProtocol) UnmarshalJSON ¶ added in v1.2.0
func (tp *TransportProtocol) UnmarshalJSON(b []byte) error
UnmarshalJSON for TransportProtocol determines whether to use TCP or UDP, setting TCP as the zero-value but treating other unrecognized values as errors
type VolumeFrom ¶
type VolumeFrom struct { SourceContainer string `json:"sourceContainer"` ReadOnly bool `json:"readOnly"` }
VolumeFrom is a volume which references another container as its source.
Notes ¶
Bugs ¶
On Windows, volumes with names that differ only by case will collide
Source Files ¶
- const_unknown.go
- container.go
- container_unix.go
- containeroverrides.go
- containerstatus.go
- containertype.go
- ecr.go
- eni.go
- eniattachment.go
- enistatus.go
- errors.go
- generate_mocks.go
- interface.go
- port_binding.go
- statechange.go
- task.go
- task_unix.go
- taskstatus.go
- taskvolume.go
- transitiondependency.go
- transport.go
- util.go
- volume.go
Directories ¶
Path | Synopsis |
---|---|
Package testutils contains files that are used in tests but not elsewhere and thus can be excluded from the final executable.
|
Package testutils contains files that are used in tests but not elsewhere and thus can be excluded from the final executable. |