// cacheAPIInfo updates the local environment settings (.jenv file) // with the provided apiInfo, assuming we've just successfully // connected to the API server. func cacheAPIInfo(info configstore.EnvironInfo, apiInfo *api.Info) error { info.SetAPIEndpoint(configstore.APIEndpoint{ Addresses: apiInfo.Addrs, CACert: string(apiInfo.CACert), }) _, username, err := names.ParseTag(apiInfo.Tag, names.UserTagKind) if err != nil { return fmt.Errorf("invalid API user tag: %v", err) } info.SetAPICredentials(configstore.APICredentials{ User: username, Password: apiInfo.Password, }) return info.Write() }
// cacheChangedAPIAddresses updates the local environment settings (.jenv file) // with the provided API server addresses if they have changed. func cacheChangedAPIAddresses(info configstore.EnvironInfo, st apiState) error { var addrs []string for _, serverHostPorts := range st.APIHostPorts() { for _, hostPort := range serverHostPorts { // Only cache addresses that are likely to be usable, // exclude IPv6 for now and localhost style ones. if hostPort.Type != instance.Ipv6Address && hostPort.NetworkScope != instance.NetworkMachineLocal { addrs = append(addrs, hostPort.NetAddr()) } } } endpoint := info.APIEndpoint() if len(addrs) == 0 || !addrsChanged(endpoint.Addresses, addrs) { return nil } logger.Debugf("API addresses changed from %q to %q", endpoint.Addresses, addrs) endpoint.Addresses = addrs info.SetAPIEndpoint(endpoint) if err := info.Write(); err != nil { return err } logger.Infof("updated API connection settings cache") return nil }