func (s *withoutControllerSuite) addSpacesAndSubnets(c *gc.C) { // Add a couple of spaces. _, err := s.State.AddSpace("space1", "first space id", nil, true) c.Assert(err, jc.ErrorIsNil) _, err = s.State.AddSpace("space2", "", nil, false) // no provider ID c.Assert(err, jc.ErrorIsNil) // Add 1 subnet into space1, and 2 into space2. // Each subnet is in a matching zone (e.g "subnet-#" in "zone#"). testing.AddSubnetsWithTemplate(c, s.State, 3, state.SubnetInfo{ CIDR: "10.10.{{.}}.0/24", ProviderId: "subnet-{{.}}", AvailabilityZone: "zone{{.}}", SpaceName: "{{if (eq . 0)}}space1{{else}}space2{{end}}", VLANTag: 42, }) }
func (s *ProvisionerSuite) TestProvisioningMachinesWithSpacesSuccess(c *gc.C) { p := s.newEnvironProvisioner(c) defer stop(c, p) // Add the spaces used in constraints. _, err := s.State.AddSpace("space1", nil, false) c.Assert(err, jc.ErrorIsNil) _, err = s.State.AddSpace("space2", nil, false) c.Assert(err, jc.ErrorIsNil) // Add 1 subnet into space1, and 2 into space2. // Only the first subnet of space2 has AllocatableIPLow|High set. // Each subnet is in a matching zone (e.g "subnet-#" in "zone#"). testing.AddSubnetsWithTemplate(c, s.State, 3, state.SubnetInfo{ CIDR: "10.10.{{.}}.0/24", ProviderId: "subnet-{{.}}", AllocatableIPLow: "{{if (eq . 1)}}10.10.{{.}}.5{{end}}", AllocatableIPHigh: "{{if (eq . 1)}}10.10.{{.}}.254{{end}}", AvailabilityZone: "zone{{.}}", SpaceName: "{{if (eq . 0)}}space1{{else}}space2{{end}}", VLANTag: 42, }) // Add and provision a machine with spaces specified. cons := constraints.MustParse( s.defaultConstraints.String(), "spaces=space2,^space1", ) // The dummy provider simulates 2 subnets per included space. expectedSubnetsToZones := map[network.Id][]string{ "subnet-0": []string{"zone0"}, "subnet-1": []string{"zone1"}, } m, err := s.addMachineWithConstraints(cons) c.Assert(err, jc.ErrorIsNil) inst := s.checkStartInstanceCustom( c, m, "pork", cons, nil, nil, expectedSubnetsToZones, nil, false, nil, true, ) // Cleanup. c.Assert(m.EnsureDead(), gc.IsNil) s.checkStopInstances(c, inst) s.waitRemoved(c, m) }
func (s *provisionerSuite) TestProvisioningInfo(c *gc.C) { // Add a couple of spaces. _, err := s.State.AddSpace("space1", "", nil, true) c.Assert(err, jc.ErrorIsNil) _, err = s.State.AddSpace("space2", "", nil, false) c.Assert(err, jc.ErrorIsNil) // Add 2 subnets into each space. // Only the first subnet of space2 has AllocatableIPLow|High set. // Each subnet is in a matching zone (e.g "subnet-#" in "zone#"). testing.AddSubnetsWithTemplate(c, s.State, 4, state.SubnetInfo{ CIDR: "10.{{.}}.0.0/16", ProviderId: "subnet-{{.}}", AllocatableIPLow: "{{if (eq . 2)}}10.{{.}}.0.5{{end}}", AllocatableIPHigh: "{{if (eq . 2)}}10.{{.}}.254.254{{end}}", AvailabilityZone: "zone{{.}}", SpaceName: "{{if (lt . 2)}}space1{{else}}space2{{end}}", }) cons := constraints.MustParse("cpu-cores=12 mem=8G spaces=^space1,space2") template := state.MachineTemplate{ Series: "quantal", Jobs: []state.MachineJob{state.JobHostUnits}, Placement: "valid", Constraints: cons, } machine, err := s.State.AddOneMachine(template) c.Assert(err, jc.ErrorIsNil) apiMachine, err := s.provisioner.Machine(machine.Tag().(names.MachineTag)) c.Assert(err, jc.ErrorIsNil) provisioningInfo, err := apiMachine.ProvisioningInfo() c.Assert(err, jc.ErrorIsNil) c.Assert(provisioningInfo.Series, gc.Equals, template.Series) c.Assert(provisioningInfo.Placement, gc.Equals, template.Placement) c.Assert(provisioningInfo.Constraints, jc.DeepEquals, template.Constraints) c.Assert(provisioningInfo.Networks, gc.HasLen, 0) c.Assert(provisioningInfo.SubnetsToZones, jc.DeepEquals, map[string][]string{ "subnet-2": []string{"zone2"}, "subnet-3": []string{"zone3"}, }) }