Skip to content

Commit 30dde06

Browse files
committed
Separate model and controller config
1 parent 1df0b50 commit 30dde06

File tree

106 files changed

+811
-626
lines changed

Some content is hidden

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

106 files changed

+811
-626
lines changed

agent/agentbootstrap/bootstrap.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"github.com/juju/juju/apiserver/params"
1515
"github.com/juju/juju/cloud"
1616
"github.com/juju/juju/cloudconfig/instancecfg"
17-
"github.com/juju/juju/controller"
1817
"github.com/juju/juju/controller/modelmanager"
1918
"github.com/juju/juju/instance"
2019
"github.com/juju/juju/mongo"
@@ -95,13 +94,14 @@ func InitializeState(
9594
CloudRegion: args.ControllerCloudRegion,
9695
CloudCredential: args.ControllerCloudCredentialName,
9796
},
98-
CloudName: args.ControllerCloudName,
99-
Cloud: args.ControllerCloud,
100-
CloudCredentials: cloudCredentials,
101-
ModelConfigDefaults: args.ModelConfigDefaults,
102-
MongoInfo: info,
103-
MongoDialOpts: dialOpts,
104-
Policy: policy,
97+
CloudName: args.ControllerCloudName,
98+
Cloud: args.ControllerCloud,
99+
CloudCredentials: cloudCredentials,
100+
ControllerConfig: args.ControllerConfig,
101+
LocalCloudConfig: args.LocalCloudConfig,
102+
MongoInfo: info,
103+
MongoDialOpts: dialOpts,
104+
Policy: policy,
105105
})
106106
if err != nil {
107107
return nil, nil, errors.Errorf("failed to initialize state: %v", err)
@@ -143,7 +143,7 @@ func InitializeState(
143143
attrs[k] = v
144144
}
145145
}
146-
controllerUUID := controller.Config(args.ControllerModelConfig.AllAttrs()).ControllerUUID()
146+
controllerUUID := args.ControllerConfig.ControllerUUID()
147147
hostedModelConfig, err := modelmanager.ModelConfigCreator{}.NewModelConfig(
148148
modelmanager.IsAdmin, controllerUUID, args.ControllerModelConfig, attrs,
149149
)

agent/agentbootstrap/bootstrap_test.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,15 @@ LXC_BRIDGE="ignored"`[1:])
126126
})
127127
modelCfg, err := config.New(config.NoDefaults, modelAttrs)
128128
c.Assert(err, jc.ErrorIsNil)
129-
modelCfg, err = provider.BootstrapConfig(environs.BootstrapConfigParams{Config: modelCfg})
129+
controllerCfg := testing.FakeControllerConfig()
130+
modelCfg, err = provider.BootstrapConfig(environs.BootstrapConfigParams{
131+
ControllerUUID: controllerCfg.ControllerUUID(),
132+
Config: modelCfg,
133+
})
130134
c.Assert(err, jc.ErrorIsNil)
135+
// Dummy provider uses a random port, which is added to cfg used to create environment.
136+
apiPort := dummy.ApiPort(provider)
137+
controllerCfg["api-port"] = apiPort
131138
defer dummy.Reset(c)
132139

133140
hostedModelUUID := utils.MustNewUUID().String()
@@ -151,9 +158,10 @@ LXC_BRIDGE="ignored"`[1:])
151158
},
152159
ControllerCloudName: "dummy",
153160
ControllerCloudRegion: "some-region",
161+
ControllerConfig: controllerCfg,
154162
ControllerModelConfig: modelCfg,
155163
ModelConstraints: expectModelConstraints,
156-
ModelConfigDefaults: modelConfigDefaults,
164+
LocalCloudConfig: modelConfigDefaults,
157165
HostedModelConfig: hostedModelConfigAttrs,
158166
},
159167
BootstrapMachineAddresses: initialAddrs,
@@ -184,15 +192,14 @@ LXC_BRIDGE="ignored"`[1:])
184192
c.Assert(user.PasswordValid(testing.DefaultMongoPassword), jc.IsTrue)
185193

186194
// Check controller config
187-
controllerCfg, err := st.ControllerConfig()
195+
controllerCfg, err = st.ControllerConfig()
188196
c.Assert(err, jc.ErrorIsNil)
189197
c.Assert(controllerCfg, jc.DeepEquals, controller.Config{
190-
"controller-uuid": testing.ModelTag.Id(),
191-
"ca-cert": testing.CACert,
192-
"ca-private-key": testing.CAKey,
193-
"state-port": 1234,
194-
// Dummy provider uses a random port, which is added to cfg used to create environment.
195-
"api-port": controller.Config(modelCfg.AllAttrs()).APIPort(),
198+
"controller-uuid": testing.ModelTag.Id(),
199+
"ca-cert": testing.CACert,
200+
"state-port": 1234,
201+
"api-port": apiPort,
202+
"set-numa-control-policy": false,
196203
})
197204

198205
// Check that controller model configuration has been added, and
@@ -202,7 +209,6 @@ LXC_BRIDGE="ignored"`[1:])
202209
// Add in the cloud attributes.
203210
expectedAttrs := modelCfg.AllAttrs()
204211
expectedAttrs["apt-mirror"] = "http://mirror"
205-
controller.RemoveControllerAttributes(expectedAttrs)
206212
c.Assert(newModelCfg.AllAttrs(), jc.DeepEquals, expectedAttrs)
207213

