func (s *localServerSuite) TestAllInstancesIgnoresOtherMachines(c *gc.C) { env := s.Prepare(c) err := bootstrap.Bootstrap(coretesting.Context(c), env, environs.BootstrapParams{}) c.Assert(err, gc.IsNil) // Check that we see 1 instance in the environment insts, err := env.AllInstances() c.Assert(err, gc.IsNil) c.Check(insts, gc.HasLen, 1) // Now start a machine 'manually' in the same account, with a similar // but not matching name, and ensure it isn't seen by AllInstances // See bug #1257481, for how similar names were causing them to get // listed (and thus destroyed) at the wrong time existingEnvName := s.TestConfig["name"] newMachineName := fmt.Sprintf("juju-%s-2-machine-0", existingEnvName) // We grab the Nova client directly from the env, just to save time // looking all the stuff up novaClient := openstack.GetNovaClient(env) entity, err := novaClient.RunServer(nova.RunServerOpts{ Name: newMachineName, FlavorId: "1", // test service has 1,2,3 for flavor ids ImageId: "1", // UseTestImageData sets up images 1 and 2 }) c.Assert(err, gc.IsNil) c.Assert(entity, gc.NotNil) // List all servers with no filter, we should see both instances servers, err := novaClient.ListServersDetail(nova.NewFilter()) c.Assert(err, gc.IsNil) c.Assert(servers, gc.HasLen, 2) insts, err = env.AllInstances() c.Assert(err, gc.IsNil) c.Check(insts, gc.HasLen, 1) }
// machinesFilter returns a nova.Filter matching all machines in the environment. func (e *environ) machinesFilter() *nova.Filter { filter := nova.NewFilter() filter.Set(nova.FilterServer, fmt.Sprintf("juju-%s-.*", e.Name())) return filter }