Merge branch 'release/2.2.0' of ssh://git.yunion.io/~qiujian/onecloud into hotfix/qj-resolve-conflict-2.3.0-20181130

Conflicts:
	cmd/climc/shell/servers.go
	pkg/compute/models/guest_actions.go
This commit is contained in:
Qiu Jian
2018-11-30 23:13:51 +08:00
2 changed files with 73 additions and 0 deletions
+31
View File
@@ -532,4 +532,35 @@ func init() {
printObject(result)
return nil
})
type ServerAddExtraOption struct {
ID string `help:"ID or name of server"`
KEY string `help:"Option key"`
VALUE string `help:"Option value"`
}
R(&ServerAddExtraOption{}, "server-add-extra-options", "Add server extra options", func(s *mcclient.ClientSession, args *ServerAddExtraOption) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.KEY), "key")
params.Add(jsonutils.NewString(args.VALUE), "value")
result, err := modules.Servers.PerformAction(s, args.ID, "set-extra-option", params)
if err != nil {
return err
}
printObject(result)
return nil
})
type ServerRemoveExtraOption struct {
ID string `help:"ID or name of server"`
KEY string `help:"Option key"`
}
R(&ServerRemoveExtraOption{}, "server-remove-extra-options", "Remove server extra options", func(s *mcclient.ClientSession, args *ServerRemoveExtraOption) error {
params := jsonutils.NewDict()
params.Add(jsonutils.NewString(args.KEY), "key")
result, err := modules.Servers.PerformAction(s, args.ID, "del-extra-option", params)
if err != nil {
return err
}
printObject(result)
return nil
})
}
+42
View File
@@ -1736,3 +1736,45 @@ func (self *SGuest) PerformUserData(ctx context.Context, userCred mcclient.Token
}
return nil, nil
}
func (self *SGuest) AllowPerformSetExtraOption(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return userCred.IsSystemAdmin()
}
func (self *SGuest) PerformSetExtraOption(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
key, err := data.GetString("key")
if err != nil {
return nil, httperrors.NewBadRequestError("Option key required")
}
value, _ := data.GetString("value")
extraOptions := self.GetExtraOptions(userCred)
extraOptions.Set(key, jsonutils.NewString(value))
return nil, self.SetExtraOptions(ctx, userCred, extraOptions)
}
func (self *SGuest) GetExtraOptions(userCred mcclient.TokenCredential) *jsonutils.JSONDict {
options := self.GetMetadataJson("extra_options", userCred)
o, ok := options.(*jsonutils.JSONDict)
if ok {
return o
}
return jsonutils.NewDict()
}
func (self *SGuest) SetExtraOptions(ctx context.Context, userCred mcclient.TokenCredential, extraOptions *jsonutils.JSONDict) error {
return self.SetMetadata(ctx, "extra_options", extraOptions, userCred)
}
func (self *SGuest) AllowPerformDelExtraOption(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool {
return userCred.IsSystemAdmin()
}
func (self *SGuest) PerformDelExtraOption(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
key, err := data.GetString("key")
if err != nil {
return nil, httperrors.NewBadRequestError("Option key required")
}
extraOptions := self.GetExtraOptions(userCred)
extraOptions.Remove(key)
return nil, self.SetExtraOptions(ctx, userCred, extraOptions)
}