func mergeVolumesWithoutHost()

in ecs-cli/modules/utils/compose/convert_task_definition.go [276:361]


func mergeVolumesWithoutHost(composeVolumes []string, ecsParams *ECSParams) ([]*ecs.Volume, error) {
	volumesWithoutHost := make(map[string]Volume)
	output := []*ecs.Volume{}

	for _, volName := range composeVolumes {
		volumesWithoutHost[volName] = Volume{}
	}

	if ecsParams != nil {
		for _, dockerVol := range ecsParams.TaskDefinition.DockerVolumes {
			if dockerVol.Name != "" {
				volumesWithoutHost[dockerVol.Name] = Volume{DockerVolumeConfig: dockerVol}
			} else {
				return nil, fmt.Errorf("Name is required when specifying a docker volume")
			}
		}
		for _, efsVol := range ecsParams.TaskDefinition.EFSVolumes {
			if efsVol.Name != "" {
				volumesWithoutHost[efsVol.Name] = Volume{EFSVolumeConfig: efsVol}
			} else {
				return nil, fmt.Errorf("Name is required when specifying an EFS volume")
			}
		}
	}
	var dVolCfg DockerVolume
	var efsVolCfg EFSVolume
	for volName, vol := range volumesWithoutHost {
		ecsVolume := &ecs.Volume{
			Name: aws.String(volName),
		}
		dVolCfg = vol.DockerVolumeConfig
		efsVolCfg = vol.EFSVolumeConfig
		if dVolCfg.Name != "" {
			ecsVolume.DockerVolumeConfiguration = &ecs.DockerVolumeConfiguration{
				Autoprovision: dVolCfg.Autoprovision,
			}
			if dVolCfg.Driver != nil {
				ecsVolume.DockerVolumeConfiguration.Driver = dVolCfg.Driver
			}
			if dVolCfg.Scope != nil {
				ecsVolume.DockerVolumeConfiguration.Scope = dVolCfg.Scope
			}
			if dVolCfg.DriverOptions != nil {
				ecsVolume.DockerVolumeConfiguration.DriverOpts = aws.StringMap(dVolCfg.DriverOptions)
			}
			if dVolCfg.Labels != nil {
				ecsVolume.DockerVolumeConfiguration.Labels = aws.StringMap(dVolCfg.Labels)
			}
		}
		if efsVolCfg.Name != "" {
			ecsVolume.EfsVolumeConfiguration = &ecs.EFSVolumeConfiguration{}
			if efsVolCfg.FileSystemID != nil {
				ecsVolume.EfsVolumeConfiguration.FileSystemId = efsVolCfg.FileSystemID
			} else {
				return nil, fmt.Errorf("file system id is required for efs volumes")
			}
			if efsVolCfg.RootDirectory != nil {
				ecsVolume.EfsVolumeConfiguration.RootDirectory = efsVolCfg.RootDirectory
			}
			var transitEncryptionRequired = false
			efsAuthCfg := &ecs.EFSAuthorizationConfig{}
			if efsVolCfg.IAM != nil {
				efsAuthCfg.Iam = efsVolCfg.IAM
				if *efsVolCfg.IAM == "ENABLED" {
					transitEncryptionRequired = true
				}
			}
			if efsVolCfg.AccessPointID != nil {
				efsAuthCfg.AccessPointId = efsVolCfg.AccessPointID
				transitEncryptionRequired = true
			}
			ecsVolume.EfsVolumeConfiguration.AuthorizationConfig = efsAuthCfg
			if efsVolCfg.TransitEncryption != nil {
				ecsVolume.EfsVolumeConfiguration.TransitEncryption = efsVolCfg.TransitEncryption
			}
			if transitEncryptionRequired && *efsVolCfg.TransitEncryption != "ENABLED" {
				return nil, fmt.Errorf("Transit encryption is required when using IAM access or an access point")
			}
			if efsVolCfg.TransitEncryptionPort != nil {
				ecsVolume.EfsVolumeConfiguration.TransitEncryptionPort = efsVolCfg.TransitEncryptionPort
			}
		}
		output = append(output, ecsVolume)
	}
	return output, nil
}