// decorateAndWriteInfo decorates the info struct with information // from the given cfg, and the writes that out to the filesystem. func decorateAndWriteInfo( store jujuclient.ClientStore, details prepareDetails, controllerName, modelName string, ) error { accountName := details.User if err := store.UpdateController(controllerName, details.ControllerDetails); err != nil { return errors.Trace(err) } if err := store.UpdateBootstrapConfig(controllerName, details.BootstrapConfig); err != nil { return errors.Trace(err) } if err := store.UpdateAccount(controllerName, accountName, details.AccountDetails); err != nil { return errors.Trace(err) } if err := store.SetCurrentAccount(controllerName, accountName); err != nil { return errors.Trace(err) } if err := store.UpdateModel(controllerName, accountName, modelName, details.ModelDetails); err != nil { return errors.Trace(err) } if err := store.SetCurrentModel(controllerName, accountName, modelName); err != nil { return errors.Trace(err) } return nil }
// updateController prompts for a controller name and updates the // controller and account details in the given client store. // It returns the name of the updated controller. func (c *registerCommand) updateController( ctx *cmd.Context, store jujuclient.ClientStore, defaultControllerName string, controllerDetails jujuclient.ControllerDetails, accountDetails jujuclient.AccountDetails, ) (string, error) { // Check that the same controller isn't already stored, so that we // can avoid needlessly asking for a controller name in that case. all, err := store.AllControllers() if err != nil { return "", errors.Trace(err) } for name, ctl := range all { if ctl.ControllerUUID == controllerDetails.ControllerUUID { // TODO(rogpeppe) lp#1614010 Succeed but override the account details in this case? return "", errors.Errorf("controller is already registered as %q", name) } } controllerName, err := c.promptControllerName(store, defaultControllerName, ctx.Stderr, ctx.Stdin) if err != nil { return "", errors.Trace(err) } if err := store.AddController(controllerName, controllerDetails); err != nil { return "", errors.Trace(err) } if err := store.UpdateAccount(controllerName, accountDetails); err != nil { return "", errors.Annotatef(err, "cannot update account information: %v", err) } return controllerName, nil }
// decorateAndWriteInfo decorates the info struct with information // from the given cfg, and the writes that out to the filesystem. func decorateAndWriteInfo( store jujuclient.ClientStore, details prepareDetails, controllerName, modelName string, ) error { qualifiedModelName := jujuclient.JoinOwnerModelName( names.NewUserTag(details.AccountDetails.User), modelName, ) if err := store.AddController(controllerName, details.ControllerDetails); err != nil { return errors.Trace(err) } if err := store.UpdateBootstrapConfig(controllerName, details.BootstrapConfig); err != nil { return errors.Trace(err) } if err := store.UpdateAccount(controllerName, details.AccountDetails); err != nil { return errors.Trace(err) } if err := store.UpdateModel(controllerName, qualifiedModelName, details.ModelDetails); err != nil { return errors.Trace(err) } if err := store.SetCurrentModel(controllerName, qualifiedModelName); err != nil { return errors.Trace(err) } return nil }