// GetCurrentModel returns the name of the current Juju model. // // If $JUJU_MODEL is set, use that. Otherwise, get the current // controller by reading $XDG_DATA_HOME/juju/current-controller, // and then identifying the current model for that controller // in models.yaml. If there is no current controller, or no // current model for that controller, then an empty string is // returned. It is not an error to have no default model. func GetCurrentModel(store jujuclient.ClientStore) (string, error) { if model := os.Getenv(osenv.JujuModelEnvKey); model != "" { return model, nil } currentController, err := ReadCurrentController() if err != nil { return "", errors.Trace(err) } if currentController == "" { return "", nil } currentAccount, err := store.CurrentAccount(currentController) if errors.IsNotFound(err) { return "", nil } else if err != nil { return "", errors.Trace(err) } currentModel, err := store.CurrentModel(currentController, currentAccount) if errors.IsNotFound(err) { return "", nil } else if err != nil { return "", errors.Trace(err) } return currentModel, nil }
func (c *JujuCommandBase) missingModelError(store jujuclient.ClientStore, controllerName, modelName string) error { // First, we'll try and clean up the missing model from the local cache. err := store.RemoveModel(controllerName, modelName) if err != nil { logger.Warningf("cannot remove unknown model from cache: %v", err) } currentModel, err := store.CurrentModel(controllerName) if err != nil { logger.Warningf("cannot read current model: %v", err) } else if currentModel == modelName { if err := store.SetCurrentModel(controllerName, ""); err != nil { logger.Warningf("cannot reset current model: %v", err) } } errorMessage := "model %q has been removed from the controller, run 'juju models' and switch to one of them." modelInfoMessage := "\nThere are %d accessible models on controller %q." models, err := store.AllModels(controllerName) if err == nil { modelInfoMessage = fmt.Sprintf(modelInfoMessage, len(models), controllerName) } else { modelInfoMessage = "" } return errors.Errorf(errorMessage+modelInfoMessage, modelName) }