Skip to content

Commit 72d6a78

Browse files
committed
handlers: add eni info to introspection endpoint
1 parent 1b9439d commit 72d6a78

File tree

3 files changed

+62
-8
lines changed

3 files changed

+62
-8
lines changed

agent/handlers/types/v1/response.go

+8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type TaskResponse struct {
2828
Family string
2929
Version string
3030
Containers []ContainerResponse
31+
Networks []NetworkResponse
3132
}
3233

3334
// TasksResponse is the schema for the tasks response JSON object
@@ -41,3 +42,10 @@ type ContainerResponse struct {
4142
DockerName string
4243
Name string
4344
}
45+
46+
// NetworkResponse is the schema for the network response JSON object
47+
type NetworkResponse struct {
48+
NetworkMode string
49+
IPV4Addresses []string
50+
IPV6Addresses []string
51+
}

agent/handlers/v1_handlers.go

+19-8
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ func metadataV1RequestHandlerMaker(containerInstanceArn *string, cfg *config.Con
6565
}
6666

6767
func newTaskResponse(task *api.Task, containerMap map[string]*api.DockerContainer) *v1.TaskResponse {
68+
resp := &v1.TaskResponse{}
6869
containers := []v1.ContainerResponse{}
6970
for containerName, container := range containerMap {
7071
if container.Container.IsInternal() {
@@ -82,14 +83,24 @@ func newTaskResponse(task *api.Task, containerMap map[string]*api.DockerContaine
8283
desiredStatus = ""
8384
}
8485

85-
return &v1.TaskResponse{
86-
Arn: task.Arn,
87-
DesiredStatus: desiredStatus,
88-
KnownStatus: knownBackendStatus,
89-
Family: task.Family,
90-
Version: task.Version,
91-
Containers: containers,
86+
if eni := task.GetTaskENI(); eni != nil {
87+
resp.Networks = []v1.NetworkResponse{
88+
{
89+
NetworkMode: "awsvpc",
90+
IPV4Addresses: eni.GetIPV4Addresses(),
91+
IPV6Addresses: eni.GetIPV6Addresses(),
92+
},
93+
}
9294
}
95+
96+
resp.Arn = task.Arn
97+
resp.DesiredStatus = desiredStatus
98+
resp.KnownStatus = knownBackendStatus
99+
resp.Family = task.Family
100+
resp.Version = task.Version
101+
resp.Containers = containers
102+
103+
return resp
93104
}
94105

95106
func newTasksResponse(state dockerstate.TaskEngineState) *v1.TasksResponse {
@@ -135,7 +146,7 @@ func tasksV1RequestHandlerMaker(taskEngine DockerStateResolver) func(http.Respon
135146
return
136147
}
137148
if dockerIdExists {
138-
// Create TaskResponse for the docker id in the query.
149+
139150
var task *api.Task
140151
var found bool
141152
if len(dockerId) > dockerShortIdLen {

agent/handlers/v1_handlers_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636

3737
const testContainerInstanceArn = "test_container_instance_arn"
3838
const testClusterArn = "test_cluster_arn"
39+
const eniIPV4Address = "10.0.0.2"
3940

4041
func TestMetadataHandler(t *testing.T) {
4142
metadataHandler := metadataV1RequestHandlerMaker(utils.Strptr(testContainerInstanceArn), &config.Config{Cluster: testClusterArn})
@@ -125,6 +126,21 @@ func TestGetTaskByTaskArn(t *testing.T) {
125126
taskDiffHelper(t, []*api.Task{testTasks[0]}, v1.TasksResponse{Tasks: []*v1.TaskResponse{&taskResponse}})
126127
}
127128

129+
func TestGetAWSVPCTaskByTaskArn(t *testing.T) {
130+
recorder := performMockRequest(t, "/v1/tasks?taskarn=awsvpcTask")
131+
132+
var taskResponse v1.TaskResponse
133+
err := json.Unmarshal(recorder.Body.Bytes(), &taskResponse)
134+
if err != nil {
135+
t.Fatal(err)
136+
}
137+
138+
resp := v1.TasksResponse{Tasks: []*v1.TaskResponse{&taskResponse}}
139+
140+
assert.Equal(t, eniIPV4Address, resp.Tasks[0].Networks[0].IPV4Addresses[0])
141+
taskDiffHelper(t, []*api.Task{testTasks[3]}, resp)
142+
}
143+
128144
func TestGetTaskByTaskArnNotFound(t *testing.T) {
129145
recorder := performMockRequest(t, "/v1/tasks?taskarn=doesnotexist")
130146

@@ -303,6 +319,25 @@ var testTasks = []*api.Task{
303319
},
304320
},
305321
},
322+
{
323+
Arn: "awsvpcTask",
324+
DesiredStatusUnsafe: api.TaskRunning,
325+
KnownStatusUnsafe: api.TaskRunning,
326+
Family: "test",
327+
Version: "1",
328+
Containers: []*api.Container{
329+
{
330+
Name: "awsvpc",
331+
},
332+
},
333+
ENI: &api.ENI{
334+
IPV4Addresses: []*api.ENIIPV4Address{
335+
{
336+
Address: eniIPV4Address,
337+
},
338+
},
339+
},
340+
},
306341
}
307342

308343
func stateSetupHelper(state dockerstate.TaskEngineState, tasks []*api.Task) {

0 commit comments

Comments
 (0)