Skip to content

Commit edbeee3

Browse files
authored
Move some common metadata models to ecs-agent module (#3701)
1 parent 70992c9 commit edbeee3

File tree

11 files changed

+142
-87
lines changed

11 files changed

+142
-87
lines changed

agent/containermetadata/parse_metadata.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
apicontainer "github.com/aws/amazon-ecs-agent/agent/api/container"
2020
apitask "github.com/aws/amazon-ecs-agent/agent/api/task"
2121

22+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
2223
"github.com/cihub/seelog"
2324
"github.com/docker/docker/api/types"
2425
dockercontainer "github.com/docker/docker/api/types/container"
@@ -142,17 +143,17 @@ func parseNetworkMetadata(settings *types.NetworkSettings, hostConfig *dockercon
142143

143144
// Extensive Network information is not available for Docker API versions 1.17-1.20
144145
// Instead we only get the details of the first network
145-
networkList := make([]Network, 0)
146+
networkList := make([]tmdsresponse.Network, 0)
146147
if len(settings.Networks) > 0 {
147148
for modeFromSettings, containerNetwork := range settings.Networks {
148149
networkMode := modeFromSettings
149150
ipv4Addresses := []string{containerNetwork.IPAddress}
150-
network := Network{NetworkMode: networkMode, IPv4Addresses: ipv4Addresses}
151+
network := tmdsresponse.Network{NetworkMode: networkMode, IPv4Addresses: ipv4Addresses}
151152
networkList = append(networkList, network)
152153
}
153154
} else {
154155
ipv4Addresses := []string{ipv4AddressFromSettings}
155-
network := Network{NetworkMode: networkModeFromHostConfig, IPv4Addresses: ipv4Addresses}
156+
network := tmdsresponse.Network{NetworkMode: networkModeFromHostConfig, IPv4Addresses: ipv4Addresses}
156157
networkList = append(networkList, network)
157158
}
158159

agent/containermetadata/types.go

+3-9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"time"
2121

2222
apicontainer "github.com/aws/amazon-ecs-agent/agent/api/container"
23+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
2324
"github.com/docker/docker/api/types"
2425
)
2526

@@ -82,19 +83,12 @@ type DockerMetadataClient interface {
8283
InspectContainer(context.Context, string, time.Duration) (*types.ContainerJSON, error)
8384
}
8485

85-
// Network is a struct that keeps track of metadata of a network interface
86-
type Network struct {
87-
NetworkMode string `json:"NetworkMode,omitempty"`
88-
IPv4Addresses []string `json:"IPv4Addresses,omitempty"`
89-
IPv6Addresses []string `json:"IPv6Addresses,omitempty"`
90-
}
91-
9286
// NetworkMetadata keeps track of the data we parse from the Network Settings
9387
// in docker containers. While most information is redundant with the internal
9488
// Network struct, we keeps this wrapper in case we wish to add data specifically
9589
// from the NetworkSettings
9690
type NetworkMetadata struct {
97-
networks []Network
91+
networks []tmdsresponse.Network
9892
}
9993

10094
// DockerContainerMetadata keeps track of all metadata acquired from Docker inspection
@@ -147,7 +141,7 @@ type metadataSerializer struct {
147141
ImageID string `json:"ImageID,omitempty"`
148142
ImageName string `json:"ImageName,omitempty"`
149143
Ports []apicontainer.PortBinding `json:"PortMappings,omitempty"`
150-
Networks []Network `json:"Networks,omitempty"`
144+
Networks []tmdsresponse.Network `json:"Networks,omitempty"`
151145
MetadataFileStatus MetadataStatus `json:"MetadataFileStatus,omitempty"`
152146
AvailabilityZone string `json:"AvailabilityZone,omitempty"`
153147
HostPrivateIPv4Address string `json:"HostPrivateIPv4Address,omitempty"`

agent/handlers/task_server_setup_test.go

+9-10
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ import (
3535
apitask "github.com/aws/amazon-ecs-agent/agent/api/task"
3636
apitaskstatus "github.com/aws/amazon-ecs-agent/agent/api/task/status"
3737
"github.com/aws/amazon-ecs-agent/agent/config"
38-
"github.com/aws/amazon-ecs-agent/agent/containermetadata"
3938
"github.com/aws/amazon-ecs-agent/agent/ecs_client/model/ecs"
4039
mock_dockerstate "github.com/aws/amazon-ecs-agent/agent/engine/dockerstate/mocks"
4140
task_protection_v1 "github.com/aws/amazon-ecs-agent/agent/handlers/agentapi/taskprotection/v1/handlers"
42-
v1 "github.com/aws/amazon-ecs-agent/agent/handlers/v1"
4341
v2 "github.com/aws/amazon-ecs-agent/agent/handlers/v2"
4442
v3 "github.com/aws/amazon-ecs-agent/agent/handlers/v3"
4543
v4 "github.com/aws/amazon-ecs-agent/agent/handlers/v4"
@@ -50,6 +48,7 @@ import (
5048
"github.com/aws/amazon-ecs-agent/ecs-agent/credentials"
5149
mock_credentials "github.com/aws/amazon-ecs-agent/ecs-agent/credentials/mocks"
5250
mock_audit "github.com/aws/amazon-ecs-agent/ecs-agent/logger/audit/mocks"
51+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
5352
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/utils"
5453
tmdsv1 "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/v1"
5554
"github.com/aws/aws-sdk-go/aws"
@@ -242,14 +241,14 @@ var (
242241
},
243242
Type: containerType,
244243
Labels: labels,
245-
Ports: []v1.PortResponse{
244+
Ports: []tmdsresponse.PortResponse{
246245
{
247246
ContainerPort: containerPort,
248247
Protocol: containerPortProtocol,
249248
HostPort: containerPort,
250249
},
251250
},
252-
Networks: []containermetadata.Network{
251+
Networks: []tmdsresponse.Network{
253252
{
254253
NetworkMode: utils.NetworkModeAWSVPC,
255254
IPv4Addresses: []string{eniIPv4Address},
@@ -348,13 +347,13 @@ var (
348347
},
349348
Type: containerType,
350349
Labels: labels,
351-
Ports: []v1.PortResponse{
350+
Ports: []tmdsresponse.PortResponse{
352351
{
353352
ContainerPort: containerPort,
354353
Protocol: containerPortProtocol,
355354
},
356355
},
357-
Networks: []containermetadata.Network{
356+
Networks: []tmdsresponse.Network{
358357
{
359358
NetworkMode: bridgeMode,
360359
IPv4Addresses: []string{bridgeIPAddr},
@@ -395,22 +394,22 @@ var (
395394
},
396395
Type: containerType,
397396
Labels: labels,
398-
Ports: []v1.PortResponse{
397+
Ports: []tmdsresponse.PortResponse{
399398
{
400399
ContainerPort: containerPort,
401400
Protocol: containerPortProtocol,
402401
HostPort: containerPort,
403402
},
404403
},
405-
Networks: []containermetadata.Network{
404+
Networks: []tmdsresponse.Network{
406405
{
407406
NetworkMode: utils.NetworkModeAWSVPC,
408407
IPv4Addresses: []string{eniIPv4Address},
409408
},
410409
},
411410
},
412411
Networks: []v4.Network{{
413-
Network: containermetadata.Network{
412+
Network: tmdsresponse.Network{
414413
NetworkMode: utils.NetworkModeAWSVPC,
415414
IPv4Addresses: []string{eniIPv4Address},
416415
},
@@ -485,7 +484,7 @@ var (
485484
expectedV4BridgeContainerResponse = v4.ContainerResponse{
486485
ContainerResponse: &expectedBridgeContainerResponse,
487486
Networks: []v4.Network{{
488-
Network: containermetadata.Network{
487+
Network: tmdsresponse.Network{
489488
NetworkMode: bridgeMode,
490489
IPv4Addresses: []string{bridgeIPAddr},
491490
},

agent/handlers/v1/response.go

+14-30
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ package v1
1616
import (
1717
apicontainer "github.com/aws/amazon-ecs-agent/agent/api/container"
1818
apitask "github.com/aws/amazon-ecs-agent/agent/api/task"
19-
"github.com/aws/amazon-ecs-agent/agent/containermetadata"
2019
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
2120
apieni "github.com/aws/amazon-ecs-agent/ecs-agent/api/eni"
21+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
2222
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/utils"
2323
)
2424

@@ -46,28 +46,12 @@ type TasksResponse struct {
4646

4747
// ContainerResponse is the schema for the container response JSON object
4848
type ContainerResponse struct {
49-
DockerID string `json:"DockerId"`
50-
DockerName string `json:"DockerName"`
51-
Name string `json:"Name"`
52-
Ports []PortResponse `json:"Ports,omitempty"`
53-
Networks []containermetadata.Network `json:"Networks,omitempty"`
54-
Volumes []VolumeResponse `json:"Volumes,omitempty"`
55-
}
56-
57-
// VolumeResponse is the schema for the volume response JSON object
58-
type VolumeResponse struct {
59-
DockerName string `json:"DockerName,omitempty"`
60-
Source string `json:"Source,omitempty"`
61-
Destination string `json:"Destination,omitempty"`
62-
}
63-
64-
// PortResponse defines the schema for portmapping response JSON
65-
// object.
66-
type PortResponse struct {
67-
ContainerPort uint16 `json:"ContainerPort,omitempty"`
68-
Protocol string `json:"Protocol,omitempty"`
69-
HostPort uint16 `json:"HostPort,omitempty"`
70-
HostIp string `json:"HostIp,omitempty"`
49+
DockerID string `json:"DockerId"`
50+
DockerName string `json:"DockerName"`
51+
Name string `json:"Name"`
52+
Ports []tmdsresponse.PortResponse `json:"Ports,omitempty"`
53+
Networks []tmdsresponse.Network `json:"Networks,omitempty"`
54+
Volumes []tmdsresponse.VolumeResponse `json:"Volumes,omitempty"`
7155
}
7256

7357
// NewTaskResponse creates a TaskResponse for a task.
@@ -113,7 +97,7 @@ func NewContainerResponse(dockerContainer *apicontainer.DockerContainer, eni *ap
11397
resp.Volumes = NewVolumesResponse(dockerContainer)
11498

11599
if eni != nil {
116-
resp.Networks = []containermetadata.Network{
100+
resp.Networks = []tmdsresponse.Network{
117101
{
118102
NetworkMode: utils.NetworkModeAWSVPC,
119103
IPv4Addresses: eni.GetIPV4Addresses(),
@@ -125,9 +109,9 @@ func NewContainerResponse(dockerContainer *apicontainer.DockerContainer, eni *ap
125109
}
126110

127111
// NewPortBindingsResponse creates PortResponse for a container.
128-
func NewPortBindingsResponse(dockerContainer *apicontainer.DockerContainer, eni *apieni.ENI) []PortResponse {
112+
func NewPortBindingsResponse(dockerContainer *apicontainer.DockerContainer, eni *apieni.ENI) []tmdsresponse.PortResponse {
129113
container := dockerContainer.Container
130-
resp := []PortResponse{}
114+
resp := []tmdsresponse.PortResponse{}
131115

132116
bindings := container.GetKnownPortBindings()
133117

@@ -138,7 +122,7 @@ func NewPortBindingsResponse(dockerContainer *apicontainer.DockerContainer, eni
138122
}
139123

140124
for _, binding := range bindings {
141-
port := PortResponse{
125+
port := tmdsresponse.PortResponse{
142126
ContainerPort: binding.ContainerPort,
143127
Protocol: binding.Protocol.String(),
144128
}
@@ -155,14 +139,14 @@ func NewPortBindingsResponse(dockerContainer *apicontainer.DockerContainer, eni
155139
}
156140

157141
// NewVolumesResponse creates VolumeResponse for a container
158-
func NewVolumesResponse(dockerContainer *apicontainer.DockerContainer) []VolumeResponse {
142+
func NewVolumesResponse(dockerContainer *apicontainer.DockerContainer) []tmdsresponse.VolumeResponse {
159143
container := dockerContainer.Container
160-
var resp []VolumeResponse
144+
var resp []tmdsresponse.VolumeResponse
161145

162146
volumes := container.GetVolumes()
163147

164148
for _, volume := range volumes {
165-
volResp := VolumeResponse{
149+
volResp := tmdsresponse.VolumeResponse{
166150
DockerName: volume.Name,
167151
Source: volume.Source,
168152
Destination: volume.Destination,

agent/handlers/v2/response.go

+24-24
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ import (
2020

2121
"github.com/aws/amazon-ecs-agent/agent/api"
2222
apicontainer "github.com/aws/amazon-ecs-agent/agent/api/container"
23-
"github.com/aws/amazon-ecs-agent/agent/containermetadata"
2423
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
2524
v1 "github.com/aws/amazon-ecs-agent/agent/handlers/v1"
2625
apieni "github.com/aws/amazon-ecs-agent/ecs-agent/api/eni"
26+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
2727
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/utils"
2828
"github.com/aws/aws-sdk-go/aws"
2929
"github.com/cihub/seelog"
@@ -53,27 +53,27 @@ type TaskResponse struct {
5353
// ContainerResponse defines the schema for the container response
5454
// JSON object
5555
type ContainerResponse struct {
56-
ID string `json:"DockerId"`
57-
Name string `json:"Name"`
58-
DockerName string `json:"DockerName"`
59-
Image string `json:"Image"`
60-
ImageID string `json:"ImageID"`
61-
Ports []v1.PortResponse `json:"Ports,omitempty"`
62-
Labels map[string]string `json:"Labels,omitempty"`
63-
DesiredStatus string `json:"DesiredStatus"`
64-
KnownStatus string `json:"KnownStatus"`
65-
ExitCode *int `json:"ExitCode,omitempty"`
66-
Limits LimitsResponse `json:"Limits"`
67-
CreatedAt *time.Time `json:"CreatedAt,omitempty"`
68-
StartedAt *time.Time `json:"StartedAt,omitempty"`
69-
FinishedAt *time.Time `json:"FinishedAt,omitempty"`
70-
Type string `json:"Type"`
71-
Networks []containermetadata.Network `json:"Networks,omitempty"`
72-
Health *apicontainer.HealthStatus `json:"Health,omitempty"`
73-
Volumes []v1.VolumeResponse `json:"Volumes,omitempty"`
74-
LogDriver string `json:"LogDriver,omitempty"`
75-
LogOptions map[string]string `json:"LogOptions,omitempty"`
76-
ContainerARN string `json:"ContainerARN,omitempty"`
56+
ID string `json:"DockerId"`
57+
Name string `json:"Name"`
58+
DockerName string `json:"DockerName"`
59+
Image string `json:"Image"`
60+
ImageID string `json:"ImageID"`
61+
Ports []tmdsresponse.PortResponse `json:"Ports,omitempty"`
62+
Labels map[string]string `json:"Labels,omitempty"`
63+
DesiredStatus string `json:"DesiredStatus"`
64+
KnownStatus string `json:"KnownStatus"`
65+
ExitCode *int `json:"ExitCode,omitempty"`
66+
Limits LimitsResponse `json:"Limits"`
67+
CreatedAt *time.Time `json:"CreatedAt,omitempty"`
68+
StartedAt *time.Time `json:"StartedAt,omitempty"`
69+
FinishedAt *time.Time `json:"FinishedAt,omitempty"`
70+
Type string `json:"Type"`
71+
Networks []tmdsresponse.Network `json:"Networks,omitempty"`
72+
Health *apicontainer.HealthStatus `json:"Health,omitempty"`
73+
Volumes []tmdsresponse.VolumeResponse `json:"Volumes,omitempty"`
74+
LogDriver string `json:"LogDriver,omitempty"`
75+
LogOptions map[string]string `json:"LogOptions,omitempty"`
76+
ContainerARN string `json:"ContainerARN,omitempty"`
7777
}
7878

7979
// LimitsResponse defines the schema for task/cpu limits response
@@ -272,7 +272,7 @@ func NewContainerResponse(
272272
}
273273

274274
for _, binding := range container.GetKnownPortBindings() {
275-
port := v1.PortResponse{
275+
port := tmdsresponse.PortResponse{
276276
ContainerPort: binding.ContainerPort,
277277
Protocol: binding.Protocol.String(),
278278
}
@@ -289,7 +289,7 @@ func NewContainerResponse(
289289
}
290290

291291
if eni != nil {
292-
resp.Networks = []containermetadata.Network{
292+
resp.Networks = []tmdsresponse.Network{
293293
{
294294
NetworkMode: utils.NetworkModeAWSVPC,
295295
IPv4Addresses: eni.GetIPV4Addresses(),

agent/handlers/v3/container_metadata_handler.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import (
1818
"fmt"
1919
"net/http"
2020

21-
"github.com/aws/amazon-ecs-agent/agent/containermetadata"
2221
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
2322
v2 "github.com/aws/amazon-ecs-agent/agent/handlers/v2"
23+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
2424
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/utils"
2525
"github.com/cihub/seelog"
2626
"github.com/pkg/errors"
@@ -78,7 +78,7 @@ func GetContainerResponse(containerID string, state dockerstate.TaskEngineState)
7878
}
7979

8080
// GetContainerNetworkMetadata returns the network metadata for the container
81-
func GetContainerNetworkMetadata(containerID string, state dockerstate.TaskEngineState) ([]containermetadata.Network, error) {
81+
func GetContainerNetworkMetadata(containerID string, state dockerstate.TaskEngineState) ([]tmdsresponse.Network, error) {
8282
dockerContainer, ok := state.ContainerByID(containerID)
8383
if !ok {
8484
return nil, errors.Errorf("Unable to find container '%s'", containerID)
@@ -98,17 +98,17 @@ func GetContainerNetworkMetadata(containerID string, state dockerstate.TaskEngin
9898

9999
// Extensive Network information is not available for Docker API versions 1.17-1.20
100100
// Instead we only get the details of the first network
101-
networks := make([]containermetadata.Network, 0)
101+
networks := make([]tmdsresponse.Network, 0)
102102
if len(settings.Networks) > 0 {
103103
for modeFromSettings, containerNetwork := range settings.Networks {
104104
networkMode := modeFromSettings
105105
ipv4Addresses := []string{containerNetwork.IPAddress}
106-
network := containermetadata.Network{NetworkMode: networkMode, IPv4Addresses: ipv4Addresses}
106+
network := tmdsresponse.Network{NetworkMode: networkMode, IPv4Addresses: ipv4Addresses}
107107
networks = append(networks, network)
108108
}
109109
} else {
110110
ipv4Addresses := []string{ipv4AddressFromSettings}
111-
network := containermetadata.Network{NetworkMode: networkModeFromHostConfig, IPv4Addresses: ipv4Addresses}
111+
network := tmdsresponse.Network{NetworkMode: networkModeFromHostConfig, IPv4Addresses: ipv4Addresses}
112112
networks = append(networks, network)
113113
}
114114
return networks, nil

agent/handlers/v4/container_metadata_handler.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import (
1818
"fmt"
1919
"net/http"
2020

21-
"github.com/aws/amazon-ecs-agent/agent/containermetadata"
2221
"github.com/aws/amazon-ecs-agent/agent/engine/dockerstate"
2322
v3 "github.com/aws/amazon-ecs-agent/agent/handlers/v3"
23+
tmdsresponse "github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
2424
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/utils"
2525
"github.com/cihub/seelog"
2626
"github.com/pkg/errors"
@@ -103,12 +103,12 @@ func GetContainerNetworkMetadata(containerID string, state dockerstate.TaskEngin
103103
for modeFromSettings, containerNetwork := range settings.Networks {
104104
networkMode := modeFromSettings
105105
ipv4Addresses := []string{containerNetwork.IPAddress}
106-
network := Network{Network: containermetadata.Network{NetworkMode: networkMode, IPv4Addresses: ipv4Addresses}}
106+
network := Network{Network: tmdsresponse.Network{NetworkMode: networkMode, IPv4Addresses: ipv4Addresses}}
107107
networks = append(networks, network)
108108
}
109109
} else {
110110
ipv4Addresses := []string{ipv4AddressFromSettings}
111-
network := Network{Network: containermetadata.Network{NetworkMode: networkModeFromHostConfig, IPv4Addresses: ipv4Addresses}}
111+
network := Network{Network: tmdsresponse.Network{NetworkMode: networkModeFromHostConfig, IPv4Addresses: ipv4Addresses}}
112112
networks = append(networks, network)
113113
}
114114
return networks, nil

0 commit comments

Comments
 (0)