208214
gotModelConstraints, err := st.ModelConstraints()
@@ -339,6 +345,7 @@ func (s *bootstrapSuite) TestInitializeStateFailsSecondTime(c *gc.C) {
339345
AuthTypes: []cloud.AuthType{cloud.EmptyAuthType},
340346
},
341347
ControllerCloudName: "dummy",
348+
ControllerConfig: testing.FakeControllerConfig(),
342349
ControllerModelConfig: modelCfg,
343350
HostedModelConfig: hostedModelConfigAttrs,
344351
},

apiserver/common/modeldestroy_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ func (s *destroyModelSuite) setUpManual(c *gc.C) (m0, m1 *state.Machine) {
5757
func (s *destroyModelSuite) setUpInstances(c *gc.C) (m0, m1, m2 *state.Machine) {
5858
m0, err := s.State.AddMachine("precise", state.JobManageModel)
5959
c.Assert(err, jc.ErrorIsNil)
60-
inst, _ := testing.AssertStartInstance(c, s.Environ, s.ControllerUUID, m0.Id())
60+
inst, _ := testing.AssertStartInstance(c, s.Environ, s.ControllerConfig.ControllerUUID(), m0.Id())
6161
err = m0.SetProvisioned(inst.Id(), "fake_nonce", nil)
6262
c.Assert(err, jc.ErrorIsNil)
6363

6464
m1, err = s.State.AddMachine("precise", state.JobHostUnits)
6565
c.Assert(err, jc.ErrorIsNil)
66-
inst, _ = testing.AssertStartInstance(c, s.Environ, s.ControllerUUID, m1.Id())
66+
inst, _ = testing.AssertStartInstance(c, s.Environ, s.ControllerConfig.ControllerUUID(), m1.Id())
6767
err = m1.SetProvisioned(inst.Id(), "fake_nonce", nil)
6868
c.Assert(err, jc.ErrorIsNil)
6969

apiserver/common/modelwatcher_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,10 @@ func testingEnvConfig(c *gc.C) *config.Config {
124124
modelcmd.BootstrapContext(testing.Context(c)),
125125
jujuclienttesting.NewMemStore(),
126126
environs.PrepareParams{
127-
ControllerName: "dummycontroller",
128-
BaseConfig: dummy.SampleConfig(),
129-
CloudName: "dummy",
127+
ControllerConfig: testing.FakeControllerBootstrapConfig(),
128+
ControllerName: "dummycontroller",
129+
BaseConfig: dummy.SampleConfig(),
130+
CloudName: "dummy",
130131
},
131132
)
132133
c.Assert(err, jc.ErrorIsNil)

apiserver/imagemetadata/functions_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ func (s *funcSuite) SetUpTest(c *gc.C) {
3636
envtesting.BootstrapContext(c),
3737
jujuclienttesting.NewMemStore(),
3838
environs.PrepareParams{
39-
ControllerName: "dummycontroller",
40-
BaseConfig: mockConfig(),
41-
CloudName: "dummy",
39+
ControllerConfig: testing.FakeControllerBootstrapConfig(),
40+
ControllerName: "dummycontroller",
41+
BaseConfig: mockConfig(),
42+
CloudName: "dummy",
4243
},
4344
)
4445
c.Assert(err, jc.ErrorIsNil)

apiserver/imagemetadata/package_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,10 @@ func testConfig(c *gc.C) *config.Config {
126126
envtesting.BootstrapContext(c),
127127
jujuclienttesting.NewMemStore(),
128128
environs.PrepareParams{
129-
ControllerName: "dummycontroller",
130-
BaseConfig: attrs,
131-
CloudName: "dummy",
129+
ControllerConfig: coretesting.FakeControllerBootstrapConfig(),
130+
ControllerName: "dummycontroller",
131+
BaseConfig: attrs,
132+
CloudName: "dummy",
132133
},
133134
)
134135
c.Assert(err, jc.ErrorIsNil)

apiserver/imagemetadata/updatefrompublished_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,10 @@ func (s *imageMetadataUpdateSuite) TestUpdateFromPublishedImagesForProviderWithN
167167
modelcmd.BootstrapContext(testing.Context(c)),
168168
jujuclienttesting.NewMemStore(),
169169
environs.PrepareParams{
170-
ControllerName: "dummycontroller",
171-
BaseConfig: dummy.SampleConfig(),
172-
CloudName: "dummy",
170+
ControllerConfig: testing.FakeControllerBootstrapConfig(),
171+
ControllerName: "dummycontroller",
172+
BaseConfig: dummy.SampleConfig(),
173+
CloudName: "dummy",
173174
},
174175
)
175176
c.Assert(err, jc.ErrorIsNil)

apiserver/migrationtarget/migrationtarget_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ func (s *Suite) SetUpTest(c *gc.C) {
3939
modelcmd.BootstrapContext(testing.Context(c)),
4040
jujuclienttesting.NewMemStore(),
4141
environs.PrepareParams{
42-
ControllerName: "dummycontroller",
43-
BaseConfig: dummy.SampleConfig(),
44-
CloudName: "dummy",
42+
ControllerConfig: testing.FakeControllerBootstrapConfig(),
43+
ControllerName: "dummycontroller",
44+
BaseConfig: dummy.SampleConfig(),
45+
CloudName: "dummy",
4546
},
4647
)
4748
c.Assert(err, jc.ErrorIsNil)

apiserver/modelmanager/modelmanager_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/juju/juju/status"
2525
jujuversion "github.com/juju/juju/version"
2626
// Register the providers for the field check test
27+
"github.com/juju/juju/controller"
2728
_ "github.com/juju/juju/provider/azure"
2829
"github.com/juju/juju/provider/dummy"
2930
_ "github.com/juju/juju/provider/ec2"
@@ -136,7 +137,6 @@ func (s *modelManagerSuite) TestCreateModelArgs(c *gc.C) {
136137
"name": "foo",
137138
"type": "dummy",
138139
"authorized-keys": s.st.controllerModel.cfg.AuthorizedKeys(),
139-
"controller-uuid": coretesting.ModelTag.Id(),
140140
"uuid": uuid,
141141
"agent-version": jujuversion.Current.String(),
142142
"bar": "baz",
@@ -145,6 +145,10 @@ func (s *modelManagerSuite) TestCreateModelArgs(c *gc.C) {
145145
"secret": "pork",
146146
})
147147
c.Assert(err, jc.ErrorIsNil)
148+
// TODO(wallyworld) - we need to separate controller and model schemas
149+
// Remove any remaining controller attributes from the env config.
150+
cfg, err = cfg.Remove(controller.ControllerOnlyConfigAttributes)
151+
c.Assert(err, jc.ErrorIsNil)
148152

149153
c.Assert(newModelArgs, jc.DeepEquals, state.ModelArgs{
150154
Owner: names.NewUserTag("admin@local"),
@@ -768,7 +772,7 @@ func (*fakeProvider) Validate(cfg, old *config.Config) (*config.Config, error) {
768772
return cfg, nil
769773
}
770774

771-
func (*fakeProvider) PrepareForCreateEnvironment(cfg *config.Config) (*config.Config, error) {
775+
func (*fakeProvider) PrepareForCreateEnvironment(controllerUUID string, cfg *config.Config) (*config.Config, error) {
772776
return cfg, nil
773777
}
774778

apiserver/params/internal.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,7 @@ type ProvisioningInfo struct {
584584
SubnetsToZones map[string][]string
585585
ImageMetadata []CloudImageMetadata
586586
EndpointBindings map[string]string
587+
ControllerConfig map[string]interface{}
587588
}
588589

589590
// ProvisioningInfoResult holds machine provisioning info or an error.

apiserver/provisioner/provisioninginfo.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ func (p *ProvisionerAPI) getProvisioningInfo(m *state.Machine) (*params.Provisio
8888
if err != nil {
8989
return nil, errors.Annotate(err, "cannot get available image metadata")
9090
}
91+
controllerCfg, err := p.st.ControllerConfig()
92+
if err != nil {
93+
return nil, errors.Annotate(err, "cannot get controller configuration")
94+
}
9195

9296
return &params.ProvisioningInfo{
9397
Constraints: cons,
@@ -99,6 +103,7 @@ func (p *ProvisionerAPI) getProvisioningInfo(m *state.Machine) (*params.Provisio
99103
SubnetsToZones: subnetsToZones,
100104
EndpointBindings: endpointBindings,
101105
ImageMetadata: imageMetadata,
106+
ControllerConfig: controllerCfg,
102107
}, nil
103108
}
104109

apiserver/provisioner/provisioninginfo_test.go

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/juju/juju/constraints"
1414
"github.com/juju/juju/environs/tags"
1515
"github.com/juju/juju/juju/testing"
16+
"github.com/juju/juju/provider/dummy"
1617
"github.com/juju/juju/state"
1718
"github.com/juju/juju/state/multiwatcher"
1819
"github.com/juju/juju/storage"
@@ -50,21 +51,27 @@ func (s *withoutControllerSuite) TestProvisioningInfoWithStorage(c *gc.C) {
5051
result, err := s.provisioner.ProvisioningInfo(args)
5152
c.Assert(err, jc.ErrorIsNil)
5253

54+
controllerCfg := coretesting.FakeControllerConfig()
55+
// Dummy provider uses a random port, which is added to cfg used to create environment.
56+
apiPort := dummy.ApiPort(s.Environ.Provider())
57+
controllerCfg["api-port"] = apiPort
5358
expected := params.ProvisioningInfoResults{
5459
Results: []params.ProvisioningInfoResult{
5560
{Result: &params.ProvisioningInfo{
56-
Series: "quantal",
57-
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
61+
ControllerConfig: controllerCfg,
62+
Series: "quantal",
63+
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
5864
Tags: map[string]string{
5965
tags.JujuController: coretesting.ModelTag.Id(),
6066
tags.JujuModel: coretesting.ModelTag.Id(),
6167
},
6268
}},
6369
{Result: &params.ProvisioningInfo{
64-
Series: "quantal",
65-
Constraints: template.Constraints,
66-
Placement: template.Placement,
67-
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
70+
ControllerConfig: controllerCfg,
71+
Series: "quantal",
72+
Constraints: template.Constraints,
73+
Placement: template.Placement,
74+
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
6875
Tags: map[string]string{
6976
tags.JujuController: coretesting.ModelTag.Id(),
7077
tags.JujuModel: coretesting.ModelTag.Id(),
@@ -159,13 +166,18 @@ func (s *withoutControllerSuite) TestProvisioningInfoWithSingleNegativeAndPositi
159166
result, err := s.provisioner.ProvisioningInfo(args)
160167
c.Assert(err, jc.ErrorIsNil)
161168

169+
controllerCfg := coretesting.FakeControllerConfig()
170+
// Dummy provider uses a random port, which is added to cfg used to create environment.
171+
apiPort := dummy.ApiPort(s.Environ.Provider())
172+
controllerCfg["api-port"] = apiPort
162173
expected := params.ProvisioningInfoResults{
163174
Results: []params.ProvisioningInfoResult{{
164175
Result: &params.ProvisioningInfo{
165-
Series: "quantal",
166-
Constraints: template.Constraints,
167-
Placement: template.Placement,
168-
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
176+
ControllerConfig: controllerCfg,
177+
Series: "quantal",
178+
Constraints: template.Constraints,
179+
Placement: template.Placement,
180+
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
169181
Tags: map[string]string{
170182
tags.JujuController: coretesting.ModelTag.Id(),
171183
tags.JujuModel: coretesting.ModelTag.Id(),
@@ -224,11 +236,16 @@ func (s *withoutControllerSuite) TestProvisioningInfoWithEndpointBindings(c *gc.
224236
result, err := s.provisioner.ProvisioningInfo(args)
225237
c.Assert(err, jc.ErrorIsNil)
226238

239+
controllerCfg := coretesting.FakeControllerConfig()
240+
// Dummy provider uses a random port, which is added to cfg used to create environment.
241+
apiPort := dummy.ApiPort(s.Environ.Provider())
242+
controllerCfg["api-port"] = apiPort
227243
expected := params.ProvisioningInfoResults{
228244
Results: []params.ProvisioningInfoResult{{
229245
Result: &params.ProvisioningInfo{
230-
Series: "quantal",
231-
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
246+
ControllerConfig: controllerCfg,
247+
Series: "quantal",
248+
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
232249
Tags: map[string]string{
233250
tags.JujuController: coretesting.ModelTag.Id(),
234251
tags.JujuModel: coretesting.ModelTag.Id(),
@@ -307,13 +324,18 @@ func (s *withoutControllerSuite) TestStorageProviderFallbackToType(c *gc.C) {
307324
result, err := s.provisioner.ProvisioningInfo(args)
308325
c.Assert(err, jc.ErrorIsNil)
309326

327+
controllerCfg := coretesting.FakeControllerConfig()
328+
// Dummy provider uses a random port, which is added to cfg used to create environment.
329+
apiPort := dummy.ApiPort(s.Environ.Provider())
330+
controllerCfg["api-port"] = apiPort
310331
c.Assert(result, jc.DeepEquals, params.ProvisioningInfoResults{
311332
Results: []params.ProvisioningInfoResult{
312333
{Result: &params.ProvisioningInfo{
313-
Series: "quantal",
314-
Constraints: template.Constraints,
315-
Placement: template.Placement,
316-
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
334+
ControllerConfig: controllerCfg,
335+
Series: "quantal",
336+
Constraints: template.Constraints,
337+
Placement: template.Placement,
338+
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
317339
Tags: map[string]string{
318340
tags.JujuController: coretesting.ModelTag.Id(),
319341
tags.JujuModel: coretesting.ModelTag.Id(),
@@ -357,11 +379,16 @@ func (s *withoutControllerSuite) TestProvisioningInfoPermissions(c *gc.C) {
357379

358380
// Only machine 0 and containers therein can be accessed.
359381
results, err := aProvisioner.ProvisioningInfo(args)
382+
controllerCfg := coretesting.FakeControllerConfig()
383+
// Dummy provider uses a random port, which is added to cfg used to create environment.
384+
apiPort := dummy.ApiPort(s.Environ.Provider())
385+
controllerCfg["api-port"] = apiPort
360386
c.Assert(results, jc.DeepEquals, params.ProvisioningInfoResults{
361387
Results: []params.ProvisioningInfoResult{
362388
{Result: &params.ProvisioningInfo{
363-
Series: "quantal",
364-
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
389+
ControllerConfig: controllerCfg,
390+
Series: "quantal",
391+
Jobs: []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
365392
Tags: map[string]string{
366393
tags.JujuController: coretesting.ModelTag.Id(),
367394
tags.JujuModel: coretesting.ModelTag.Id(),

cloudconfig/cloudinit/renderscript_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func (s *configureSuite) getCloudConfig(c *gc.C, controller bool, vers version.B
5858
var err error
5959
if controller {
6060
icfg, err = instancecfg.NewBootstrapInstanceConfig(
61+
coretesting.FakeControllerBootstrapConfig(),
6162
constraints.Value{}, constraints.Value{},
6263
vers.Series, "",
6364
)

0 commit comments

Comments
 (0)