Skip to content

Commit 2a244ae

Browse files
committed
Populate subnet details when converting state.Space to network.SpaceInfo
1 parent f0871db commit 2a244ae

File tree

8 files changed

+124
-12
lines changed

8 files changed

+124
-12
lines changed

state/address.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,10 @@ func (st *State) filterHostPortsForManagementSpace(
197197
if err != nil {
198198
return nil, errors.Trace(err)
199199
}
200-
spaceInfo := sp.NetworkSpace()
200+
spaceInfo, err := sp.NetworkSpace()
201+
if err != nil {
202+
return nil, errors.Trace(err)
203+
}
201204

202205
hostPortsForAgents = make([]network.SpaceHostPorts, len(apiHostPorts))
203206
for i := range apiHostPorts {

state/controller.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,12 @@ func (st *State) checkSpaceIsAvailableToAllControllers(spaceName string) error {
173173
if err != nil {
174174
return errors.Annotate(err, "cannot get machine")
175175
}
176-
if _, ok := m.Addresses().InSpaces(space.NetworkSpace()); !ok {
176+
netSpace, err := space.NetworkSpace()
177+
if err != nil {
178+
return errors.Annotate(err, "cannot get network space")
179+
}
180+
181+
if _, ok := m.Addresses().InSpaces(netSpace); !ok {
177182
missing = append(missing, id)
178183
}
179184
}

state/linklayerdevices_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,9 @@ func (s *linkLayerDevicesStateSuite) createSpaceAndSubnet(c *gc.C, spaceName, CI
644644
func (s *linkLayerDevicesStateSuite) createSpaceAndSubnetWithProviderID(c *gc.C, spaceName, CIDR, providerSubnetID string) {
645645
space, err := s.State.AddSpace(spaceName, corenetwork.Id(spaceName), nil, true)
646646
c.Assert(err, jc.ErrorIsNil)
647-
s.spaces[spaceName] = space.NetworkSpace()
647+
spaceInfo, err := space.NetworkSpace()
648+
c.Assert(err, gc.IsNil)
649+
s.spaces[spaceName] = spaceInfo
648650

649651
_, err = s.State.AddSubnet(corenetwork.SubnetInfo{
650652
CIDR: CIDR,

state/spaces.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,27 @@ func (s *Space) Subnets() ([]*Subnet, error) {
9090
return results, nil
9191
}
9292

93-
func (s *Space) NetworkSpace() network.SpaceInfo {
93+
// NetworkSpace maps the space fields into a network.SpaceInfo.
94+
func (s *Space) NetworkSpace() (network.SpaceInfo, error) {
95+
subnets, err := s.Subnets()
96+
if err != nil {
97+
return network.SpaceInfo{}, errors.Trace(err)
98+
}
99+
100+
mappedSubnets := make([]network.SubnetInfo, len(subnets))
101+
for i, subnet := range subnets {
102+
mappedSubnet := subnet.networkSubnet()
103+
mappedSubnet.SpaceID = s.Id()
104+
mappedSubnet.SpaceName = s.Name()
105+
mappedSubnets[i] = mappedSubnet
106+
}
107+
94108
return network.SpaceInfo{
95109
ID: s.Id(),
96110
Name: network.SpaceName(s.Name()),
97111
ProviderId: s.ProviderId(),
98-
// TODO (manadart 2019-08-13): Populate these after subnet refactor.
99-
Subnets: nil,
100-
}
112+
Subnets: mappedSubnets,
113+
}, nil
101114
}
102115

103116
// AddSpace creates and returns a new space.
@@ -251,7 +264,9 @@ func (st *State) AllSpaceInfos() (network.SpaceInfos, error) {
251264
}
252265
result := make(network.SpaceInfos, len(spaces))
253266
for i, space := range spaces {
254-
result[i] = space.NetworkSpace()
267+
if result[i], err = space.NetworkSpace(); err != nil {
268+
return nil, err
269+
}
255270
}
256271
return result, nil
257272
}

state/spaces_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package state_test
66
import (
77
"fmt"
88
"net"
9+
"sort"
910

1011
"github.com/juju/errors"
1112
jc "github.com/juju/testing/checkers"
@@ -617,3 +618,67 @@ func (s *SpacesSuite) TestFanSubnetInheritsSpace(c *gc.C) {
617618
c.Assert(foundSubnet, gc.NotNil)
618619
c.Assert(foundSubnet.SpaceID(), gc.Equals, space.Id())
619620
}
621+
622+
func (s *SpacesSuite) TestSpaceToNetworkSpace(c *gc.C) {
623+
args := addSpaceArgs{
624+
Name: "space1",
625+
ProviderId: network.Id("some id 2"),
626+
SubnetCIDRs: []string{"1.1.1.0/24", "2001:cbd0::/32"},
627+
}
628+
space, err := s.addSpaceWithSubnets(c, args)
629+
c.Assert(err, jc.ErrorIsNil)
630+
s.assertSpaceMatchesArgs(c, space, args)
631+
info := network.SubnetInfo{
632+
CIDR: "253.1.0.0/16",
633+
VLANTag: 79,
634+
AvailabilityZones: []string{"AvailabilityZone"},
635+
}
636+
info.SetFan("1.1.1.0/24", "253.0.0.0/8")
637+
_, err = s.State.AddSubnet(info)
638+
c.Assert(err, jc.ErrorIsNil)
639+
640+
err = space.Refresh()
641+
c.Assert(err, jc.ErrorIsNil)
642+
643+
spaceInfo, err := space.NetworkSpace()
644+
c.Assert(err, jc.ErrorIsNil)
645+
646+
expSpaceInfo := network.SpaceInfo{
647+
Name: "space1",
648+
ID: space.Id(),
649+
ProviderId: args.ProviderId,
650+
Subnets: []network.SubnetInfo{
651+
network.SubnetInfo{
652+
SpaceID: space.Id(),
653+
SpaceName: "space1",
654+
CIDR: "1.1.1.0/24",
655+
VLANTag: 79,
656+
AvailabilityZones: []string{"AvailabilityZone"},
657+
},
658+
network.SubnetInfo{
659+
SpaceID: space.Id(),
660+
SpaceName: "space1",
661+
CIDR: "253.1.0.0/16",
662+
VLANTag: 79,
663+
AvailabilityZones: []string{"AvailabilityZone"},
664+
FanInfo: &network.FanCIDRs{
665+
FanLocalUnderlay: "1.1.1.0/24",
666+
FanOverlay: "253.0.0.0/8",
667+
},
668+
},
669+
network.SubnetInfo{
670+
SpaceID: space.Id(),
671+
SpaceName: "space1",
672+
CIDR: "2001:cbd0::/32",
673+
VLANTag: 79,
674+
AvailabilityZones: []string{"AvailabilityZone"},
675+
},
676+
},
677+
}
678+
679+
// Sort subnets by CIDR to avoid flaky tests
680+
sort.Slice(spaceInfo.Subnets, func(l, r int) bool { return spaceInfo.Subnets[l].CIDR < spaceInfo.Subnets[r].CIDR })
681+
sort.Slice(expSpaceInfo.Subnets, func(l, r int) bool { return expSpaceInfo.Subnets[l].CIDR < expSpaceInfo.Subnets[r].CIDR })
682+
683+
c.Assert(spaceInfo, gc.DeepEquals, expSpaceInfo)
684+
}

state/subnets.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,28 @@ func (s *Subnet) updateSpaceName(spaceName string) (bool, error) {
301301
return spaceNameChange && spaceName != "" && s.doc.FanLocalUnderlay == "", nil
302302
}
303303

304+
// networkSubnet maps the subnet fields into a network.SubnetInfo.
305+
func (s *Subnet) networkSubnet() network.SubnetInfo {
306+
var fanInfo *network.FanCIDRs
307+
if s.doc.FanLocalUnderlay != "" || s.doc.FanOverlay != "" {
308+
fanInfo = &network.FanCIDRs{
309+
FanLocalUnderlay: s.doc.FanLocalUnderlay,
310+
FanOverlay: s.doc.FanOverlay,
311+
}
312+
}
313+
314+
return network.SubnetInfo{
315+
CIDR: s.doc.CIDR,
316+
ProviderId: network.Id(s.doc.ProviderId),
317+
ProviderNetworkId: network.Id(s.doc.ProviderNetworkId),
318+
VLANTag: s.doc.VLANTag,
319+
AvailabilityZones: s.doc.AvailabilityZones,
320+
// SpaceName and ID will be populated by space.NetworkSpace
321+
FanInfo: fanInfo,
322+
IsPublic: s.doc.IsPublic,
323+
}
324+
}
325+
304326
// SubnetUpdate adds new info to the subnet based on provided info.
305327
func (st *State) SubnetUpdate(args network.SubnetInfo) error {
306328
s, err := st.SubnetByCIDR(args.CIDR)

worker/peergrouper/mock_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,8 @@ type fakeSpace struct {
467467
network.SpaceInfo
468468
}
469469

470-
func (s *fakeSpace) NetworkSpace() network.SpaceInfo {
471-
return s.SpaceInfo
470+
func (s *fakeSpace) NetworkSpace() (network.SpaceInfo, error) {
471+
return s.SpaceInfo, nil
472472
}
473473

474474
type fakeMongoSession struct {

worker/peergrouper/worker.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ type ControllerHost interface {
6161
}
6262

6363
type Space interface {
64-
NetworkSpace() network.SpaceInfo
64+
NetworkSpace() (network.SpaceInfo, error)
6565
}
6666

6767
type MongoSession interface {
@@ -757,7 +757,7 @@ func (w *pgWorker) getHASpaceFromConfig() (network.SpaceInfo, error) {
757757
if err != nil {
758758
return network.SpaceInfo{}, errors.Trace(err)
759759
}
760-
return space.NetworkSpace(), nil
760+
return space.NetworkSpace()
761761
}
762762

763763
// setHasVote sets the HasVote status of all the given nodes to hasVote.

0 commit comments

Comments
 (0)