diff --git a/agent/api/container/container.go b/agent/api/container/container.go index 643653f1abd..f415d7fa91d 100644 --- a/agent/api/container/container.go +++ b/agent/api/container/container.go @@ -1072,33 +1072,13 @@ func (c *Container) GetLogDriver() string { hostConfig := &dockercontainer.HostConfig{} err := json.Unmarshal([]byte(*c.DockerConfig.HostConfig), hostConfig) if err != nil { - seelog.Warnf("Encountered error when trying to get log driver for container %s: %v", c.RuntimeID, err) + seelog.Warnf("Encountered error when trying to get log driver for container %s: %v", err) return "" } return hostConfig.LogConfig.Type } -// GetLogOptions gets the log 'options' map passed into the task definition. -// see https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_LogConfiguration.html -func (c *Container) GetLogOptions() map[string]string { - c.lock.RLock() - defer c.lock.RUnlock() - - if c.DockerConfig.HostConfig == nil { - return map[string]string{} - } - - hostConfig := &dockercontainer.HostConfig{} - err := json.Unmarshal([]byte(*c.DockerConfig.HostConfig), hostConfig) - if err != nil { - seelog.Warnf("Encountered error when trying to get log configuration for container %s: %v", c.RuntimeID, err) - return map[string]string{} - } - - return hostConfig.LogConfig.Config -} - // GetNetworkModeFromHostConfig returns the network mode used by the container from the host config . func (c *Container) GetNetworkModeFromHostConfig() string { c.lock.RLock() @@ -1112,7 +1092,7 @@ func (c *Container) GetNetworkModeFromHostConfig() string { // TODO return error to differentiate between error and default mode . err := json.Unmarshal([]byte(*c.DockerConfig.HostConfig), hostConfig) if err != nil { - seelog.Warnf("Encountered error when trying to get network mode for container %s: %v", c.RuntimeID, err) + seelog.Warnf("Encountered error when trying to get network mode for container %s: %v", err) return "" } diff --git a/agent/handlers/task_server_setup_test.go b/agent/handlers/task_server_setup_test.go index 24b8de349e0..02ff13b3daf 100644 --- a/agent/handlers/task_server_setup_test.go +++ b/agent/handlers/task_server_setup_test.go @@ -313,25 +313,8 @@ var ( }, } expectedV4TaskResponse = v4.TaskResponse{ - TaskResponse: &v2.TaskResponse{ - Cluster: clusterName, - TaskARN: taskARN, - Family: family, - Revision: version, - DesiredStatus: statusRunning, - KnownStatus: statusRunning, - Containers: []v2.ContainerResponse{expectedContainerResponse}, - Limits: &v2.LimitsResponse{ - CPU: aws.Float64(cpu), - Memory: aws.Int64(memory), - }, - PullStartedAt: aws.Time(now.UTC()), - PullStoppedAt: aws.Time(now.UTC()), - ExecutionStoppedAt: aws.Time(now.UTC()), - AvailabilityZone: availabilityzone, - LaunchType: "EC2", - }, - Containers: []v4.ContainerResponse{expectedV4ContainerResponse}, + TaskResponse: &expectedTaskResponse, + Containers: []v4.ContainerResponse{expectedV4ContainerResponse}, } expectedV4BridgeContainerResponse = v4.ContainerResponse{ ContainerResponse: &expectedBridgeContainerResponse, @@ -350,25 +333,8 @@ var ( }, } expectedV4BridgeTaskResponse = v4.TaskResponse{ - TaskResponse: &v2.TaskResponse{ - Cluster: clusterName, - TaskARN: taskARN, - Family: family, - Revision: version, - DesiredStatus: statusRunning, - KnownStatus: statusRunning, - Containers: []v2.ContainerResponse{expectedBridgeContainerResponse}, - Limits: &v2.LimitsResponse{ - CPU: aws.Float64(cpu), - Memory: aws.Int64(memory), - }, - PullStartedAt: aws.Time(now.UTC()), - PullStoppedAt: aws.Time(now.UTC()), - ExecutionStoppedAt: aws.Time(now.UTC()), - AvailabilityZone: availabilityzone, - LaunchType: "EC2", - }, - Containers: []v4.ContainerResponse{expectedV4BridgeContainerResponse}, + TaskResponse: &expectedBridgeTaskResponse, + Containers: []v4.ContainerResponse{expectedV4BridgeContainerResponse}, } ) diff --git a/agent/handlers/v2/response.go b/agent/handlers/v2/response.go index 2a063706905..607c8a8f117 100644 --- a/agent/handlers/v2/response.go +++ b/agent/handlers/v2/response.go @@ -44,7 +44,6 @@ type TaskResponse struct { AvailabilityZone string `json:"AvailabilityZone,omitempty"` TaskTags map[string]string `json:"TaskTags,omitempty"` ContainerInstanceTags map[string]string `json:"ContainerInstanceTags,omitempty"` - LaunchType string `json:"LaunchType,omitempty"` } // ContainerResponse defines the schema for the container response @@ -68,8 +67,6 @@ type ContainerResponse struct { Networks []containermetadata.Network `json:"Networks,omitempty"` Health *apicontainer.HealthStatus `json:"Health,omitempty"` Volumes []v1.VolumeResponse `json:"Volumes,omitempty"` - LogDriver string `json:"LogDriver,omitempty"` - LogOptions map[string]string `json:"LogOptions,omitempty"` } // LimitsResponse defines the schema for task/cpu limits response @@ -80,16 +77,13 @@ type LimitsResponse struct { } // NewTaskResponse creates a new response object for the task -func NewTaskResponse( - taskARN string, +func NewTaskResponse(taskARN string, state dockerstate.TaskEngineState, ecsClient api.ECSClient, cluster string, az string, containerInstanceArn string, - propagateTags bool, - includeV4Metadata bool, -) (*TaskResponse, error) { + propagateTags bool) (*TaskResponse, error) { task, ok := state.TaskByArn(taskARN) if !ok { return nil, errors.Errorf("v2 task response: unable to find task '%s'", taskARN) @@ -135,7 +129,7 @@ func NewTaskResponse( } for _, dockerContainer := range containerNameToDockerContainer { - containerResponse := newContainerResponse(dockerContainer, task.GetPrimaryENI(), state, includeV4Metadata) + containerResponse := newContainerResponse(dockerContainer, task.GetPrimaryENI(), state) resp.Containers = append(resp.Containers, containerResponse) } @@ -169,11 +163,8 @@ func propagateTagsToMetadata(state dockerstate.TaskEngineState, ecsClient api.EC } // NewContainerResponse creates a new container response based on container id -func NewContainerResponse( - containerID string, - state dockerstate.TaskEngineState, - includeV4Metadata bool, -) (*ContainerResponse, error) { +func NewContainerResponse(containerID string, + state dockerstate.TaskEngineState) (*ContainerResponse, error) { dockerContainer, ok := state.ContainerByID(containerID) if !ok { return nil, errors.Errorf( @@ -185,16 +176,13 @@ func NewContainerResponse( "v2 container response: unable to find task for container '%s'", containerID) } - resp := newContainerResponse(dockerContainer, task.GetPrimaryENI(), state, includeV4Metadata) + resp := newContainerResponse(dockerContainer, task.GetPrimaryENI(), state) return &resp, nil } -func newContainerResponse( - dockerContainer *apicontainer.DockerContainer, +func newContainerResponse(dockerContainer *apicontainer.DockerContainer, eni *apieni.ENI, - state dockerstate.TaskEngineState, - includeV4Metadata bool, -) ContainerResponse { + state dockerstate.TaskEngineState) ContainerResponse { container := dockerContainer.Container resp := ContainerResponse{ ID: dockerContainer.DockerID, @@ -212,12 +200,6 @@ func newContainerResponse( ExitCode: container.GetKnownExitCode(), Labels: container.GetLabels(), } - // V4 metadata endpoint calls this function for consistency across versions, - // but needs additional metadata only available at this scope. - if includeV4Metadata { - resp.LogDriver = container.GetLogDriver() - resp.LogOptions = container.GetLogOptions() - } // Write the container health status inside the container if dockerContainer.Container.HealthStatusShouldBeReported() { diff --git a/agent/handlers/v2/response_test.go b/agent/handlers/v2/response_test.go index 4ffb29fc13d..e7afb6b1790 100644 --- a/agent/handlers/v2/response_test.go +++ b/agent/handlers/v2/response_test.go @@ -123,115 +123,11 @@ func TestTaskResponse(t *testing.T) { state.EXPECT().ContainerMapByArn(taskARN).Return(containerNameToDockerContainer, true), ) - taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, availabilityZone, containerInstanceArn, false, false) + taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, availabilityZone, containerInstanceArn, false) assert.NoError(t, err) _, err = json.Marshal(taskResponse) assert.NoError(t, err) assert.Equal(t, created.UTC().String(), taskResponse.Containers[0].CreatedAt.String()) - // LaunchType should not be populated - assert.Equal(t, "", taskResponse.LaunchType) - // Log driver and Log options should not be populated - assert.Equal(t, "", taskResponse.Containers[0].LogDriver) - assert.Len(t, taskResponse.Containers[0].LogOptions, 0) - - gomock.InOrder( - state.EXPECT().TaskByArn(taskARN).Return(task, true), - state.EXPECT().ContainerMapByArn(taskARN).Return(containerNameToDockerContainer, true), - ) - // verify that 'v4' response without log driver or options returns blank fields as well - taskResponse, err = NewTaskResponse(taskARN, state, ecsClient, cluster, availabilityZone, containerInstanceArn, false, true) - assert.NoError(t, err) - _, err = json.Marshal(taskResponse) - assert.NoError(t, err) - // LaunchType should not be populated - assert.Equal(t, "", taskResponse.LaunchType) - // Log driver and Log options should not be populated - assert.Equal(t, "", taskResponse.Containers[0].LogDriver) - assert.Len(t, taskResponse.Containers[0].LogOptions, 0) -} - -func TestTaskResponseWithV4Metadata(t *testing.T) { - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - state := mock_dockerstate.NewMockTaskEngineState(ctrl) - ecsClient := mock_api.NewMockECSClient(ctrl) - now := time.Now() - task := &apitask.Task{ - Arn: taskARN, - Family: family, - Version: version, - DesiredStatusUnsafe: apitaskstatus.TaskRunning, - KnownStatusUnsafe: apitaskstatus.TaskRunning, - ENIs: []*apieni.ENI{ - { - IPV4Addresses: []*apieni.ENIIPV4Address{ - { - Address: eniIPv4Address, - }, - }, - }, - }, - CPU: cpu, - Memory: memory, - PullStartedAtUnsafe: now, - PullStoppedAtUnsafe: now, - ExecutionStoppedAtUnsafe: now, - } - container := &apicontainer.Container{ - Name: containerName, - Image: imageName, - ImageID: imageID, - DesiredStatusUnsafe: apicontainerstatus.ContainerRunning, - KnownStatusUnsafe: apicontainerstatus.ContainerRunning, - CPU: cpu, - Memory: memory, - Type: apicontainer.ContainerNormal, - Ports: []apicontainer.PortBinding{ - { - ContainerPort: 80, - Protocol: apicontainer.TransportProtocolTCP, - }, - }, - VolumesUnsafe: []types.MountPoint{ - { - Name: volName, - Source: volSource, - Destination: volDestination, - }, - }, - DockerConfig: apicontainer.DockerConfig{ - HostConfig: aws.String(`{"LogConfig":{"Type":"awslogs","Config":{"awslogs-group":"myLogGroup"}}}`), - }, - } - created := time.Now() - container.SetCreatedAt(created) - labels := map[string]string{ - "foo": "bar", - } - container.SetLabels(labels) - containerNameToDockerContainer := map[string]*apicontainer.DockerContainer{ - taskARN: { - DockerID: containerID, - DockerName: containerName, - Container: container, - }, - } - gomock.InOrder( - state.EXPECT().TaskByArn(taskARN).Return(task, true), - state.EXPECT().ContainerMapByArn(taskARN).Return(containerNameToDockerContainer, true), - ) - - taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, availabilityZone, containerInstanceArn, false, true) - assert.NoError(t, err) - _, err = json.Marshal(taskResponse) - assert.NoError(t, err) - assert.Equal(t, created.UTC().String(), taskResponse.Containers[0].CreatedAt.String()) - // LaunchType is populated by the v4 handler - assert.Equal(t, "", taskResponse.LaunchType) - // Log driver and config should be populated - assert.Equal(t, "awslogs", taskResponse.Containers[0].LogDriver) - assert.Equal(t, map[string]string{"awslogs-group": "myLogGroup"}, taskResponse.Containers[0].LogOptions) } func TestContainerResponse(t *testing.T) { @@ -311,7 +207,7 @@ func TestContainerResponse(t *testing.T) { state.EXPECT().TaskByID(containerID).Return(task, true), ) - containerResponse, err := NewContainerResponse(containerID, state, false) + containerResponse, err := NewContainerResponse(containerID, state) assert.NoError(t, err) assert.Equal(t, containerResponse.Health == nil, tc.result) _, err = json.Marshal(containerResponse) @@ -448,7 +344,7 @@ func TestTaskResponseMarshal(t *testing.T) { }, nil), ) - taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, availabilityZone, containerInstanceArn, true, false) + taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, availabilityZone, containerInstanceArn, true) assert.NoError(t, err) taskResponseJSON, err := json.Marshal(taskResponse) @@ -552,7 +448,7 @@ func TestContainerResponseMarshal(t *testing.T) { state.EXPECT().TaskByID(containerID).Return(task, true), ) - containerResponse, err := NewContainerResponse(containerID, state, false) + containerResponse, err := NewContainerResponse(containerID, state) assert.NoError(t, err) containerResponseJSON, err := json.Marshal(containerResponse) diff --git a/agent/handlers/v2/task_container_metadata_handler.go b/agent/handlers/v2/task_container_metadata_handler.go index 78dc85cb949..abd0899dd1d 100644 --- a/agent/handlers/v2/task_container_metadata_handler.go +++ b/agent/handlers/v2/task_container_metadata_handler.go @@ -71,7 +71,7 @@ func TaskContainerMetadataHandler(state dockerstate.TaskEngineState, ecsClient a // WriteContainerMetadataResponse writes the container metadata to response writer. func WriteContainerMetadataResponse(w http.ResponseWriter, containerID string, state dockerstate.TaskEngineState) { - containerResponse, err := NewContainerResponse(containerID, state, false) + containerResponse, err := NewContainerResponse(containerID, state) if err != nil { errResponseJSON, err := json.Marshal("Unable to generate metadata for container '" + containerID + "'") if e := utils.WriteResponseIfMarshalError(w, err); e != nil { @@ -91,7 +91,7 @@ func WriteContainerMetadataResponse(w http.ResponseWriter, containerID string, s // WriteTaskMetadataResponse writes the task metadata to response writer. func WriteTaskMetadataResponse(w http.ResponseWriter, taskARN string, cluster string, state dockerstate.TaskEngineState, ecsClient api.ECSClient, az, containerInstanceArn string, propagateTags bool) { // Generate a response for the task - taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, az, containerInstanceArn, propagateTags, false) + taskResponse, err := NewTaskResponse(taskARN, state, ecsClient, cluster, az, containerInstanceArn, propagateTags) if err != nil { errResponseJSON, err := json.Marshal("Unable to generate metadata for task: '" + taskARN + "'") if e := utils.WriteResponseIfMarshalError(w, err); e != nil { diff --git a/agent/handlers/v3/container_metadata_handler.go b/agent/handlers/v3/container_metadata_handler.go index 51f0e94aec3..65ac5d5e0f3 100644 --- a/agent/handlers/v3/container_metadata_handler.go +++ b/agent/handlers/v3/container_metadata_handler.go @@ -63,7 +63,7 @@ func ContainerMetadataHandler(state dockerstate.TaskEngineState) func(http.Respo // GetContainerResponse gets container response for v3 metadata func GetContainerResponse(containerID string, state dockerstate.TaskEngineState) (*v2.ContainerResponse, error) { - containerResponse, err := v2.NewContainerResponse(containerID, state, false) + containerResponse, err := v2.NewContainerResponse(containerID, state) if err != nil { return nil, errors.Errorf("Unable to generate metadata for container '%s'", containerID) } diff --git a/agent/handlers/v3/task_metadata_handler.go b/agent/handlers/v3/task_metadata_handler.go index 03f0960a7a4..f07c33986d1 100644 --- a/agent/handlers/v3/task_metadata_handler.go +++ b/agent/handlers/v3/task_metadata_handler.go @@ -51,7 +51,7 @@ func TaskMetadataHandler(state dockerstate.TaskEngineState, ecsClient api.ECSCli seelog.Infof("V3 task metadata handler: writing response for task '%s'", taskARN) - taskResponse, err := v2.NewTaskResponse(taskARN, state, ecsClient, cluster, az, containerInstanceArn, propagateTags, false) + taskResponse, err := v2.NewTaskResponse(taskARN, state, ecsClient, cluster, az, containerInstanceArn, propagateTags) if err != nil { errResponseJSON, err := json.Marshal("Unable to generate metadata for task: '" + taskARN + "'") if e := utils.WriteResponseIfMarshalError(w, err); e != nil { diff --git a/agent/handlers/v4/response.go b/agent/handlers/v4/response.go index 4be8a53b632..0598424917c 100644 --- a/agent/handlers/v4/response.go +++ b/agent/handlers/v4/response.go @@ -19,7 +19,6 @@ import ( "github.com/aws/amazon-ecs-agent/agent/api" apitask "github.com/aws/amazon-ecs-agent/agent/api/task" "github.com/aws/amazon-ecs-agent/agent/containermetadata" - "github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs" "github.com/aws/amazon-ecs-agent/agent/engine/dockerstate" "github.com/aws/amazon-ecs-agent/agent/handlers/utils" v2 "github.com/aws/amazon-ecs-agent/agent/handlers/v2" @@ -86,7 +85,7 @@ func NewTaskResponse( ) (*TaskResponse, error) { // Construct the v2 response first. v2Resp, err := v2.NewTaskResponse(taskARN, state, ecsClient, cluster, az, - containerInstanceARN, propagateTags, true) + containerInstanceARN, propagateTags) if err != nil { return nil, err } @@ -105,8 +104,6 @@ func NewTaskResponse( }) } - v2Resp.LaunchType = ecs.LaunchTypeEc2 - return &TaskResponse{ TaskResponse: v2Resp, Containers: containers, @@ -120,7 +117,7 @@ func NewContainerResponse( state dockerstate.TaskEngineState, ) (*ContainerResponse, error) { // Construct the v2 response first. - container, err := v2.NewContainerResponse(containerID, state, true) + container, err := v2.NewContainerResponse(containerID, state) if err != nil { return nil, err }