瀏覽代碼

set secrets in cloudformation template

Signed-off-by: aiordache <[email protected]>
Signed-off-by: Nicolas De Loof <[email protected]>
aiordache 5 年之前
父節點
當前提交
57d7474f7d
共有 1 個文件被更改,包括 39 次插入3 次删除
  1. 39 3
      ecs/pkg/amazon/convert.go

+ 39 - 3
ecs/pkg/amazon/convert.go

@@ -19,7 +19,14 @@ func Convert(project *compose.Project, service types.ServiceConfig) (*ecs.TaskDe
 	if err != nil {
 		return nil, err
 	}
-
+	credential, err := getRepoCredentials(service)
+	if err != nil {
+		return nil, err
+	}
+	secrets, err := getSecrets(service)
+	if err != nil {
+		return nil, err
+	}
 	return &ecs.TaskDefinition{
 		ContainerDefinitions: []ecs.TaskDefinition_ContainerDefinition{
 			// Here we can declare sidecars and init-containers using https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#container_definition_dependson
@@ -55,9 +62,9 @@ func Convert(project *compose.Project, service types.ServiceConfig) (*ecs.TaskDe
 				Privileged:             service.Privileged,
 				PseudoTerminal:         service.Tty,
 				ReadonlyRootFilesystem: service.ReadOnly,
-				RepositoryCredentials:  nil,
+				RepositoryCredentials:  credential,
 				ResourceRequirements:   nil,
-				Secrets:                nil,
+				Secrets:                secrets,
 				StartTimeout:           0,
 				StopTimeout:            durationToInt(service.StopGracePeriod),
 				SystemControls:         nil,
@@ -274,3 +281,32 @@ func toKeyValuePair(environment types.MappingWithEquals) []ecs.TaskDefinition_Ke
 	}
 	return pairs
 }
+
+func getRepoCredentials(service types.ServiceConfig) (*ecs.TaskDefinition_RepositoryCredentials, error) {
+	// extract registry and namespace string from image name
+	fields := strings.Split(service.Image, "/")
+	regPath := ""
+	for i, field := range fields {
+		if i < len(fields)-1 {
+			regPath = regPath + field
+		}
+	}
+	if regPath == "" || len(service.Secrets) == 0 {
+		return nil, nil
+	}
+	for _, secret := range service.Secrets {
+		if secret.Source == regPath {
+			return &ecs.TaskDefinition_RepositoryCredentials{CredentialsParameter: secret.Target}, nil
+		}
+	}
+	return nil, nil
+}
+
+func getSecrets(service types.ServiceConfig) ([]ecs.TaskDefinition_Secret, error) {
+	secrets := []ecs.TaskDefinition_Secret{}
+
+	for _, secret := range service.Secrets {
+		secrets = append(secrets, ecs.TaskDefinition_Secret{Name: secret.Target})
+	}
+	return secrets, nil
+}