Code review comment for lp:~gz/juju-core/maas_list_networks

Revision history for this message
Martin Packman (gz) wrote :

Reviewers: mp+213498_code.launchpad.net,

Message:
Please take a look.

Description:
provider/maas: Added GetNetworkList

Added GetNetworkList to MAAS Provider, this makes it possible
to obtain a list of networks associated to a given MAAS node.
This branch depends on a change to launchpad.net/gomaasapi
that adds the required capabilities to the TestServer used
in the test suite.

https://code.launchpad.net/~gz/juju-core/maas_list_networks/+merge/213498

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/82690043/

Affected files (+75, -0 lines):
   A [revision details]
   M provider/maas/environ.go
   M provider/maas/environ_whitebox_test.go

Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: tarmac-20140326134028-hrndljlldotkzw2j
+New revision: <email address hidden>

Index: provider/maas/environ.go
=== modified file 'provider/maas/environ.go'
--- provider/maas/environ.go 2014-03-25 12:07:45 +0000
+++ provider/maas/environ.go 2014-03-28 19:03:16 +0000
@@ -484,3 +484,60 @@
   return []simplestreams.DataSource{
    storage.NewStorageSimpleStreamsDataSource("cloud storage", e.Storage(),
storage.BaseToolsPath)}, nil
  }
+
+type MAASNetworkDetails struct {
+ Name string
+ Ip string
+ NetworkMask string
+ VlanTag string
+ Description string
+}
+
+// GetNetworksList returns a list of strings which contain networks for a
gien maas node instance.
+func (e *maasEnviron) GetNetworksList(inst instance.Instance)
([]MAASNetworkDetails, error) {
+ maasInst := inst.(*maasInstance)
+ maasObj := maasInst.maasObject
+ networksClient := e.getMAASClient().GetSubObject("networks")
+ system_id, err := maasObj.GetField("system_id")
+ if err != nil {
+ return nil, err
+ }
+ params := url.Values{"node": {system_id}}
+ json, err := networksClient.CallGet("", params)
+ if err != nil {
+ return nil, err
+ }
+ jsonNets, err := json.GetArray()
+ if err != nil {
+ return nil, err
+ }
+ var attributeError error
+ getField := func(maasNet *gomaasapi.MAASObject, name string) (val string)
{
+ if attributeError != nil {
+ return
+ }
+ val, attributeError = maasNet.GetField(name)
+ if attributeError != nil {
+ attributeError = fmt.Errorf("cannot get %q: %v", name, attributeError)
+ }
+ return val
+ }
+ networks := make([]MAASNetworkDetails, len(jsonNets))
+ for i, jsonNet := range jsonNets {
+ maasNet, err := jsonNet.GetMAASObject()
+ if err != nil {
+ return nil, err
+ }
+ networks[i] = MAASNetworkDetails{
+ Name: getField(&maasNet, "name"),
+ Ip: getField(&maasNet, "ip"),
+ NetworkMask: getField(&maasNet, "netmask"),
+ VlanTag: getField(&maasNet, "vlan_tag"),
+ Description: getField(&maasNet, "description"),
+ }
+ }
+ if attributeError != nil {
+ return nil, attributeError
+ }
+ return networks, attributeError
+}

Index: provider/maas/environ_whitebox_test.go
=== modified file 'provider/maas/environ_whitebox_test.go'
--- provider/maas/environ_whitebox_test.go 2014-03-25 09:15:00 +0000
+++ provider/maas/environ_whitebox_test.go 2014-03-31 15:28:24 +0000
@@ -13,6 +13,7 @@

   jc "github.com/juju/testing/checkers"
   gc "launchpad.net/gocheck"
+ "launchpad.net/gomaasapi"
   "launchpad.net/goyaml"

   "launchpad.net/juju-core/constraints"
@@ -336,6 +337,12 @@
   return &maasInstance{maasObject: &node, environ: suite.makeEnviron()}
  }

+func (suite *environSuite) getNetwork(name string) *gomaasapi.MAASObject {
+ input := `{"name": "` + name +
`", "ip":"127.0.0.1", "netmask": "255.255.255.0", "vlan_tag": "1", "description": ""
}`
+ network := suite.testMAASObject.TestServer.NewNetwork(input)
+ return &network
+}
+
  func (suite *environSuite) TestStopInstancesReturnsIfParameterEmpty(c
*gc.C) {
   suite.getInstance("test1")

@@ -524,3 +531,12 @@
   c.Assert(err, gc.IsNil)
   c.Assert(a, gc.DeepEquals, []string{"amd64"})
  }
+
+func (suite *environSuite) TestGetNetworksList(c *gc.C) {
+ suite.getNetwork("test_network")
+ test_instance := suite.getInstance("instance_for_network")
+
suite.testMAASObject.TestServer.ConnectNodeToNetwork("instance_for_network", "test_network")
+ networks, err := suite.makeEnviron().GetNetworksList(test_instance)
+ c.Assert(err, gc.IsNil)
+ c.Check(networks, gc.DeepEquals,
[]MAASNetworkDetails{{Name: "test_network", Ip: "127.0.0.1",
NetworkMask: "255.255.255.0", VlanTag: "1", Description: ""}})
+}

« Back to merge proposal