From 3661510f7f9f389f25a6d6a065509ae224372994 Mon Sep 17 00:00:00 2001 From: French Ben Date: Fri, 21 Oct 2016 15:45:05 -0700 Subject: [PATCH] Updated AWS logstream to understand tags Signed-off-by: French Ben --- daemon/logger/awslogs/cloudwatchlogs.go | 9 +++++- daemon/logger/awslogs/cloudwatchlogs_test.go | 31 ++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/daemon/logger/awslogs/cloudwatchlogs.go b/daemon/logger/awslogs/cloudwatchlogs.go index 796fe96380..fee518db4b 100644 --- a/daemon/logger/awslogs/cloudwatchlogs.go +++ b/daemon/logger/awslogs/cloudwatchlogs.go @@ -19,6 +19,7 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/daemon/logger/loggerutils" "github.com/docker/docker/dockerversion" ) @@ -28,6 +29,7 @@ const ( regionEnvKey = "AWS_REGION" logGroupKey = "awslogs-group" logStreamKey = "awslogs-stream" + tagKey = "tag" batchPublishFrequency = 5 * time.Second // See: http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html @@ -88,7 +90,11 @@ func init() { // the EC2 Instance Metadata Service. func New(ctx logger.Context) (logger.Logger, error) { logGroupName := ctx.Config[logGroupKey] - logStreamName := ctx.ContainerID + logStreamName, err := loggerutils.ParseLogTag(ctx, "{{.FullID}}") + if err != nil { + return nil, err + } + if ctx.Config[logStreamKey] != "" { logStreamName = ctx.Config[logStreamKey] } @@ -350,6 +356,7 @@ func ValidateLogOpt(cfg map[string]string) error { case logGroupKey: case logStreamKey: case regionKey: + case tagKey: default: return fmt.Errorf("unknown log opt '%s' for %s log driver", key, name) } diff --git a/daemon/logger/awslogs/cloudwatchlogs_test.go b/daemon/logger/awslogs/cloudwatchlogs_test.go index 8d0d9f4149..d5b1aaef52 100644 --- a/daemon/logger/awslogs/cloudwatchlogs_test.go +++ b/daemon/logger/awslogs/cloudwatchlogs_test.go @@ -15,6 +15,7 @@ import ( "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/daemon/logger/loggerutils" "github.com/docker/docker/dockerversion" ) @@ -691,3 +692,33 @@ func TestCollectBatchWithDuplicateTimestamps(t *testing.T) { } } } + +func TestCreateTagSuccess(t *testing.T) { + mockClient := newMockClient() + ctx := logger.Context{ + ContainerName: "/test-container", + ContainerID: "container-abcdefghijklmnopqrstuvwxyz01234567890", + Config: map[string]string{"tag": "{{.Name}}/{{.FullID}}"}, + } + logStreamName, e := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate) + if e != nil { + t.Errorf("Error generating tag: %q", e) + } + stream := &logStream{ + client: mockClient, + logGroupName: groupName, + logStreamName: logStreamName, + } + mockClient.createLogStreamResult <- &createLogStreamResult{} + + err := stream.create() + + if err != nil { + t.Errorf("Received unexpected err: %v\n", err) + } + argument := <-mockClient.createLogStreamArgument + + if *argument.LogStreamName != "test-container/container-abcdefghijklmnopqrstuvwxyz01234567890" { + t.Errorf("Expected LogStreamName to be %s", "test-container/container-abcdefghijklmnopqrstuvwxyz01234567890") + } +}