in local-container-endpoints/handlers/metadata.go [96:135]
func (service *MetadataService) taskMetadataResponse(w http.ResponseWriter, identifier string, callerIP string) error {
timeout, _ := time.ParseDuration(config.HTTPTimeoutDuration)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
containers, err := service.dockerClient.ContainerList(ctx)
if err != nil {
return err
}
taskContainers := getTaskContainers(containers, identifier, callerIP)
data := metadata.GetTaskMetadata(taskContainers, service.containerInstanceTags, service.taskTags)
if service.baseContainerMetadata == nil && service.baseTaskMetadata == nil {
writeJSONResponse(w, data)
return nil
}
response := structs.Map(data)
if service.baseContainerMetadata != nil {
rawContainers, _ := response["Containers"]
jsonContainers := rawContainers.([]interface{})
var mergedContainers []map[string]interface{}
for _, container := range jsonContainers {
// Merges, with baseContainerMetadata taking priority on conflicts
cont := container.(map[string]interface{})
cont = mergemap.Merge(cont, service.baseContainerMetadata)
mergedContainers = append(mergedContainers, cont)
}
response["Containers"] = mergedContainers
}
if service.baseTaskMetadata != nil {
// Merges, with baseTaskMetadata taking priority on conflicts
response = mergemap.Merge(response, service.baseTaskMetadata)
}
writeJSONResponse(w, response)
return nil
}