// allInstances returns all of the instances in the given resource group, // and optionally ensures that each instance's addresses are up-to-date. func (env *azureEnviron) allInstances( resourceGroup string, refreshAddresses bool, controllerOnly bool, ) ([]instance.Instance, error) { deploymentsClient := resources.DeploymentsClient{env.resources} var deploymentsResult resources.DeploymentListResult if err := env.callAPI(func() (autorest.Response, error) { var err error deploymentsResult, err = deploymentsClient.List(resourceGroup, "", nil) return deploymentsResult.Response, err }); err != nil { if deploymentsResult.Response.Response != nil && deploymentsResult.StatusCode == http.StatusNotFound { // This will occur if the resource group does not // exist, e.g. in a fresh hosted environment. return nil, nil } return nil, errors.Trace(err) } if deploymentsResult.Value == nil || len(*deploymentsResult.Value) == 0 { return nil, nil } azureInstances := make([]*azureInstance, 0, len(*deploymentsResult.Value)) for _, deployment := range *deploymentsResult.Value { name := to.String(deployment.Name) if deployment.Properties == nil || deployment.Properties.Dependencies == nil { continue } if controllerOnly && !isControllerDeployment(deployment) { continue } provisioningState := to.String(deployment.Properties.ProvisioningState) inst := &azureInstance{name, provisioningState, env, nil, nil} azureInstances = append(azureInstances, inst) } if len(azureInstances) > 0 && refreshAddresses { if err := setInstanceAddresses( env.callAPI, resourceGroup, network.InterfacesClient{env.network}, network.PublicIPAddressesClient{env.network}, azureInstances, ); err != nil { return nil, errors.Trace(err) } } instances := make([]instance.Instance, len(azureInstances)) for i, inst := range azureInstances { instances[i] = inst } return instances, nil }