41
42
name, owner, cloud, cloudRegion string,
42
43
cloudCredential names.CloudCredentialTag,
43
44
config map[string]interface{},
44
) (params.ModelInfo, error) {
45
var result params.ModelInfo
45
) (base.ModelInfo, error) {
46
var result base.ModelInfo
46
47
if !names.IsValidUser(owner) {
47
48
return result, errors.Errorf("invalid owner name %q", owner)
65
66
CloudRegion: cloudRegion,
66
67
CloudCredentialTag: cloudCredentialTag,
68
err := c.facade.FacadeCall("CreateModel", createArgs, &result)
69
var modelInfo params.ModelInfo
70
err := c.facade.FacadeCall("CreateModel", createArgs, &modelInfo)
70
72
return result, errors.Trace(err)
74
return convertParamsModelInfo(modelInfo)
77
func convertParamsModelInfo(modelInfo params.ModelInfo) (base.ModelInfo, error) {
78
cloud, err := names.ParseCloudTag(modelInfo.CloudTag)
80
return base.ModelInfo{}, err
83
if modelInfo.CloudCredentialTag != "" {
84
credTag, err := names.ParseCloudCredentialTag(modelInfo.CloudCredentialTag)
86
return base.ModelInfo{}, err
88
credential = credTag.Id()
90
ownerTag, err := names.ParseUserTag(modelInfo.OwnerTag)
92
return base.ModelInfo{}, err
94
result := base.ModelInfo{
97
ControllerUUID: modelInfo.ControllerUUID,
98
ProviderType: modelInfo.ProviderType,
99
DefaultSeries: modelInfo.DefaultSeries,
101
CloudRegion: modelInfo.CloudRegion,
102
CloudCredential: credential,
103
Owner: ownerTag.Id(),
104
Life: string(modelInfo.Life),
106
result.Status = base.Status{
107
Status: modelInfo.Status.Status,
108
Info: modelInfo.Status.Info,
109
Data: make(map[string]interface{}),
110
Since: modelInfo.Status.Since,
112
for k, v := range modelInfo.Status.Data {
113
result.Status.Data[k] = v
115
result.Users = make([]base.UserInfo, len(modelInfo.Users))
116
for i, u := range modelInfo.Users {
117
result.Users[i] = base.UserInfo{
118
UserName: u.UserName,
119
DisplayName: u.DisplayName,
120
Access: string(u.Access),
121
LastConnection: u.LastConnection,
124
result.Machines = make([]base.Machine, len(modelInfo.Machines))
125
for i, m := range modelInfo.Machines {
126
machine := base.Machine{
128
InstanceId: m.InstanceId,
130
WantsVote: m.WantsVote,
133
if m.Hardware != nil {
134
machine.Hardware = &instance.HardwareCharacteristics{
135
Arch: m.Hardware.Arch,
137
RootDisk: m.Hardware.RootDisk,
138
CpuCores: m.Hardware.Cores,
139
CpuPower: m.Hardware.CpuPower,
140
Tags: m.Hardware.Tags,
141
AvailabilityZone: m.Hardware.AvailabilityZone,
144
result.Machines[i] = machine
72
146
return result, nil
185
// ParseModelAccess parses an access permission argument into
186
// a type suitable for making an API facade call.
187
func ParseModelAccess(access string) (params.UserAccessPermission, error) {
188
var fail params.UserAccessPermission
190
modelAccess, err := permission.ParseModelAccess(access)
192
return fail, errors.Trace(err)
194
var accessPermission params.UserAccessPermission
196
case permission.ModelReadAccess:
197
accessPermission = params.ModelReadAccess
198
case permission.ModelWriteAccess:
199
accessPermission = params.ModelWriteAccess
200
case permission.ModelAdminAccess:
201
accessPermission = params.ModelAdminAccess
203
return fail, errors.Errorf("unsupported model access permission %v", modelAccess)
205
return accessPermission, nil
208
259
// GrantModel grants a user access to the specified models.
209
260
func (c *Client) GrantModel(user, access string, modelUUIDs ...string) error {
210
261
return c.modifyModelUser(params.GrantModelAccess, user, access, modelUUIDs)
235
286
args.Changes = append(args.Changes, params.ModifyModelAccess{
236
287
UserTag: userTag.String(),
238
Access: accessPermission,
289
Access: params.UserAccessPermission(modelAccess),
239
290
ModelTag: modelTag.String(),
243
294
var result params.ErrorResults
244
err = c.facade.FacadeCall("ModifyModelAccess", args, &result)
295
err := c.facade.FacadeCall("ModifyModelAccess", args, &result)
246
297
return errors.Trace(err)