// setBootstrapEndpointAddress writes the API endpoint address of the // bootstrap server into the connection information. This should only be run // once directly after Bootstrap. It assumes that there is just one instance // in the environment - the bootstrap instance. func (c *bootstrapCommand) setBootstrapEndpointAddress(environ environs.Environ) error { instances, err := allInstances(environ) if err != nil { return errors.Trace(err) } length := len(instances) if length == 0 { return errors.Errorf("found no instances, expected at least one") } if length > 1 { logger.Warningf("expected one instance, got %d", length) } bootstrapInstance := instances[0] // Don't use c.ConnectionEndpoint as it attempts to contact the state // server if no addresses are found in connection info. netAddrs, err := bootstrapInstance.Addresses() if err != nil { return errors.Annotate(err, "failed to get bootstrap instance addresses") } cfg := environ.Config() apiPort := cfg.APIPort() apiHostPorts := network.AddressesWithPort(netAddrs, apiPort) return juju.UpdateControllerAddresses(c.ClientStore(), c.controllerName, nil, apiHostPorts...) }
func (s *CacheAPIEndpointsSuite) TestPrepareEndpointsForCaching(c *gc.C) { s.assertCreateController(c, "controller-name1") err := juju.UpdateControllerAddresses(s.ControllerStore, "controller-name1", s.hostPorts, s.apiHostPort) c.Assert(err, jc.ErrorIsNil) controllerDetails, err := s.ControllerStore.ControllerByName("controller-name1") c.Assert(err, jc.ErrorIsNil) s.assertEndpoints(c, controllerDetails) s.assertControllerUpdated(c, "controller-name1") }