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.
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 net/gomaasapi
to obtain a list of networks associated to a given MAAS node.
This branch depends on a change to launchpad.
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): maas/environ. go maas/environ_ whitebox_ test.go
A [revision details]
M provider/
M provider/
Index: [revision details] 20140326134028- hrndljlldotkzw2 j
=== 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-
+New revision: <email address hidden>
Index: provider/ maas/environ. go maas/environ. go' maas/environ. go 2014-03-25 12:07:45 +0000 maas/environ. go 2014-03-28 19:03:16 +0000 .DataSource{ NewStorageSimpl eStreamsDataSou rce("cloud storage", e.Storage(), BaseToolsPath) }, nil (inst instance.Instance) etails, error) { maasInstance) ().GetSubObject ("networks" ) GetField( "system_ id") CallGet( "", params) MAASObject, name string) (val string) GetField( name) MAASNetworkDeta ils, len(jsonNets)) GetMAASObject( )
=== modified file 'provider/
--- provider/
+++ provider/
@@ -484,3 +484,60 @@
return []simplestreams
storage.
storage.
}
+
+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
([]MAASNetworkD
+ maasInst := inst.(*
+ maasObj := maasInst.maasObject
+ networksClient := e.getMAASClient
+ system_id, err := maasObj.
+ if err != nil {
+ return nil, err
+ }
+ params := url.Values{"node": {system_id}}
+ json, err := networksClient.
+ if err != nil {
+ return nil, err
+ }
+ jsonNets, err := json.GetArray()
+ if err != nil {
+ return nil, err
+ }
+ var attributeError error
+ getField := func(maasNet *gomaasapi.
{
+ if attributeError != nil {
+ return
+ }
+ val, attributeError = maasNet.
+ if attributeError != nil {
+ attributeError = fmt.Errorf("cannot get %q: %v", name, attributeError)
+ }
+ return val
+ }
+ networks := make([]
+ for i, jsonNet := range jsonNets {
+ maasNet, err := jsonNet.
+ 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 maas/environ_ whitebox_ test.go' maas/environ_ whitebox_ test.go 2014-03-25 09:15:00 +0000 maas/environ_ whitebox_ test.go 2014-03-31 15:28:24 +0000
=== modified file 'provider/
--- provider/
+++ provider/
@@ -13,6 +13,7 @@
jc "github. com/juju/ testing/ checkers" net/gocheck" net/gomaasapi" net/goyaml"
gc "launchpad.
+ "launchpad.
"launchpad.
"launchpad. net/juju- core/constraint s" maasObject: &node, environ: suite.makeEnvir on()}
@@ -336,6 +337,12 @@
return &maasInstance{
}
+func (suite *environSuite) getNetwork(name string) *gomaasapi. MAASObject { bject.TestServe r.NewNetwork( input) esReturnsIfPara meterEmpty( c getInstance( "test1" )
+ input := `{"name": "` + name +
`", "ip":"127.0.0.1", "netmask": "255.255.255.0", "vlan_tag": "1", "description": ""
}`
+ network := suite.testMAASO
+ return &network
+}
+
func (suite *environSuite) TestStopInstanc
*gc.C) {
suite.
@@ -524,3 +531,12 @@ List(c *gc.C) { k("test_ network" ) ce("instance_ for_network" ) bject.TestServe r.ConnectNodeTo Network( "instance_ for_network" , "test_network") on().GetNetwork sList(test_ instance) tails{{ Name: "test_network", Ip: "127.0.0.1",
c.Assert(err, gc.IsNil)
c.Assert(a, gc.DeepEquals, []string{"amd64"})
}
+
+func (suite *environSuite) TestGetNetworks
+ suite.getNetwor
+ test_instance := suite.getInstan
+
suite.testMAASO
+ networks, err := suite.makeEnvir
+ c.Assert(err, gc.IsNil)
+ c.Check(networks, gc.DeepEquals,
[]MAASNetworkDe
NetworkMask: "255.255.255.0", VlanTag: "1", Description: ""}})
+}