func (s *BootstrapSuite) TestSetConstraints(c *gc.C) { tcons := constraints.Value{Mem: uint64p(2048), CpuCores: uint64p(2)} _, cmd, err := s.initBootstrapCommand(c, nil, "--env-config", s.envcfg, "--instance-id", string(s.instanceId), "--constraints", tcons.String(), ) c.Assert(err, gc.IsNil) err = cmd.Run(nil) c.Assert(err, gc.IsNil) st, err := state.Open(&state.Info{ Addrs: []string{testing.MgoServer.Addr()}, CACert: testing.CACert, Password: testPasswordHash(), }, state.DefaultDialOpts(), environs.NewStatePolicy()) c.Assert(err, gc.IsNil) defer st.Close() cons, err := st.EnvironConstraints() c.Assert(err, gc.IsNil) c.Assert(cons, gc.DeepEquals, tcons) machines, err := st.AllMachines() c.Assert(err, gc.IsNil) c.Assert(machines, gc.HasLen, 1) cons, err = machines[0].Constraints() c.Assert(err, gc.IsNil) c.Assert(cons, gc.DeepEquals, tcons) }
// PrecheckInstance is defined on the state.Prechecker interface. func (env *joyentEnviron) PrecheckInstance(series string, cons constraints.Value, placement string) error { if placement != "" { return fmt.Errorf("unknown placement directive: %s", placement) } if !cons.HasInstanceType() { return nil } // Constraint has an instance-type constraint so let's see if it is valid. instanceTypes, err := env.listInstanceTypes() if err != nil { return err } for _, instanceType := range instanceTypes { if instanceType.Name == *cons.InstanceType { return nil } } return fmt.Errorf("invalid Joyent instance %q specified", *cons.InstanceType) }