// ModeInit is the initial Uniter mode. func ModeInit(u *Uniter) (next Mode, err error) { defer modeContext("ModeInit", &err)() logger.Infof("updating unit addresses") cfg, err := u.st.EnvironConfig() if err != nil { return nil, err } provider, err := environs.Provider(cfg.Type()) if err != nil { return nil, err } if private, err := provider.PrivateAddress(); err != nil { return nil, err } else if err = u.unit.SetPrivateAddress(private); err != nil { return nil, err } if public, err := provider.PublicAddress(); err != nil { return nil, err } else if err = u.unit.SetPublicAddress(public); err != nil { return nil, err } logger.Infof("reconciling relation state") if err := u.restoreRelations(); err != nil { return nil, err } return ModeContinue, nil }
func (suite) TestBootstrapConfig(c *C) { defer makeFakeHome(c, "bladaam").restore() cfg, err := config.New(map[string]interface{}{ "name": "bladaam", "type": "dummy", "state-server": false, "admin-secret": "highly", "secret": "um", "authorized-keys": "i-am-a-key", "ca-cert": testing.CACert, "ca-private-key": testing.CAKey, }) c.Assert(err, IsNil) provider, err := environs.Provider(cfg.Type()) c.Assert(err, IsNil) tools := &state.Tools{ URL: "http://x", Binary: version.MustParseBinary("1.2.3-foo-bar"), } cfg1, err := environs.BootstrapConfig(provider, cfg, tools) c.Assert(err, IsNil) expect := cfg.AllAttrs() delete(expect, "secret") expect["admin-secret"] = "" expect["ca-private-key"] = "" expect["agent-version"] = "1.2.3" c.Assert(cfg1.AllAttrs(), DeepEquals, expect) }
func (s *MainSuite) TestProvidersAreRegistered(c *C) { // check that all the expected providers are registered for _, name := range expectedProviders { _, err := environs.Provider(name) c.Assert(err, IsNil) } }
func (s *ProviderSuite) TestMetadata(c *C) { openstack.UseTestMetadata(openstack.MetadataTesting) defer openstack.UseTestMetadata(nil) p, err := environs.Provider("openstack") c.Assert(err, IsNil) addr, err := p.PublicAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "203.1.1.2") addr, err = p.PrivateAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "10.1.1.2") }
func (suite) TestConfigRoundTrip(c *C) { cfg, err := config.New(map[string]interface{}{ "name": "bladaam", "type": "dummy", "state-server": false, "authorized-keys": "i-am-a-key", "ca-cert": testing.CACert, "ca-private-key": "", }) c.Assert(err, IsNil) provider, err := environs.Provider(cfg.Type()) c.Assert(err, IsNil) cfg, err = provider.Validate(cfg, nil) c.Assert(err, IsNil) env, err := environs.New(cfg) c.Assert(err, IsNil) c.Assert(cfg.AllAttrs(), DeepEquals, env.Config().AllAttrs()) }
func (s *ProviderSuite) TestMetadata(c *C) { metadataContent := []jujutest.FileContent{ {"/2011-01-01/meta-data/public-hostname", "public.dummy.address.invalid"}, {"/2011-01-01/meta-data/local-hostname", "private.dummy.address.invalid"}, } ec2.UseTestMetadata(metadataContent) defer ec2.UseTestMetadata(nil) p, err := environs.Provider("ec2") c.Assert(err, IsNil) addr, err := p.PublicAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "public.dummy.address.invalid") addr, err = p.PrivateAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "private.dummy.address.invalid") }
func (s *ProviderSuite) TestPublicFallbackToPrivate(c *C) { openstack.UseTestMetadata([]jujutest.FileContent{ {"/latest/meta-data/public-ipv4", "203.1.1.2"}, {"/latest/meta-data/local-ipv4", "10.1.1.2"}, }) defer openstack.UseTestMetadata(nil) p, err := environs.Provider("openstack") c.Assert(err, IsNil) addr, err := p.PublicAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "203.1.1.2") openstack.UseTestMetadata([]jujutest.FileContent{ {"/latest/meta-data/local-ipv4", "10.1.1.2"}, {"/latest/meta-data/public-ipv4", ""}, }) addr, err = p.PublicAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "10.1.1.2") }
func (s *ProviderSuite) TestPublicFallbackToPrivate(c *C) { openstack.UseTestMetadata(map[string]string{ "/latest/meta-data/public-ipv4": "203.1.1.2", "/latest/meta-data/local-ipv4": "10.1.1.2", }) defer openstack.UseTestMetadata(nil) p, err := environs.Provider("openstack") c.Assert(err, IsNil) addr, err := p.PublicAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "203.1.1.2") openstack.UseTestMetadata(map[string]string{ "/latest/meta-data/local-ipv4": "10.1.1.2", "/latest/meta-data/public-ipv4": "", }) addr, err = p.PublicAddress() c.Assert(err, IsNil) c.Assert(addr, Equals, "10.1.1.2") }
func (*localSuite) TestProviderRegistered(c *C) { provider, error := environs.Provider(provider.Local) c.Assert(error, IsNil) c.Assert(provider, DeepEquals, &local.Provider) }
func (c *ValidateImageMetadataCommand) Run(context *cmd.Context) error { var params *imagemetadata.MetadataLookupParams if c.providerType == "" { environ, err := environs.NewFromName(c.EnvName) if err != nil { return err } mdLookup, ok := environ.(imagemetadata.ImageMetadataValidator) if !ok { return fmt.Errorf("%s provider does not support image metadata validation", environ.Config().Type()) } params, err = mdLookup.MetadataLookupParams(c.region) if err != nil { return err } } else { prov, err := environs.Provider(c.providerType) if err != nil { return err } mdLookup, ok := prov.(imagemetadata.ImageMetadataValidator) if !ok { return fmt.Errorf("%s provider does not support image metadata validation", c.providerType) } params, err = mdLookup.MetadataLookupParams(c.region) if err != nil { return err } } if c.series != "" { params.Series = c.series } if c.region != "" { params.Region = c.region } if c.endpoint != "" { params.Endpoint = c.endpoint } // If the metadata files are to be loaded from a directory, we need to register // a file http transport. if c.metadataDir != "" { if _, err := os.Stat(c.metadataDir); err != nil { return err } params.BaseURLs = []string{"file://" + c.metadataDir} t := &http.Transport{} t.RegisterProtocol("file", http.NewFileTransport(http.Dir("/"))) c := &http.Client{Transport: t} imagemetadata.SetHttpClient(c) } image_ids, err := imagemetadata.ValidateImageMetadata(params) if err != nil { return err } if len(image_ids) > 0 { fmt.Fprintf(context.Stdout, "matching image ids for region %q:\n%s\n", params.Region, strings.Join(image_ids, "\n")) } else { return fmt.Errorf("no matching image ids for region %s using URLs:\n%s", params.Region, strings.Join(params.BaseURLs, "\n")) } return nil }