// StateServerInstances is specified in the Environ interface. func (env *azureEnviron) StateServerInstances() ([]instance.Id, error) { // Locate the state-server cloud service, and get its addresses. instances, err := env.AllInstances() if err != nil { return nil, err } var stateServerInstanceIds []instance.Id var loadStateFile bool for _, inst := range instances { azureInstance := inst.(*azureInstance) label := azureInstance.hostedService.Label if decoded, err := base64.StdEncoding.DecodeString(label); err == nil { if string(decoded) == stateServerLabel { stateServerInstanceIds = append(stateServerInstanceIds, inst.Id()) continue } } if !loadStateFile { _, roleName := env.splitInstanceId(azureInstance.Id()) if roleName == "" { loadStateFile = true } } } if loadStateFile { // Some legacy instances were found, so we must load provider-state // to find which instance was the original state server. If we find // a legacy environment, then stateServerInstanceIds will not contain // the original bootstrap instance, which is the only one that will // be in provider-state. instanceIds, err := common.ProviderStateInstances(env, env.Storage()) if err != nil { return nil, err } stateServerInstanceIds = append(stateServerInstanceIds, instanceIds...) } if len(stateServerInstanceIds) == 0 { return nil, environs.ErrNoInstances } return stateServerInstanceIds, nil }
func (env *joyentEnviron) StateServerInstances() ([]instance.Id, error) { return common.ProviderStateInstances(env, env.Storage()) }