Skip to content

Commit 617c3f5

Browse files
committed
Add model type to client models.xml; various model apis also return model type
1 parent 95cd87c commit 617c3f5

Some content is hidden

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

60 files changed

+385
-164
lines changed

api/base/types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/juju/version"
1010

11+
"github.com/juju/juju/core/model"
1112
"github.com/juju/juju/instance"
1213
"github.com/juju/juju/status"
1314
)
@@ -18,6 +19,7 @@ import (
1819
type UserModel struct {
1920
Name string
2021
UUID string
22+
Type model.ModelType
2123
Owner string
2224
LastConnection *time.Time
2325
}
@@ -51,6 +53,7 @@ type Machine struct {
5153
type ModelInfo struct {
5254
Name string
5355
UUID string
56+
Type model.ModelType
5457
ControllerUUID string
5558
ProviderType string
5659
DefaultSeries string
@@ -101,6 +104,7 @@ type Filesystem struct {
101104
type UserModelSummary struct {
102105
Name string
103106
UUID string
107+
Type model.ModelType
104108
ControllerUUID string
105109
ProviderType string
106110
DefaultSeries string

api/controller/controller.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/juju/juju/api/common"
1616
"github.com/juju/juju/api/common/cloudspec"
1717
"github.com/juju/juju/apiserver/params"
18+
"github.com/juju/juju/core/model"
1819
"github.com/juju/juju/environs"
1920
"github.com/juju/juju/permission"
2021
)
@@ -50,16 +51,21 @@ func (c *Client) AllModels() ([]base.UserModel, error) {
5051
return nil, errors.Trace(err)
5152
}
5253
result := make([]base.UserModel, len(models.UserModels))
53-
for i, model := range models.UserModels {
54-
owner, err := names.ParseUserTag(model.OwnerTag)
54+
for i, usermodel := range models.UserModels {
55+
owner, err := names.ParseUserTag(usermodel.OwnerTag)
5556
if err != nil {
56-
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", model.OwnerTag, i)
57+
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", usermodel.OwnerTag, i)
58+
}
59+
modelType := model.ModelType(usermodel.Type)
60+
if modelType == "" {
61+
modelType = model.IAAS
5762
}
5863
result[i] = base.UserModel{
59-
Name: model.Name,
60-
UUID: model.UUID,
64+
Name: usermodel.Name,
65+
UUID: usermodel.UUID,
66+
Type: modelType,
6167
Owner: owner.Id(),
62-
LastConnection: model.LastConnection,
68+
LastConnection: usermodel.LastConnection,
6369
}
6470
}
6571
return result, nil

api/controller/legacy_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/juju/juju/apiserver/params"
2525
"github.com/juju/juju/constraints"
2626
"github.com/juju/juju/core/auditlog"
27+
"github.com/juju/juju/core/model"
2728
"github.com/juju/juju/environs/config"
2829
jujutesting "github.com/juju/juju/juju/testing"
2930
"github.com/juju/juju/permission"
@@ -56,13 +57,14 @@ func (s *legacySuite) TestAllModels(c *gc.C) {
5657

5758
sysManager := s.OpenAPI(c)
5859
defer sysManager.Close()
59-
envs, err := sysManager.AllModels()
60+
models, err := sysManager.AllModels()
6061
c.Assert(err, jc.ErrorIsNil)
61-
c.Assert(envs, gc.HasLen, 3)
62+
c.Assert(models, gc.HasLen, 3)
6263

6364
var obtained []string
64-
for _, env := range envs {
65-
obtained = append(obtained, fmt.Sprintf("%s/%s", env.Owner, env.Name))
65+
for _, m := range models {
66+
c.Assert(m.Type, gc.Equals, model.IAAS)
67+
obtained = append(obtained, fmt.Sprintf("%s/%s", m.Owner, m.Name))
6668
}
6769
expected := []string{
6870
"admin/controller",

api/modelmanager/modelinfo_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func (s *modelInfoSuite) assertExpectedModelInfo(c *gc.C, expectedInfo params.Mo
5353
func (s *modelInfoSuite) TestModelInfo(c *gc.C) {
5454
results := params.ModelInfoResults{
5555
Results: []params.ModelInfoResult{{
56-
Result: &params.ModelInfo{Name: "name", UUID: "etc."},
56+
Result: &params.ModelInfo{Name: "name", UUID: "etc.", Type: "foo"},
5757
}, {
5858
Error: &params.Error{Message: "woop"},
5959
}},
@@ -64,7 +64,7 @@ func (s *modelInfoSuite) TestModelInfo(c *gc.C) {
6464
func (s *modelInfoSuite) TestModelInfoWithAgentVersion(c *gc.C) {
6565
results := params.ModelInfoResults{
6666
Results: []params.ModelInfoResult{{
67-
Result: &params.ModelInfo{Name: "name", UUID: "etc.", AgentVersion: &version.Current},
67+
Result: &params.ModelInfo{Name: "name", UUID: "etc.", Type: "foo", AgentVersion: &version.Current},
6868
}},
6969
}
7070
s.assertExpectedModelInfo(c, results)

api/modelmanager/modelmanager.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/juju/juju/api/base"
1313
"github.com/juju/juju/api/common"
1414
"github.com/juju/juju/apiserver/params"
15+
"github.com/juju/juju/core/model"
1516
"github.com/juju/juju/environs/config"
1617
"github.com/juju/juju/instance"
1718
"github.com/juju/juju/permission"
@@ -106,6 +107,11 @@ func convertParamsModelInfo(modelInfo params.ModelInfo) (base.ModelInfo, error)
106107
Life: string(modelInfo.Life),
107108
AgentVersion: modelInfo.AgentVersion,
108109
}
110+
modelType := modelInfo.Type
111+
if modelType == "" {
112+
modelType = model.IAAS.String()
113+
}
114+
result.Type = model.ModelType(modelType)
109115
result.Status = base.Status{
110116
Status: modelInfo.Status.Status,
111117
Info: modelInfo.Status.Info,
@@ -164,16 +170,21 @@ func (c *Client) ListModels(user string) ([]base.UserModel, error) {
164170
return nil, errors.Trace(err)
165171
}
166172
result := make([]base.UserModel, len(models.UserModels))
167-
for i, model := range models.UserModels {
168-
owner, err := names.ParseUserTag(model.OwnerTag)
173+
for i, usermodel := range models.UserModels {
174+
owner, err := names.ParseUserTag(usermodel.OwnerTag)
169175
if err != nil {
170-
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", model.OwnerTag, i)
176+
return nil, errors.Annotatef(err, "OwnerTag %q at position %d", usermodel.OwnerTag, i)
177+
}
178+
modelType := model.ModelType(usermodel.Type)
179+
if modelType == "" {
180+
modelType = model.IAAS
171181
}
172182
result[i] = base.UserModel{
173-
Name: model.Name,
174-
UUID: model.UUID,
183+
Name: usermodel.Name,
184+
UUID: usermodel.UUID,
185+
Type: modelType,
175186
Owner: owner.Id(),
176-
LastConnection: model.LastConnection,
187+
LastConnection: usermodel.LastConnection,
177188
}
178189
}
179190
return result, nil
@@ -197,9 +208,14 @@ func (c *Client) ListModelSummaries(user string, all bool) ([]base.UserModelSumm
197208
continue
198209
}
199210
summary := r.Result
211+
modelType := model.ModelType(summary.Type)
212+
if modelType == "" {
213+
modelType = model.IAAS
214+
}
200215
summaries[i] = base.UserModelSummary{
201216
Name: summary.Name,
202217
UUID: summary.UUID,
218+
Type: modelType,
203219
ControllerUUID: summary.ControllerUUID,
204220
ProviderType: summary.ProviderType,
205221
DefaultSeries: summary.DefaultSeries,

api/modelmanager/modelmanager_test.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ import (
1111
"github.com/juju/testing"
1212
jc "github.com/juju/testing/checkers"
1313
gc "gopkg.in/check.v1"
14-
names "gopkg.in/juju/names.v2"
14+
"gopkg.in/juju/names.v2"
1515

1616
"github.com/juju/juju/api/base"
1717
basetesting "github.com/juju/juju/api/base/testing"
1818
"github.com/juju/juju/api/modelmanager"
1919
"github.com/juju/juju/apiserver/common"
2020
"github.com/juju/juju/apiserver/params"
21+
"github.com/juju/juju/core/model"
2122
"github.com/juju/juju/environs/config"
2223
"github.com/juju/juju/status"
2324
coretesting "github.com/juju/juju/testing"
@@ -57,6 +58,7 @@ func (s *modelmanagerSuite) TestCreateModel(c *gc.C) {
5758

5859
out := result.(*params.ModelInfo)
5960
out.Name = "dowhatimean"
61+
out.Type = "iaas"
6062
out.UUID = "youyoueyedee"
6163
out.ControllerUUID = "youyoueyedeetoo"
6264
out.ProviderType = "C-123"
@@ -81,6 +83,7 @@ func (s *modelmanagerSuite) TestCreateModel(c *gc.C) {
8183

8284
c.Assert(newModel, jc.DeepEquals, base.ModelInfo{
8385
Name: "dowhatimean",
86+
Type: model.IAAS,
8487
UUID: "youyoueyedee",
8588
ControllerUUID: "youyoueyedeetoo",
8689
ProviderType: "C-123",
@@ -120,13 +123,15 @@ func (s *modelmanagerSuite) TestListModels(c *gc.C) {
120123
Model: params.Model{
121124
Name: "yo",
122125
UUID: "wei",
126+
Type: "caas",
123127
OwnerTag: "user-user@remote",
124128
},
125129
LastConnection: &lastConnection,
126130
}, {
127131
Model: params.Model{
128132
Name: "sup",
129133
UUID: "hazzagarn",
134+
Type: "iaas",
130135
OwnerTag: "user-phyllis@thrace",
131136
},
132137
}}
@@ -140,11 +145,13 @@ func (s *modelmanagerSuite) TestListModels(c *gc.C) {
140145
c.Assert(models, jc.DeepEquals, []base.UserModel{{
141146
Name: "yo",
142147
UUID: "wei",
148+
Type: model.CAAS,
143149
Owner: "user@remote",
144150
LastConnection: &lastConnection,
145151
}, {
146152
Name: "sup",
147153
UUID: "hazzagarn",
154+
Type: model.IAAS,
148155
Owner: "phyllis@thrace",
149156
}})
150157
}
@@ -409,6 +416,7 @@ func createModelSummary() *params.ModelSummary {
409416
return &params.ModelSummary{
410417
Name: "name",
411418
UUID: "uuid",
419+
Type: "iaas",
412420
ControllerUUID: "controllerUUID",
413421
ProviderType: "aws",
414422
DefaultSeries: "xenial",
@@ -441,8 +449,8 @@ func (s *modelmanagerSuite) TestListModelSummaries(c *gc.C) {
441449

442450
out := result.(*params.ModelSummaryResults)
443451
out.Results = []params.ModelSummaryResult{
444-
params.ModelSummaryResult{Result: testModelInfo},
445-
params.ModelSummaryResult{Error: common.ServerError(errors.New("model error"))},
452+
{Result: testModelInfo},
453+
{Error: common.ServerError(errors.New("model error"))},
446454
}
447455
return nil
448456
},
@@ -455,6 +463,7 @@ func (s *modelmanagerSuite) TestListModelSummaries(c *gc.C) {
455463
c.Assert(results, gc.HasLen, 2)
456464
c.Assert(results[0], jc.DeepEquals, base.UserModelSummary{Name: testModelInfo.Name,
457465
UUID: testModelInfo.UUID,
466+
Type: model.IAAS,
458467
ControllerUUID: testModelInfo.ControllerUUID,
459468
ProviderType: testModelInfo.ProviderType,
460469
DefaultSeries: testModelInfo.DefaultSeries,
@@ -488,9 +497,9 @@ func (s *modelmanagerSuite) TestListModelSummariesParsingErrors(c *gc.C) {
488497
APICallerFunc: func(objType string, version int, id, request string, arg, result interface{}) error {
489498
out := result.(*params.ModelSummaryResults)
490499
out.Results = []params.ModelSummaryResult{
491-
params.ModelSummaryResult{Result: badOwnerInfo},
492-
params.ModelSummaryResult{Result: badCloudInfo},
493-
params.ModelSummaryResult{Result: badCredentialsInfo},
500+
{Result: badOwnerInfo},
501+
{Result: badCloudInfo},
502+
{Result: badCredentialsInfo},
494503
}
495504
return nil
496505
},

apiserver/facades/client/client/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,7 @@ func (c *Client) ModelInfo() (params.ModelInfo, error) {
501501
CloudRegion: model.CloudRegion(),
502502
ProviderType: conf.Type(),
503503
Name: conf.Name(),
504+
Type: string(model.Type()),
504505
UUID: model.UUID(),
505506
OwnerTag: model.Owner().String(),
506507
Life: params.Life(model.Life().String()),

apiserver/facades/client/client/client_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ func (s *serverSuite) TestModelInfo(c *gc.C) {
107107
c.Assert(info.CloudRegion, gc.Equals, model.CloudRegion())
108108
c.Assert(info.ProviderType, gc.Equals, conf.Type())
109109
c.Assert(info.Name, gc.Equals, conf.Name())
110+
c.Assert(info.Type, gc.Equals, string(model.Type()))
110111
c.Assert(info.UUID, gc.Equals, model.UUID())
111112
c.Assert(info.OwnerTag, gc.Equals, model.Owner().String())
112113
c.Assert(info.Life, gc.Equals, params.Alive)

apiserver/facades/client/controller/controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ func (c *ControllerAPI) AllModels() (params.UserModelList, error) {
186186
Model: params.Model{
187187
Name: model.Name(),
188188
UUID: model.UUID(),
189+
Type: string(model.Type()),
189190
OwnerTag: model.Owner().String(),
190191
},
191192
}

apiserver/facades/client/controller/controller_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ func (s *controllerSuite) TestAllModels(c *gc.C) {
120120
expected := []string{"controller", "no-access", "owned", "user"}
121121
var obtained []string
122122
for _, userModel := range response.UserModels {
123+
c.Assert(userModel.Type, gc.Equals, "iaas")
123124
obtained = append(obtained, userModel.Name)
124125
stateModel, ph, err := s.StatePool.GetModel(userModel.UUID)
125126
c.Assert(err, jc.ErrorIsNil)

apiserver/facades/client/modelmanager/listmodelsummaries_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ func (s *ListModelsWithInfoSuite) TestListModelSummaries(c *gc.C) {
9191
Name: "only",
9292
OwnerTag: s.adminUser.String(),
9393
UUID: s.st.ModelUUID(),
94+
Type: string(state.ModelTypeIAAS),
9495
CloudTag: "some-cloud",
9596
CloudRegion: "some-region",
9697
CloudCredentialTag: "cloudcred-some-cloud_bob_some-credential",
@@ -168,6 +169,7 @@ func (s *ListModelsWithInfoSuite) TestListModelSummariesWithMachineAndUserDetail
168169
Name: "only",
169170
OwnerTag: s.adminUser.String(),
170171
UUID: s.st.ModelUUID(),
172+
Type: string(state.ModelTypeIAAS),
171173
CloudTag: "some-cloud",
172174
CloudRegion: "some-region",
173175
CloudCredentialTag: "cloudcred-some-cloud_bob_some-credential",

apiserver/facades/client/modelmanager/modelinfo_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ func (s *modelInfoSuite) TestModelInfo(c *gc.C) {
161161
c.Assert(info, jc.DeepEquals, params.ModelInfo{
162162
Name: "testenv",
163163
UUID: s.st.model.cfg.UUID(),
164+
Type: string(s.st.model.Type()),
164165
ControllerUUID: "deadbeef-1bad-500d-9000-4b1d0d06f00d",
165166
OwnerTag: "user-bob",
166167
ProviderType: "someprovider",
@@ -217,6 +218,7 @@ func (s *modelInfoSuite) TestModelInfo(c *gc.C) {
217218
{"UUID", nil},
218219
{"Owner", nil},
219220
{"Name", nil},
221+
{"Type", nil},
220222
{"UUID", nil},
221223
{"ControllerUUID", nil},
222224
{"Life", nil},
@@ -237,6 +239,7 @@ func (s *modelInfoSuite) TestModelInfo(c *gc.C) {
237239
{"LastModelConnection", []interface{}{names.NewLocalUserTag("bob")}},
238240
{"LastModelConnection", []interface{}{names.NewLocalUserTag("charlotte")}},
239241
{"LastModelConnection", []interface{}{names.NewLocalUserTag("mary")}},
242+
{"Type", nil},
240243
})
241244
}
242245

@@ -1042,6 +1045,7 @@ func (m *mockModel) getModelDetails() state.ModelSummary {
10421045
return state.ModelSummary{
10431046
Name: m.Name(),
10441047
UUID: m.UUID(),
1048+
Type: m.Type(),
10451049
Life: m.Life(),
10461050
Owner: m.Owner().Id(),
10471051
ControllerUUID: m.ControllerUUID(),

apiserver/facades/client/modelmanager/modelmanager.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ func (m *ModelManagerAPI) newCAASModelConfig(
280280

281281
attrs := map[string]interface{}{
282282
config.NameKey: args.Name,
283-
config.TypeKey: "CAAS",
283+
config.TypeKey: cloudSpec.Type,
284284
config.UUIDKey: uuid.String(),
285285
config.AgentVersionKey: jujuversion.Current.String(),
286286
}
@@ -708,6 +708,7 @@ func (m *ModelManagerAPI) ListModelSummaries(req params.ModelSummariesRequest) (
708708
summary := &params.ModelSummary{
709709
Name: mi.Name,
710710
UUID: mi.UUID,
711+
Type: string(mi.Type),
711712
OwnerTag: names.NewUserTag(mi.Owner).String(),
712713
ControllerUUID: mi.ControllerUUID,
713714
Life: params.Life(mi.Life.String()),
@@ -799,6 +800,7 @@ func (m *ModelManagerAPI) ListModels(user params.Entity) (params.UserModelList,
799800
Model: params.Model{
800801
Name: mi.Name,
801802
UUID: mi.UUID,
803+
Type: string(mi.Type),
802804
OwnerTag: ownerTag.String(),
803805
},
804806
LastConnection: &mi.LastConnection,
@@ -910,6 +912,7 @@ func (m *ModelManagerAPI) getModelInfo(tag names.ModelTag) (params.ModelInfo, er
910912
owner := model.Owner()
911913
info := params.ModelInfo{
912914
Name: model.Name(),
915+
Type: string(model.Type()),
913916
UUID: model.UUID(),
914917
ControllerUUID: model.ControllerUUID(),
915918
OwnerTag: owner.String(),

0 commit comments

Comments
 (0)