Merge lp:~gz/juju-core/maas_list_networks into lp:~go-bot/juju-core/trunk

Proposed by Martin Packman
Status: Merged
Approved by: Martin Packman
Approved revision: no longer in the source branch.
Merged at revision: 2529
Proposed branch: lp:~gz/juju-core/maas_list_networks
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 118 lines (+74/-1)
3 files modified
dependencies.tsv (+1/-1)
provider/maas/environ.go (+57/-0)
provider/maas/environ_whitebox_test.go (+16/-0)
To merge this branch: bzr merge lp:~gz/juju-core/maas_list_networks
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+213498@code.launchpad.net

Commit message

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://codereview.appspot.com/82690043/

R=dimitern

Description of the change

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://codereview.appspot.com/82690043/

To post a comment you must log in.
Revision history for this message
Martin Packman (gz) wrote :
Download full text (4.5 KiB)

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 ...

Read more...

Revision history for this message
Dimiter Naydenov (dimitern) wrote :

LGTM assuming this passes a live test with MAAS. I can integrate with it
my provisioner changes. Thanks!

https://codereview.appspot.com/82690043/

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (9.9 KiB)

The attempt to merge lp:~gz/juju-core/maas_list_networks into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.103s
ok launchpad.net/juju-core/agent/mongo 0.554s
ok launchpad.net/juju-core/agent/tools 0.211s
ok launchpad.net/juju-core/bzr 5.329s
ok launchpad.net/juju-core/cert 2.258s
ok launchpad.net/juju-core/charm 0.375s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.034s
ok launchpad.net/juju-core/cloudinit/sshinit 0.775s
ok launchpad.net/juju-core/cmd 0.230s
ok launchpad.net/juju-core/cmd/charm-admin 0.734s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/envcmd 0.213s
ok launchpad.net/juju-core/cmd/juju 213.670s
ok launchpad.net/juju-core/cmd/jujud 65.453s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 10.509s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/cmd/plugins/local 0.180s
? launchpad.net/juju-core/cmd/plugins/local/juju-local [no test files]
ok launchpad.net/juju-core/constraints 0.038s
ok launchpad.net/juju-core/container 0.043s
ok launchpad.net/juju-core/container/factory 0.036s
ok launchpad.net/juju-core/container/kvm 0.200s
ok launchpad.net/juju-core/container/kvm/mock 0.040s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 4.327s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.260s
ok launchpad.net/juju-core/environs 2.471s
ok launchpad.net/juju-core/environs/bootstrap 10.340s
ok launchpad.net/juju-core/environs/cloudinit 0.454s
ok launchpad.net/juju-core/environs/config 3.150s
ok launchpad.net/juju-core/environs/configstore 0.032s
ok launchpad.net/juju-core/environs/filestorage 0.026s
ok launchpad.net/juju-core/environs/httpstorage 0.603s
ok launchpad.net/juju-core/environs/imagemetadata 0.511s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.040s
ok launchpad.net/juju-core/environs/jujutest 0.162s
ok launchpad.net/juju-core/environs/manual 13.116s
ok launchpad.net/juju-core/environs/simplestreams 0.254s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 0.892s
ok launchpad.net/juju-core/environs/storage 0.840s
ok launchpad.net/juju-core/environs/sync 42.673s
ok launchpad.net/juju-core/environs/testing 0.153s
ok launchpad.net/juju-core/environs/tools 4.946s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.012s
ok launchpad.net/juju-core/instance 0.020s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core/juju 18.181s
ok ...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'dependencies.tsv'
--- dependencies.tsv 2014-03-28 22:42:44 +0000
+++ dependencies.tsv 2014-04-01 15:03:49 +0000
@@ -13,7 +13,7 @@
13launchpad.net/goamz bzr roger.peppe@canonical.com-20131218155244-hbnkvlkkzy3vmlh9 4413launchpad.net/goamz bzr roger.peppe@canonical.com-20131218155244-hbnkvlkkzy3vmlh9 44
14launchpad.net/gocheck bzr gustavo@niemeyer.net-20130302024745-6ikofwq2c03h7giu 8514launchpad.net/gocheck bzr gustavo@niemeyer.net-20130302024745-6ikofwq2c03h7giu 85
15launchpad.net/golxc bzr tim.penhey@canonical.com-20140311005930-b14361bwnocu3krh 815launchpad.net/golxc bzr tim.penhey@canonical.com-20140311005930-b14361bwnocu3krh 8
16launchpad.net/gomaasapi bzr ian.booth@canonical.com-20131017011445-m1hmr0ap14osd7li 4716launchpad.net/gomaasapi bzr ian.booth@canonical.com-20131017011445-m1hmr0ap14osd7li 48
17launchpad.net/goose bzr tarmac-20140124165235-h9rloooc531udms5 11617launchpad.net/goose bzr tarmac-20140124165235-h9rloooc531udms5 116
18launchpad.net/goyaml bzr gustavo@niemeyer.net-20131114120802-abe042syx64z2m7s 5018launchpad.net/goyaml bzr gustavo@niemeyer.net-20131114120802-abe042syx64z2m7s 50
19launchpad.net/gwacl bzr tarmac-20140205045433-81h182mhz24fzp5e 23119launchpad.net/gwacl bzr tarmac-20140205045433-81h182mhz24fzp5e 231
2020
=== modified file 'provider/maas/environ.go'
--- provider/maas/environ.go 2014-03-28 15:09:04 +0000
+++ provider/maas/environ.go 2014-04-01 15:03:49 +0000
@@ -541,3 +541,60 @@
541 return []simplestreams.DataSource{541 return []simplestreams.DataSource{
542 storage.NewStorageSimpleStreamsDataSource("cloud storage", e.Storage(), storage.BaseToolsPath)}, nil542 storage.NewStorageSimpleStreamsDataSource("cloud storage", e.Storage(), storage.BaseToolsPath)}, nil
543}543}
544
545type MAASNetworkDetails struct {
546 Name string
547 Ip string
548 NetworkMask string
549 VlanTag string
550 Description string
551}
552
553// GetNetworksList returns a list of strings which contain networks for a gien maas node instance.
554func (e *maasEnviron) GetNetworksList(inst instance.Instance) ([]MAASNetworkDetails, error) {
555 maasInst := inst.(*maasInstance)
556 maasObj := maasInst.maasObject
557 networksClient := e.getMAASClient().GetSubObject("networks")
558 system_id, err := maasObj.GetField("system_id")
559 if err != nil {
560 return nil, err
561 }
562 params := url.Values{"node": {system_id}}
563 json, err := networksClient.CallGet("", params)
564 if err != nil {
565 return nil, err
566 }
567 jsonNets, err := json.GetArray()
568 if err != nil {
569 return nil, err
570 }
571 var attributeError error
572 getField := func(maasNet *gomaasapi.MAASObject, name string) (val string) {
573 if attributeError != nil {
574 return
575 }
576 val, attributeError = maasNet.GetField(name)
577 if attributeError != nil {
578 attributeError = fmt.Errorf("cannot get %q: %v", name, attributeError)
579 }
580 return val
581 }
582 networks := make([]MAASNetworkDetails, len(jsonNets))
583 for i, jsonNet := range jsonNets {
584 maasNet, err := jsonNet.GetMAASObject()
585 if err != nil {
586 return nil, err
587 }
588 networks[i] = MAASNetworkDetails{
589 Name: getField(&maasNet, "name"),
590 Ip: getField(&maasNet, "ip"),
591 NetworkMask: getField(&maasNet, "netmask"),
592 VlanTag: getField(&maasNet, "vlan_tag"),
593 Description: getField(&maasNet, "description"),
594 }
595 }
596 if attributeError != nil {
597 return nil, attributeError
598 }
599 return networks, attributeError
600}
544601
=== modified file 'provider/maas/environ_whitebox_test.go'
--- provider/maas/environ_whitebox_test.go 2014-03-28 13:27:45 +0000
+++ provider/maas/environ_whitebox_test.go 2014-04-01 15:03:49 +0000
@@ -13,6 +13,7 @@
1313
14 jc "github.com/juju/testing/checkers"14 jc "github.com/juju/testing/checkers"
15 gc "launchpad.net/gocheck"15 gc "launchpad.net/gocheck"
16 "launchpad.net/gomaasapi"
16 "launchpad.net/goyaml"17 "launchpad.net/goyaml"
1718
18 "launchpad.net/juju-core/constraints"19 "launchpad.net/juju-core/constraints"
@@ -336,6 +337,12 @@
336 return &maasInstance{maasObject: &node, environ: suite.makeEnviron()}337 return &maasInstance{maasObject: &node, environ: suite.makeEnviron()}
337}338}
338339
340func (suite *environSuite) getNetwork(name string) *gomaasapi.MAASObject {
341 input := `{"name": "` + name + `", "ip":"127.0.0.1", "netmask": "255.255.255.0", "vlan_tag": "1", "description": "" }`
342 network := suite.testMAASObject.TestServer.NewNetwork(input)
343 return &network
344}
345
339func (suite *environSuite) TestStopInstancesReturnsIfParameterEmpty(c *gc.C) {346func (suite *environSuite) TestStopInstancesReturnsIfParameterEmpty(c *gc.C) {
340 suite.getInstance("test1")347 suite.getInstance("test1")
341348
@@ -525,6 +532,15 @@
525 c.Assert(a, gc.DeepEquals, []string{"amd64"})532 c.Assert(a, gc.DeepEquals, []string{"amd64"})
526}533}
527534
535func (suite *environSuite) TestGetNetworksList(c *gc.C) {
536 suite.getNetwork("test_network")
537 test_instance := suite.getInstance("instance_for_network")
538 suite.testMAASObject.TestServer.ConnectNodeToNetwork("instance_for_network", "test_network")
539 networks, err := suite.makeEnviron().GetNetworksList(test_instance)
540 c.Assert(err, gc.IsNil)
541 c.Check(networks, gc.DeepEquals, []MAASNetworkDetails{{Name: "test_network", Ip: "127.0.0.1", NetworkMask: "255.255.255.0", VlanTag: "1", Description: ""}})
542}
543
528func (suite *environSuite) TestSupportNetworks(c *gc.C) {544func (suite *environSuite) TestSupportNetworks(c *gc.C) {
529 env := suite.makeEnviron()545 env := suite.makeEnviron()
530 // TODO(dimitern) Change this to check for jc.IsTrue below546 // TODO(dimitern) Change this to check for jc.IsTrue below

Subscribers

People subscribed via source and target branches

to status/vote changes: