// openEndpoints opens the endpoints in the Azure deployment. func (azInstance *azureInstance) openEndpoints(api *gwacl.ManagementAPI, portRanges []network.PortRange) error { request := &gwacl.AddRoleEndpointsRequest{ ServiceName: azInstance.serviceName(), DeploymentName: azInstance.deploymentName, RoleName: azInstance.roleName, } for _, portRange := range portRanges { name := fmt.Sprintf("%s%d-%d", portRange.Protocol, portRange.FromPort, portRange.ToPort) for port := portRange.FromPort; port <= portRange.ToPort; port++ { endpoint := gwacl.InputEndpoint{ LocalPort: port, Name: fmt.Sprintf("%s_range_%d", name, port), Port: port, Protocol: portRange.Protocol, } if azInstance.supportsLoadBalancing() { probePort := port if strings.ToUpper(endpoint.Protocol) == "UDP" { // Load balancing needs a TCP port to probe, or an HTTP // server port & path to query. For UDP, we just use the // machine's SSH agent port to test machine liveness. // // It probably doesn't make sense to load balance most UDP // protocols transparently, but that's an application level // concern. probePort = 22 } endpoint.LoadBalancedEndpointSetName = name endpoint.LoadBalancerProbe = &gwacl.LoadBalancerProbe{ Port: probePort, Protocol: "TCP", } } request.InputEndpoints = append(request.InputEndpoints, endpoint) } } return api.AddRoleEndpoints(request) }