1
0
mirror of https://github.com/containous/traefik.git synced 2024-12-23 17:34:13 +03:00

Safe access to ECS API pointer values.

This commit is contained in:
Ludovic Fernandez 2018-03-08 10:08:03 +01:00 committed by Traefiker Bot
parent 546f0173ab
commit 862957c30c

View File

@ -308,12 +308,12 @@ func (p *Provider) listInstances(ctx context.Context, client *awsClient) ([]ecsI
byTaskDefinition := make(map[string]int) byTaskDefinition := make(map[string]int)
for _, task := range tasks { for _, task := range tasks {
if _, found := byContainerInstance[*task.ContainerInstanceArn]; !found { if _, found := byContainerInstance[aws.StringValue(task.ContainerInstanceArn)]; !found {
byContainerInstance[*task.ContainerInstanceArn] = len(containerInstanceArns) byContainerInstance[aws.StringValue(task.ContainerInstanceArn)] = len(containerInstanceArns)
containerInstanceArns = append(containerInstanceArns, task.ContainerInstanceArn) containerInstanceArns = append(containerInstanceArns, task.ContainerInstanceArn)
} }
if _, found := byTaskDefinition[*task.TaskDefinitionArn]; !found { if _, found := byTaskDefinition[aws.StringValue(task.TaskDefinitionArn)]; !found {
byTaskDefinition[*task.TaskDefinitionArn] = len(taskDefinitionArns) byTaskDefinition[aws.StringValue(task.TaskDefinitionArn)] = len(taskDefinitionArns)
taskDefinitionArns = append(taskDefinitionArns, task.TaskDefinitionArn) taskDefinitionArns = append(taskDefinitionArns, task.TaskDefinitionArn)
} }
} }
@ -327,11 +327,10 @@ func (p *Provider) listInstances(ctx context.Context, client *awsClient) ([]ecsI
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, task := range tasks { for _, task := range tasks {
machineIdx := byContainerInstance[*task.ContainerInstanceArn] machineIdx := byContainerInstance[aws.StringValue(task.ContainerInstanceArn)]
taskDefIdx := byTaskDefinition[*task.TaskDefinitionArn] taskDefIdx := byTaskDefinition[aws.StringValue(task.TaskDefinitionArn)]
for _, container := range task.Containers { for _, container := range task.Containers {
@ -345,8 +344,8 @@ func (p *Provider) listInstances(ctx context.Context, client *awsClient) ([]ecsI
} }
instances = append(instances, ecsInstance{ instances = append(instances, ecsInstance{
fmt.Sprintf("%s-%s", strings.Replace(*task.Group, ":", "-", 1), *container.Name), fmt.Sprintf("%s-%s", strings.Replace(aws.StringValue(task.Group), ":", "-", 1), *container.Name),
(*task.TaskArn)[len(*task.TaskArn)-12:], (aws.StringValue(task.TaskArn))[len(aws.StringValue(task.TaskArn))-12:],
task, task,
taskDefinition, taskDefinition,
container, container,
@ -381,7 +380,7 @@ func (p *Provider) lookupEc2Instances(ctx context.Context, client *awsClient, cl
containerResp := req.Data.(*ecs.DescribeContainerInstancesOutput) containerResp := req.Data.(*ecs.DescribeContainerInstancesOutput)
for i, container := range containerResp.ContainerInstances { for i, container := range containerResp.ContainerInstances {
order[*container.Ec2InstanceId] = order[*container.ContainerInstanceArn] order[aws.StringValue(container.Ec2InstanceId)] = order[aws.StringValue(container.ContainerInstanceArn)]
instanceIds[i] = container.Ec2InstanceId instanceIds[i] = container.Ec2InstanceId
} }
} }
@ -399,7 +398,7 @@ func (p *Provider) lookupEc2Instances(ctx context.Context, client *awsClient, cl
for _, r := range instancesResp.Reservations { for _, r := range instancesResp.Reservations {
for _, i := range r.Instances { for _, i := range r.Instances {
if i.InstanceId != nil { if i.InstanceId != nil {
instances[order[*i.InstanceId]] = i instances[order[aws.StringValue(i.InstanceId)]] = i
} }
} }
} }
@ -426,7 +425,7 @@ func (p *Provider) lookupTaskDefinitions(ctx context.Context, client *awsClient,
func (p *Provider) label(i ecsInstance, k string) string { func (p *Provider) label(i ecsInstance, k string) string {
if v, found := i.containerDefinition.DockerLabels[k]; found { if v, found := i.containerDefinition.DockerLabels[k]; found {
return *v return aws.StringValue(v)
} }
return "" return ""
} }
@ -565,14 +564,14 @@ func (p *Provider) getProtocol(i ecsInstance) string {
} }
func (p *Provider) getHost(i ecsInstance) string { func (p *Provider) getHost(i ecsInstance) string {
return *i.machine.PrivateIpAddress return aws.StringValue(i.machine.PrivateIpAddress)
} }
func (p *Provider) getPort(i ecsInstance) string { func (p *Provider) getPort(i ecsInstance) string {
if port := p.label(i, types.LabelPort); port != "" { if port := p.label(i, types.LabelPort); port != "" {
return port return port
} }
return strconv.FormatInt(*i.container.NetworkBindings[0].HostPort, 10) return strconv.FormatInt(aws.Int64Value(i.container.NetworkBindings[0].HostPort), 10)
} }
func (p *Provider) getWeight(i ecsInstance) string { func (p *Provider) getWeight(i ecsInstance) string {