// attemptCreateService tries to create a new hosted service on Azure, with a // name it chooses (based on the given prefix), but recognizes that the name // may not be available. If the name is not available, it does not treat that // as an error but just returns nil. func attemptCreateService(azure *gwacl.ManagementAPI, prefix string, affinityGroupName string, location string) (*gwacl.CreateHostedService, error) { var err error name := gwacl.MakeRandomHostedServiceName(prefix) err = azure.CheckHostedServiceNameAvailability(name) if err != nil { // The calling function should retry. return nil, nil } req := gwacl.NewCreateHostedServiceWithLocation(name, name, location) req.AffinityGroup = affinityGroupName err = azure.AddHostedService(req) if err != nil { return nil, err } return req, nil }
// attemptCreateService tries to create a new hosted service on Azure, with a // name it chooses (based on the given prefix), but recognizes that the name // may not be available. If the name is not available, it does not treat that // as an error but just returns nil. func attemptCreateService(azure *gwacl.ManagementAPI, prefix string, affinityGroupName string) (*gwacl.CreateHostedService, error) { name := gwacl.MakeRandomHostedServiceName(prefix) req := gwacl.NewCreateHostedServiceWithLocation(name, name, serviceLocation) req.AffinityGroup = affinityGroupName err := azure.AddHostedService(req) azErr, isAzureError := err.(*gwacl.AzureError) if isAzureError && azErr.HTTPStatus == http.StatusConflict { // Conflict. As far as we can see, this only happens if the // name was already in use. It's still dangerous to assume // that we know it can't be anything else, but there's nothing // else in the error that we can use for closer identifcation. return nil, nil } if err != nil { return nil, err } return req, nil }