func()

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
}