Skip to content

Commit a66a7d3

Browse files
committed
Merge branch 'master' of https://github.com/juju/juju into ha-bootstrap-env-only
2 parents 16a0d73 + 570cda4 commit a66a7d3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2067
-687
lines changed

api/networker/export_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2015 Canonical Ltd.
2+
// Licensed under the AGPLv3, see LICENCE file for details.
3+
4+
package networker
5+
6+
import (
7+
"github.com/juju/juju/api/base/testing"
8+
)
9+
10+
// PatchFacadeCall patches the State's facade such that
11+
// FacadeCall method calls are diverted to the provided
12+
// function.
13+
func PatchFacadeCall(p testing.Patcher, st *State, f func(request string, params, response interface{}) error) {
14+
testing.PatchFacadeCall(p, &st.facade, f)
15+
}

api/networker/networker.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,23 @@ func NewState(caller base.APICaller) *State {
2525
return &State{base.NewFacadeCaller(caller, networkerFacade)}
2626
}
2727

28-
// MachineNetworkInfo returns information about network interfaces to
28+
// MachineNetworkConfig returns information about network interfaces to
2929
// setup only for a single machine.
30-
func (st *State) MachineNetworkInfo(tag names.MachineTag) ([]network.InterfaceInfo, error) {
30+
func (st *State) MachineNetworkConfig(tag names.MachineTag) ([]network.InterfaceInfo, error) {
3131
args := params.Entities{
3232
Entities: []params.Entity{{Tag: tag.String()}},
3333
}
3434
var results params.MachineNetworkConfigResults
35-
err := st.facade.FacadeCall("MachineNetworkInfo", args, &results)
35+
err := st.facade.FacadeCall("MachineNetworkConfig", args, &results)
3636
if err != nil {
37-
// TODO: Not directly tested
38-
return nil, err
37+
if params.IsCodeNotImplemented(err) {
38+
// Fallback to former name.
39+
err = st.facade.FacadeCall("MachineNetworkInfo", args, &results)
40+
}
41+
if err != nil {
42+
// TODO: Not directly tested.
43+
return nil, err
44+
}
3945
}
4046
if len(results.Results) != 1 {
4147
// TODO: Not directly tested

api/networker/networker_test.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/juju/juju/api"
1515
"github.com/juju/juju/api/networker"
16+
"github.com/juju/juju/apiserver/common"
1617
"github.com/juju/juju/apiserver/params"
1718
"github.com/juju/juju/instance"
1819
"github.com/juju/juju/juju/testing"
@@ -168,14 +169,39 @@ func (s *networkerSuite) SetUpTest(c *gc.C) {
168169
c.Assert(s.networker, gc.NotNil)
169170
}
170171

171-
func (s *networkerSuite) TestMachineNetworkInfoPermissionDenied(c *gc.C) {
172-
info, err := s.networker.MachineNetworkInfo(names.NewMachineTag("1"))
172+
func (s *networkerSuite) TestMachineNetworkConfigPermissionDenied(c *gc.C) {
173+
info, err := s.networker.MachineNetworkConfig(names.NewMachineTag("1"))
173174
c.Assert(err, gc.ErrorMatches, "permission denied")
174175
c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized)
175176
c.Assert(info, gc.IsNil)
176177
}
177178

178-
func (s *networkerSuite) TestMachineNetworkInfo(c *gc.C) {
179+
func (s *networkerSuite) TestMachineNetworkConfigNameChange(c *gc.C) {
180+
var called bool
181+
networker.PatchFacadeCall(s, s.networker, func(request string, args, response interface{}) error {
182+
if !called {
183+
called = true
184+
c.Assert(request, gc.Equals, "MachineNetworkConfig")
185+
return &params.Error{"MachineNetworkConfig", params.CodeNotImplemented}
186+
}
187+
c.Assert(request, gc.Equals, "MachineNetworkInfo")
188+
expected := params.Entities{
189+
Entities: []params.Entity{{Tag: names.NewMachineTag("42").String()}},
190+
}
191+
c.Assert(args, gc.DeepEquals, expected)
192+
result := response.(*params.MachineNetworkConfigResults)
193+
result.Results = make([]params.MachineNetworkConfigResult, 1)
194+
result.Results[0].Error = common.ServerError(common.ErrPerm)
195+
return nil
196+
})
197+
// Make a call, in this case result is "permission denied".
198+
info, err := s.networker.MachineNetworkConfig(names.NewMachineTag("42"))
199+
c.Assert(err, gc.ErrorMatches, "permission denied")
200+
c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized)
201+
c.Assert(info, gc.IsNil)
202+
}
203+
204+
func (s *networkerSuite) TestMachineNetworkConfig(c *gc.C) {
179205
// TODO(bogdanteleaga): Find out what's the problem with this test
180206
// It seems to work on some machines
181207
if runtime.GOOS == "windows" {
@@ -250,15 +276,15 @@ func (s *networkerSuite) TestMachineNetworkInfo(c *gc.C) {
250276
InterfaceName: "eth0",
251277
}}
252278

253-
results, err := s.networker.MachineNetworkInfo(names.NewMachineTag("0"))
279+
results, err := s.networker.MachineNetworkConfig(names.NewMachineTag("0"))
254280
c.Assert(err, jc.ErrorIsNil)
255281
c.Assert(results, gc.DeepEquals, expectedMachineInfo)
256282

257-
results, err = s.networker.MachineNetworkInfo(names.NewMachineTag("0/lxc/0"))
283+
results, err = s.networker.MachineNetworkConfig(names.NewMachineTag("0/lxc/0"))
258284
c.Assert(err, jc.ErrorIsNil)
259285
c.Assert(results, gc.DeepEquals, expectedContainerInfo)
260286

261-
results, err = s.networker.MachineNetworkInfo(names.NewMachineTag("0/lxc/0/lxc/0"))
287+
results, err = s.networker.MachineNetworkConfig(names.NewMachineTag("0/lxc/0/lxc/0"))
262288
c.Assert(err, jc.ErrorIsNil)
263289
c.Assert(results, gc.DeepEquals, expectedNestedContainerInfo)
264290
}

apiserver/networker/networker.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,16 @@ func (n *NetworkerAPI) oneMachineConfig(id string) ([]params.NetworkConfig, erro
106106
return configs, nil
107107
}
108108

109-
// Networks returns the list of networks with related interfaces for a given set of machines.
109+
// MachineNetworkInfo returns the list of networks with related interfaces for a
110+
// given set of machines.
111+
// DEPRECATED: Use MachineNetworkConfig() instead.
110112
func (n *NetworkerAPI) MachineNetworkInfo(args params.Entities) (params.MachineNetworkConfigResults, error) {
113+
return n.MachineNetworkConfig(args)
114+
}
115+
116+
// MachineNetworkConfig returns the list of networks with related interfaces
117+
// for a given set of machines.
118+
func (n *NetworkerAPI) MachineNetworkConfig(args params.Entities) (params.MachineNetworkConfigResults, error) {
111119
result := params.MachineNetworkConfigResults{
112120
Results: make([]params.MachineNetworkConfigResult, len(args.Entities)),
113121
}

apiserver/networker/networker_test.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ func (s *networkerSuite) TestNetworkerNonMachineAgent(c *gc.C) {
185185
c.Assert(aNetworker, gc.IsNil)
186186
}
187187

188-
func (s *networkerSuite) TestMachineNetworkInfoPermissions(c *gc.C) {
188+
func (s *networkerSuite) TestMachineNetworkConfigPermissions(c *gc.C) {
189189
args := params.Entities{Entities: []params.Entity{
190190
{Tag: "service-bar"},
191191
{Tag: "foo-42"},
@@ -195,7 +195,7 @@ func (s *networkerSuite) TestMachineNetworkInfoPermissions(c *gc.C) {
195195
{Tag: "machine-1"},
196196
{Tag: "machine-0-lxc-42"},
197197
}}
198-
results, err := s.networker.MachineNetworkInfo(args)
198+
results, err := s.networker.MachineNetworkConfig(args)
199199
c.Assert(err, jc.ErrorIsNil)
200200
c.Assert(results, gc.DeepEquals, params.MachineNetworkConfigResults{
201201
Results: []params.MachineNetworkConfigResult{
@@ -284,21 +284,25 @@ func (s *networkerSuite) TestMachineNetworkConfig(c *gc.C) {
284284
VLANTag: 0,
285285
InterfaceName: "eth0",
286286
}}
287-
288287
args := params.Entities{Entities: []params.Entity{
289288
{Tag: "machine-0"},
290289
{Tag: "machine-0-lxc-0"},
291290
{Tag: "machine-0-lxc-0-lxc-0"},
292291
}}
293-
results, err := s.networker.MachineNetworkInfo(args)
294-
c.Assert(err, jc.ErrorIsNil)
295-
c.Assert(results, gc.DeepEquals, params.MachineNetworkConfigResults{
296-
Results: []params.MachineNetworkConfigResult{
297-
{Error: nil, Config: expectedMachineConfig},
298-
{Error: nil, Config: expectedContainerConfig},
299-
{Error: nil, Config: expectedNestedContainerConfig},
300-
},
301-
})
292+
293+
assert := func(f func(params.Entities) (params.MachineNetworkConfigResults, error)) {
294+
results, err := f(args)
295+
c.Assert(err, jc.ErrorIsNil)
296+
c.Assert(results, gc.DeepEquals, params.MachineNetworkConfigResults{
297+
Results: []params.MachineNetworkConfigResult{
298+
{Error: nil, Config: expectedMachineConfig},
299+
{Error: nil, Config: expectedContainerConfig},
300+
{Error: nil, Config: expectedNestedContainerConfig},
301+
},
302+
})
303+
}
304+
assert(s.networker.MachineNetworkInfo)
305+
assert(s.networker.MachineNetworkConfig)
302306
}
303307

304308
func (s *networkerSuite) TestWatchInterfacesPermissions(c *gc.C) {

apiserver/params/network.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,13 @@ type NetworkConfig struct {
7171
// once spaces are introduced.
7272
NetworkName string `json:"NetworkName"`
7373

74-
// ProviderId is a provider-specific network id.
74+
// ProviderId is a provider-specific network interface id.
7575
ProviderId string `json:"ProviderId"`
7676

77+
// ProviderSubnetId is a provider-specific subnet id, to which the
78+
// interface is attached to.
79+
ProviderSubnetId string `json:"ProviderSubnetId"`
80+
7781
// VLANTag needs to be between 1 and 4094 for VLANs and 0 for
7882
// normal networks. It's defined by IEEE 802.1Q standard.
7983
VLANTag int `json:"VLANTag"`

apiserver/provisioner/export_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright 2015 Canonical Ltd.
2+
// Licensed under the AGPLv3, see LICENCE file for details.
3+
4+
package provisioner
5+
6+
var (
7+
AllocateAddrTo = &allocateAddrTo
8+
SetAddrsTo = &setAddrsTo
9+
SetAddrState = &setAddrState
10+
)

0 commit comments

Comments
 (0)