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
1=== modified file 'dependencies.tsv'
2--- dependencies.tsv 2014-03-28 22:42:44 +0000
3+++ dependencies.tsv 2014-04-01 15:03:49 +0000
4@@ -13,7 +13,7 @@
5 launchpad.net/goamz bzr roger.peppe@canonical.com-20131218155244-hbnkvlkkzy3vmlh9 44
6 launchpad.net/gocheck bzr gustavo@niemeyer.net-20130302024745-6ikofwq2c03h7giu 85
7 launchpad.net/golxc bzr tim.penhey@canonical.com-20140311005930-b14361bwnocu3krh 8
8-launchpad.net/gomaasapi bzr ian.booth@canonical.com-20131017011445-m1hmr0ap14osd7li 47
9+launchpad.net/gomaasapi bzr ian.booth@canonical.com-20131017011445-m1hmr0ap14osd7li 48
10 launchpad.net/goose bzr tarmac-20140124165235-h9rloooc531udms5 116
11 launchpad.net/goyaml bzr gustavo@niemeyer.net-20131114120802-abe042syx64z2m7s 50
12 launchpad.net/gwacl bzr tarmac-20140205045433-81h182mhz24fzp5e 231
13
14=== modified file 'provider/maas/environ.go'
15--- provider/maas/environ.go 2014-03-28 15:09:04 +0000
16+++ provider/maas/environ.go 2014-04-01 15:03:49 +0000
17@@ -541,3 +541,60 @@
18 return []simplestreams.DataSource{
19 storage.NewStorageSimpleStreamsDataSource("cloud storage", e.Storage(), storage.BaseToolsPath)}, nil
20 }
21+
22+type MAASNetworkDetails struct {
23+ Name string
24+ Ip string
25+ NetworkMask string
26+ VlanTag string
27+ Description string
28+}
29+
30+// GetNetworksList returns a list of strings which contain networks for a gien maas node instance.
31+func (e *maasEnviron) GetNetworksList(inst instance.Instance) ([]MAASNetworkDetails, error) {
32+ maasInst := inst.(*maasInstance)
33+ maasObj := maasInst.maasObject
34+ networksClient := e.getMAASClient().GetSubObject("networks")
35+ system_id, err := maasObj.GetField("system_id")
36+ if err != nil {
37+ return nil, err
38+ }
39+ params := url.Values{"node": {system_id}}
40+ json, err := networksClient.CallGet("", params)
41+ if err != nil {
42+ return nil, err
43+ }
44+ jsonNets, err := json.GetArray()
45+ if err != nil {
46+ return nil, err
47+ }
48+ var attributeError error
49+ getField := func(maasNet *gomaasapi.MAASObject, name string) (val string) {
50+ if attributeError != nil {
51+ return
52+ }
53+ val, attributeError = maasNet.GetField(name)
54+ if attributeError != nil {
55+ attributeError = fmt.Errorf("cannot get %q: %v", name, attributeError)
56+ }
57+ return val
58+ }
59+ networks := make([]MAASNetworkDetails, len(jsonNets))
60+ for i, jsonNet := range jsonNets {
61+ maasNet, err := jsonNet.GetMAASObject()
62+ if err != nil {
63+ return nil, err
64+ }
65+ networks[i] = MAASNetworkDetails{
66+ Name: getField(&maasNet, "name"),
67+ Ip: getField(&maasNet, "ip"),
68+ NetworkMask: getField(&maasNet, "netmask"),
69+ VlanTag: getField(&maasNet, "vlan_tag"),
70+ Description: getField(&maasNet, "description"),
71+ }
72+ }
73+ if attributeError != nil {
74+ return nil, attributeError
75+ }
76+ return networks, attributeError
77+}
78
79=== modified file 'provider/maas/environ_whitebox_test.go'
80--- provider/maas/environ_whitebox_test.go 2014-03-28 13:27:45 +0000
81+++ provider/maas/environ_whitebox_test.go 2014-04-01 15:03:49 +0000
82@@ -13,6 +13,7 @@
83
84 jc "github.com/juju/testing/checkers"
85 gc "launchpad.net/gocheck"
86+ "launchpad.net/gomaasapi"
87 "launchpad.net/goyaml"
88
89 "launchpad.net/juju-core/constraints"
90@@ -336,6 +337,12 @@
91 return &maasInstance{maasObject: &node, environ: suite.makeEnviron()}
92 }
93
94+func (suite *environSuite) getNetwork(name string) *gomaasapi.MAASObject {
95+ input := `{"name": "` + name + `", "ip":"127.0.0.1", "netmask": "255.255.255.0", "vlan_tag": "1", "description": "" }`
96+ network := suite.testMAASObject.TestServer.NewNetwork(input)
97+ return &network
98+}
99+
100 func (suite *environSuite) TestStopInstancesReturnsIfParameterEmpty(c *gc.C) {
101 suite.getInstance("test1")
102
103@@ -525,6 +532,15 @@
104 c.Assert(a, gc.DeepEquals, []string{"amd64"})
105 }
106
107+func (suite *environSuite) TestGetNetworksList(c *gc.C) {
108+ suite.getNetwork("test_network")
109+ test_instance := suite.getInstance("instance_for_network")
110+ suite.testMAASObject.TestServer.ConnectNodeToNetwork("instance_for_network", "test_network")
111+ networks, err := suite.makeEnviron().GetNetworksList(test_instance)
112+ c.Assert(err, gc.IsNil)
113+ c.Check(networks, gc.DeepEquals, []MAASNetworkDetails{{Name: "test_network", Ip: "127.0.0.1", NetworkMask: "255.255.255.0", VlanTag: "1", Description: ""}})
114+}
115+
116 func (suite *environSuite) TestSupportNetworks(c *gc.C) {
117 env := suite.makeEnviron()
118 // TODO(dimitern) Change this to check for jc.IsTrue below

Subscribers

People subscribed via source and target branches

to status/vote changes: