Skip to content

Commit 8421b2f

Browse files
committed
Move model default value apis to model manager facade
1 parent 3066c25 commit 8421b2f

File tree

14 files changed

+504
-441
lines changed

14 files changed

+504
-441
lines changed

api/modelconfig/modelconfig.go

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package modelconfig
55

66
import (
77
"github.com/juju/errors"
8-
"gopkg.in/juju/names.v2"
98

109
"github.com/juju/juju/api/base"
1110
"github.com/juju/juju/apiserver/params"
@@ -74,69 +73,3 @@ func (c *Client) ModelUnset(keys ...string) error {
7473
args := params.ModelUnset{Keys: keys}
7574
return c.facade.FacadeCall("ModelUnset", args, nil)
7675
}
77-
78-
// ModelDefaults returns the default values for various sources used when
79-
// creating a new model.
80-
func (c *Client) ModelDefaults() (config.ModelDefaultAttributes, error) {
81-
result := params.ModelDefaultsResult{}
82-
err := c.facade.FacadeCall("ModelDefaults", nil, &result)
83-
if err != nil {
84-
return nil, errors.Trace(err)
85-
}
86-
values := make(config.ModelDefaultAttributes)
87-
for name, val := range result.Config {
88-
setting := config.AttributeDefaultValues{
89-
Default: val.Default,
90-
Controller: val.Controller,
91-
}
92-
for _, region := range val.Regions {
93-
setting.Regions = append(setting.Regions, config.RegionDefaultValue{
94-
Name: region.RegionName,
95-
Value: region.Value})
96-
}
97-
values[name] = setting
98-
}
99-
return values, nil
100-
}
101-
102-
// SetModelDefaults updates the specified default model config values.
103-
func (c *Client) SetModelDefaults(cloud, region string, config map[string]interface{}) error {
104-
var cloudTag string
105-
if cloud != "" {
106-
cloudTag = names.NewCloudTag(cloud).String()
107-
}
108-
args := params.SetModelDefaults{
109-
Config: []params.ModelDefaultValues{{
110-
Config: config,
111-
CloudTag: cloudTag,
112-
CloudRegion: region,
113-
}},
114-
}
115-
var result params.ErrorResults
116-
err := c.facade.FacadeCall("SetModelDefaults", args, &result)
117-
if err != nil {
118-
return err
119-
}
120-
return result.OneError()
121-
}
122-
123-
// UnsetModelDefaults removes the specified default model config values.
124-
func (c *Client) UnsetModelDefaults(cloud, region string, keys ...string) error {
125-
var cloudTag string
126-
if cloud != "" {
127-
cloudTag = names.NewCloudTag(cloud).String()
128-
}
129-
args := params.UnsetModelDefaults{
130-
Keys: []params.ModelUnsetKeys{{
131-
Keys: keys,
132-
CloudTag: cloudTag,
133-
CloudRegion: region,
134-
}},
135-
}
136-
var result params.ErrorResults
137-
err := c.facade.FacadeCall("UnsetModelDefaults", args, &result)
138-
if err != nil {
139-
return err
140-
}
141-
return result.OneError()
142-
}

api/modelconfig/modelconfig_test.go

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -127,103 +127,3 @@ func (s *modelconfigSuite) TestModelUnset(c *gc.C) {
127127
c.Assert(err, jc.ErrorIsNil)
128128
c.Assert(called, jc.IsTrue)
129129
}
130-
131-
func (s *modelconfigSuite) TestModelDefaults(c *gc.C) {
132-
apiCaller := basetesting.APICallerFunc(
133-
func(objType string,
134-
version int,
135-
id, request string,
136-
a, result interface{},
137-
) error {
138-
c.Check(objType, gc.Equals, "ModelConfig")
139-
c.Check(id, gc.Equals, "")
140-
c.Check(request, gc.Equals, "ModelDefaults")
141-
c.Check(a, gc.IsNil)
142-
c.Assert(result, gc.FitsTypeOf, &params.ModelDefaultsResult{})
143-
results := result.(*params.ModelDefaultsResult)
144-
results.Config = map[string]params.ModelDefaults{
145-
"foo": {"bar", "model", []params.RegionDefaults{{
146-
"dummy-region",
147-
"dummy-value"}}},
148-
}
149-
return nil
150-
},
151-
)
152-
client := modelconfig.NewClient(apiCaller)
153-
result, err := client.ModelDefaults()
154-
c.Assert(err, jc.ErrorIsNil)
155-
156-
c.Assert(result, jc.DeepEquals, config.ModelDefaultAttributes{
157-
"foo": {"bar", "model", []config.RegionDefaultValue{{
158-
"dummy-region",
159-
"dummy-value"}}},
160-
})
161-
}
162-
163-
func (s *modelconfigSuite) TestSetModelDefaults(c *gc.C) {
164-
called := false
165-
apiCaller := basetesting.APICallerFunc(
166-
func(objType string,
167-
version int,
168-
id, request string,
169-
a, result interface{},
170-
) error {
171-
c.Check(objType, gc.Equals, "ModelConfig")
172-
c.Check(id, gc.Equals, "")
173-
c.Check(request, gc.Equals, "SetModelDefaults")
174-
c.Check(a, jc.DeepEquals, params.SetModelDefaults{
175-
Config: []params.ModelDefaultValues{{
176-
CloudTag: "cloud-mycloud",
177-
CloudRegion: "region",
178-
Config: map[string]interface{}{
179-
"some-name": "value",
180-
"other-name": true,
181-
},
182-
}}})
183-
c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
184-
*(result.(*params.ErrorResults)) = params.ErrorResults{
185-
Results: []params.ErrorResult{{Error: nil}},
186-
}
187-
called = true
188-
return nil
189-
},
190-
)
191-
client := modelconfig.NewClient(apiCaller)
192-
err := client.SetModelDefaults("mycloud", "region", map[string]interface{}{
193-
"some-name": "value",
194-
"other-name": true,
195-
})
196-
c.Assert(err, jc.ErrorIsNil)
197-
c.Assert(called, jc.IsTrue)
198-
}
199-
200-
func (s *modelconfigSuite) TestUnsetModelDefaults(c *gc.C) {
201-
called := false
202-
apiCaller := basetesting.APICallerFunc(
203-
func(objType string,
204-
version int,
205-
id, request string,
206-
a, result interface{},
207-
) error {
208-
c.Check(objType, gc.Equals, "ModelConfig")
209-
c.Check(id, gc.Equals, "")
210-
c.Check(request, gc.Equals, "UnsetModelDefaults")
211-
c.Check(a, jc.DeepEquals, params.UnsetModelDefaults{
212-
Keys: []params.ModelUnsetKeys{{
213-
CloudTag: "cloud-mycloud",
214-
CloudRegion: "region",
215-
Keys: []string{"foo", "bar"},
216-
}}})
217-
c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
218-
*(result.(*params.ErrorResults)) = params.ErrorResults{
219-
Results: []params.ErrorResult{{Error: nil}},
220-
}
221-
called = true
222-
return nil
223-
},
224-
)
225-
client := modelconfig.NewClient(apiCaller)
226-
err := client.UnsetModelDefaults("mycloud", "region", "foo", "bar")
227-
c.Assert(err, jc.ErrorIsNil)
228-
c.Assert(called, jc.IsTrue)
229-
}

api/modelmanager/modelmanager.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/juju/juju/api/base"
1212
"github.com/juju/juju/apiserver/params"
13+
"github.com/juju/juju/environs/config"
1314
"github.com/juju/juju/juju/permission"
1415
)
1516

@@ -256,3 +257,69 @@ func (c *Client) modifyModelUser(action params.ModelAction, user, access string,
256257
}
257258
return result.Combine()
258259
}
260+
261+
// ModelDefaults returns the default values for various sources used when
262+
// creating a new model.
263+
func (c *Client) ModelDefaults() (config.ModelDefaultAttributes, error) {
264+
result := params.ModelDefaultsResult{}
265+
err := c.facade.FacadeCall("ModelDefaults", nil, &result)
266+
if err != nil {
267+
return nil, errors.Trace(err)
268+
}
269+
values := make(config.ModelDefaultAttributes)
270+
for name, val := range result.Config {
271+
setting := config.AttributeDefaultValues{
272+
Default: val.Default,
273+
Controller: val.Controller,
274+
}
275+
for _, region := range val.Regions {
276+
setting.Regions = append(setting.Regions, config.RegionDefaultValue{
277+
Name: region.RegionName,
278+
Value: region.Value})
279+
}
280+
values[name] = setting
281+
}
282+
return values, nil
283+
}
284+
285+
// SetModelDefaults updates the specified default model config values.
286+
func (c *Client) SetModelDefaults(cloud, region string, config map[string]interface{}) error {
287+
var cloudTag string
288+
if cloud != "" {
289+
cloudTag = names.NewCloudTag(cloud).String()
290+
}
291+
args := params.SetModelDefaults{
292+
Config: []params.ModelDefaultValues{{
293+
Config: config,
294+
CloudTag: cloudTag,
295+
CloudRegion: region,
296+
}},
297+
}
298+
var result params.ErrorResults
299+
err := c.facade.FacadeCall("SetModelDefaults", args, &result)
300+
if err != nil {
301+
return err
302+
}
303+
return result.OneError()
304+
}
305+
306+
// UnsetModelDefaults removes the specified default model config values.
307+
func (c *Client) UnsetModelDefaults(cloud, region string, keys ...string) error {
308+
var cloudTag string
309+
if cloud != "" {
310+
cloudTag = names.NewCloudTag(cloud).String()
311+
}
312+
args := params.UnsetModelDefaults{
313+
Keys: []params.ModelUnsetKeys{{
314+
Keys: keys,
315+
CloudTag: cloudTag,
316+
CloudRegion: region,
317+
}},
318+
}
319+
var result params.ErrorResults
320+
err := c.facade.FacadeCall("UnsetModelDefaults", args, &result)
321+
if err != nil {
322+
return err
323+
}
324+
return result.OneError()
325+
}

api/modelmanager/modelmanager_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
basetesting "github.com/juju/juju/api/base/testing"
1313
"github.com/juju/juju/api/modelmanager"
1414
"github.com/juju/juju/apiserver/params"
15+
"github.com/juju/juju/environs/config"
1516
jujutesting "github.com/juju/juju/juju/testing"
1617
"github.com/juju/juju/testing"
1718
"github.com/juju/juju/testing/factory"
@@ -116,6 +117,106 @@ func (s *modelmanagerSuite) TestDestroyModel(c *gc.C) {
116117
c.Assert(called, jc.IsTrue)
117118
}
118119

120+
func (s *modelmanagerSuite) TestModelDefaults(c *gc.C) {
121+
apiCaller := basetesting.APICallerFunc(
122+
func(objType string,
123+
version int,
124+
id, request string,
125+
a, result interface{},
126+
) error {
127+
c.Check(objType, gc.Equals, "ModelManager")
128+
c.Check(id, gc.Equals, "")
129+
c.Check(request, gc.Equals, "ModelDefaults")
130+
c.Check(a, gc.IsNil)
131+
c.Assert(result, gc.FitsTypeOf, &params.ModelDefaultsResult{})
132+
results := result.(*params.ModelDefaultsResult)
133+
results.Config = map[string]params.ModelDefaults{
134+
"foo": {"bar", "model", []params.RegionDefaults{{
135+
"dummy-region",
136+
"dummy-value"}}},
137+
}
138+
return nil
139+
},
140+
)
141+
client := modelmanager.NewClient(apiCaller)
142+
result, err := client.ModelDefaults()
143+
c.Assert(err, jc.ErrorIsNil)
144+
145+
c.Assert(result, jc.DeepEquals, config.ModelDefaultAttributes{
146+
"foo": {"bar", "model", []config.RegionDefaultValue{{
147+
"dummy-region",
148+
"dummy-value"}}},
149+
})
150+
}
151+
152+
func (s *modelmanagerSuite) TestSetModelDefaults(c *gc.C) {
153+
called := false
154+
apiCaller := basetesting.APICallerFunc(
155+
func(objType string,
156+
version int,
157+
id, request string,
158+
a, result interface{},
159+
) error {
160+
c.Check(objType, gc.Equals, "ModelManager")
161+
c.Check(id, gc.Equals, "")
162+
c.Check(request, gc.Equals, "SetModelDefaults")
163+
c.Check(a, jc.DeepEquals, params.SetModelDefaults{
164+
Config: []params.ModelDefaultValues{{
165+
CloudTag: "cloud-mycloud",
166+
CloudRegion: "region",
167+
Config: map[string]interface{}{
168+
"some-name": "value",
169+
"other-name": true,
170+
},
171+
}}})
172+
c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
173+
*(result.(*params.ErrorResults)) = params.ErrorResults{
174+
Results: []params.ErrorResult{{Error: nil}},
175+
}
176+
called = true
177+
return nil
178+
},
179+
)
180+
client := modelmanager.NewClient(apiCaller)
181+
err := client.SetModelDefaults("mycloud", "region", map[string]interface{}{
182+
"some-name": "value",
183+
"other-name": true,
184+
})
185+
c.Assert(err, jc.ErrorIsNil)
186+
c.Assert(called, jc.IsTrue)
187+
}
188+
189+
func (s *modelmanagerSuite) TestUnsetModelDefaults(c *gc.C) {
190+
called := false
191+
apiCaller := basetesting.APICallerFunc(
192+
func(objType string,
193+
version int,
194+
id, request string,
195+
a, result interface{},
196+
) error {
197+
c.Check(objType, gc.Equals, "ModelManager")
198+
c.Check(id, gc.Equals, "")
199+
c.Check(request, gc.Equals, "UnsetModelDefaults")
200+
c.Check(a, jc.DeepEquals, params.UnsetModelDefaults{
201+
Keys: []params.ModelUnsetKeys{{
202+
CloudTag: "cloud-mycloud",
203+
CloudRegion: "region",
204+
Keys: []string{"foo", "bar"},
205+
}}})
206+
c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
207+
*(result.(*params.ErrorResults)) = params.ErrorResults{
208+
Results: []params.ErrorResult{{Error: nil}},
209+
}
210+
called = true
211+
return nil
212+
},
213+
)
214+
client := modelmanager.NewClient(apiCaller)
215+
err := client.UnsetModelDefaults("mycloud", "region", "foo", "bar")
216+
c.Assert(err, jc.ErrorIsNil)
217+
c.Assert(called, jc.IsTrue)
218+
}
219+
119220
type dumpModelSuite struct {
120221
testing.BaseSuite
121222
}

apiserver/common/modelmanagerinterface.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ type ModelManagerBackend interface {
3939
ForModel(tag names.ModelTag) (ModelManagerBackend, error)
4040
GetModel(names.ModelTag) (Model, error)
4141
Model() (Model, error)
42+
ModelConfigDefaultValues() (config.ModelDefaultAttributes, error)
43+
UpdateModelConfigDefaultValues(update map[string]interface{}, remove []string) error
4244
Unit(name string) (*state.Unit, error)
4345
ModelTag() names.ModelTag
4446
ModelConfig() (*config.Config, error)

apiserver/modelconfig/backend.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ type Backend interface {
1717
ControllerTag() names.ControllerTag
1818
ModelTag() names.ModelTag
1919
ModelConfigValues() (config.ConfigValues, error)
20-
ModelConfigDefaultValues() (config.ModelDefaultAttributes, error)
21-
UpdateModelConfigDefaultValues(map[string]interface{}, []string) error
2220
UpdateModelConfig(map[string]interface{}, []string, state.ValidateConfigFunc) error
2321
}
2422

0 commit comments

Comments
 (0)