func (s *EnvironmentCommandSuite) TestWriteAddsNewline(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) current, err := ioutil.ReadFile(envcmd.GetCurrentEnvironmentFilePath()) c.Assert(err, gc.IsNil) c.Assert(string(current), gc.Equals, "fubar\n") }
func (s *EnvironmentCommandSuite) TestGetDefaultEnvironmentCurrentEnvironmentSet(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) env, err := envcmd.GetDefaultEnvironment() c.Assert(env, gc.Equals, "fubar") c.Assert(err, gc.IsNil) }
func (s *createSuite) SetUpTest(c *gc.C) { s.FakeJujuHomeSuite.SetUpTest(c) s.SetFeatureFlags(feature.JES) s.fake = &fakeCreateClient{} store := configstore.Default s.AddCleanup(func(*gc.C) { configstore.Default = store }) s.store = configstore.NewMem() configstore.Default = func() (configstore.Storage, error) { return s.store, nil } // Set up the current environment, and write just enough info // so we don't try to refresh envName := "test-master" s.serverUUID = "fake-server-uuid" info := s.store.CreateInfo(envName) info.SetAPIEndpoint(configstore.APIEndpoint{ Addresses: []string{"localhost"}, CACert: testing.CACert, EnvironUUID: s.serverUUID, ServerUUID: s.serverUUID, }) info.SetAPICredentials(configstore.APICredentials{User: "******", Password: "******"}) err := info.Write() c.Assert(err, jc.ErrorIsNil) s.server = info err = envcmd.WriteCurrentEnvironment(envName) c.Assert(err, jc.ErrorIsNil) }
func (s *SwitchSimpleSuite) TestCurrentEnvironmentHasPrecedence(c *gc.C) { testing.WriteEnvironments(c, testing.MultipleEnvConfig) envcmd.WriteCurrentEnvironment("fubar") context, err := testing.RunCommand(c, newSwitchCommand()) c.Assert(err, jc.ErrorIsNil) c.Assert(testing.Stdout(context), gc.Equals, "fubar\n") }
func (s *filesSuite) TestWriteControllerRemovesEnvironmentFile(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, jc.ErrorIsNil) err = envcmd.WriteCurrentController("baz") c.Assert(err, jc.ErrorIsNil) c.Assert(envcmd.GetCurrentEnvironmentFilePath(), jc.DoesNotExist) }
func (s *EnvironmentCommandSuite) TestGetDefaultEnvironmentBothSet(c *gc.C) { os.Setenv(osenv.JujuEnvEnvKey, "magic") err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) env, err := envcmd.GetDefaultEnvironment() c.Assert(env, gc.Equals, "magic") c.Assert(err, gc.IsNil) }
func (*filesSuite) TestCurrentCommenctionNameEnvironment(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, jc.ErrorIsNil) name, isController, err := envcmd.CurrentConnectionName() c.Assert(err, jc.ErrorIsNil) c.Assert(isController, jc.IsFalse) c.Assert(name, gc.Equals, "fubar") }
func (s *filesSuite) TestSetCurrentControllerExistingEnv(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, jc.ErrorIsNil) ctx := testing.Context(c) err = envcmd.SetCurrentController(ctx, "new-sys") c.Assert(err, jc.ErrorIsNil) s.assertCurrentController(c, "new-sys") c.Assert(testing.Stderr(ctx), gc.Equals, "fubar -> new-sys (controller)\n") }
// switchEnvironment changes the default environment to the given name and // return, if set, the current default environment name. func switchEnvironment(envName string) (string, error) { if defaultEnv := os.Getenv(osenv.JujuEnvEnvKey); defaultEnv != "" { return "", errors.Errorf("cannot switch when %s is overriding the environment (set to %q)", osenv.JujuEnvEnvKey, defaultEnv) } currentEnv, err := envcmd.GetDefaultEnvironment() if err != nil { return "", errors.Annotate(err, "cannot get the default environment") } if err := envcmd.WriteCurrentEnvironment(envName); err != nil { return "", errors.Trace(err) } return currentEnv, nil }
func (s *EnvironmentCommandSuite) TestEnvironCommandInit(c *gc.C) { // Take environment name from command line arg. testEnsureEnvName(c, "explicit", "-e", "explicit") // Take environment name from the default. coretesting.WriteEnvironments(c, coretesting.MultipleEnvConfig) testEnsureEnvName(c, coretesting.SampleEnvName) // Take environment name from the one and only environment, // even if it is not explicitly marked as default. coretesting.WriteEnvironments(c, coretesting.SingleEnvConfigNoDefault) testEnsureEnvName(c, coretesting.SampleEnvName) // If there is a current-environment file, use that. err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) testEnsureEnvName(c, "fubar") }
func (*EnvironmentCommandSuite) TestErrorWritingFile(c *gc.C) { // Can't write a file over a directory. os.MkdirAll(envcmd.GetCurrentEnvironmentFilePath(), 0777) err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.ErrorMatches, "unable to write to the environment file: .*") }
func (s *SystemCommandSuite) TestSystemCommandInitEnvFile(c *gc.C) { // If there is a current-environment file, use that. err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, jc.ErrorIsNil) testEnsureSystemName(c, "fubar") }
func (s *EnvironmentCommandSuite) TestReadCurrentEnvironmentSet(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, jc.ErrorIsNil) env := envcmd.ReadCurrentEnvironment() c.Assert(env, gc.Equals, "fubar") }
func (s *filesSuite) TestReadCurrentEnvironmentSet(c *gc.C) { err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, jc.ErrorIsNil) s.assertCurrentEnvironment(c, "fubar") }
func (s *EnvironmentCommandSuite) TestEnvironCommandInitEnvFile(c *gc.C) { // If there is a current-environment file, use that. err := envcmd.WriteCurrentEnvironment("fubar") c.Assert(err, gc.IsNil) testEnsureEnvName(c, "fubar") }
func (c *SwitchCommand) Run(ctx *cmd.Context) error { // Switch is an alternative way of dealing with environments than using // the JUJU_ENV environment setting, and as such, doesn't play too well. // If JUJU_ENV is set we should report that as the current environment, // and not allow switching when it is set. // Passing through the empty string reads the default environments.yaml file. environments, err := environs.ReadEnvirons("") if err != nil { return errors.New("couldn't read the environment") } names := environments.Names() sort.Strings(names) if c.List { // List all environments. if c.EnvName != "" { return errors.New("cannot switch and list at the same time") } for _, name := range names { fmt.Fprintf(ctx.Stdout, "%s\n", name) } return nil } jujuEnv := os.Getenv("JUJU_ENV") if jujuEnv != "" { if c.EnvName == "" { fmt.Fprintf(ctx.Stdout, "%s\n", jujuEnv) return nil } else { return fmt.Errorf("cannot switch when JUJU_ENV is overriding the environment (set to %q)", jujuEnv) } } currentEnv := envcmd.ReadCurrentEnvironment() if currentEnv == "" { currentEnv = environments.Default } // Handle the different operation modes. switch { case c.EnvName == "" && currentEnv == "": // Nothing specified and nothing to switch to. return errors.New("no currently specified environment") case c.EnvName == "": // Simply print the current environment. fmt.Fprintf(ctx.Stdout, "%s\n", currentEnv) default: // Switch the environment. if !validEnvironmentName(c.EnvName, names) { return fmt.Errorf("%q is not a name of an existing defined environment", c.EnvName) } if err := envcmd.WriteCurrentEnvironment(c.EnvName); err != nil { return err } if currentEnv == "" { fmt.Fprintf(ctx.Stdout, "-> %s\n", c.EnvName) } else { fmt.Fprintf(ctx.Stdout, "%s -> %s\n", currentEnv, c.EnvName) } } return nil }
func (s *UserSuite) SetUpTest(c *gc.C) { s.JujuConnSuite.SetUpTest(c) envcmd.WriteCurrentEnvironment("dummyenv") }