func (c *loginCommand) cacheConnectionInfo(serverDetails envcmd.ServerFile, apiState api.Connection) (configstore.EnvironInfo, error) { store, err := configstore.Default() if err != nil { return nil, errors.Trace(err) } controllerInfo := store.CreateInfo(c.Name) controllerTag, err := apiState.ControllerTag() if err != nil { return nil, errors.Wrap(err, errors.New("juju controller too old to support login")) } connectedAddresses, err := network.ParseHostPorts(apiState.Addr()) if err != nil { // Should never happen, since we've just connected with it. return nil, errors.Annotatef(err, "invalid API address %q", apiState.Addr()) } addressConnectedTo := connectedAddresses[0] addrs, hosts, changed := juju.PrepareEndpointsForCaching(controllerInfo, apiState.APIHostPorts(), addressConnectedTo) if !changed { logger.Infof("api addresses: %v", apiState.APIHostPorts()) logger.Infof("address connected to: %v", addressConnectedTo) return nil, errors.New("no addresses returned from prepare for caching") } controllerInfo.SetAPICredentials( configstore.APICredentials{ User: serverDetails.Username, Password: serverDetails.Password, }) controllerInfo.SetAPIEndpoint(configstore.APIEndpoint{ Addresses: addrs, Hostnames: hosts, CACert: serverDetails.CACert, ServerUUID: controllerTag.Id(), }) if err = controllerInfo.Write(); err != nil { return nil, errors.Trace(err) } return controllerInfo, nil }