def WriteObjectPropertyChangeLog(oType, sObjectID, sLabel, sFrom, sTo): catocommon.write_property_change_log(GetSessionUserID(), oType, sObjectID, sLabel, sFrom, sTo)
def update_cloud(self, args): """Updates a Cloud. Required Arguments: * `name` - Name or ID of the Cloud to update. Optional Arguments: * `apiurl` - URL of the Cloud API endpoint. * `apiprotocol` - Cloud API endpoint protocol. * `default_account` - the name of a default Account for this Cloud. Returns: The updated [Cloud Object](restapi/api-response-objects.html#Cloud){:target="_blank"}. """ # this is a developer function if not api._DEVELOPER: return R(err_code=R.Codes.Forbidden, err_msg="Only Developers or Administrators can perform this function.") required_params = ["name"] has_required, resp = api.check_required_params(required_params, args) if not has_required: return resp name = args.get("name") apiurl = args.get("apiurl") apiprotocol = args.get("apiprotocol") default_account = args.get("default_account") oldvals = [] newvals = [] obj = cloud.Cloud() obj.FromName(name) if apiurl: oldvals.append("api_url: %s" % (obj.APIUrl)) newvals.append("api_url: %s" % (apiurl)) obj.APIUrl = apiurl if apiprotocol: oldvals.append("api_protocol: %s" % (obj.APIProtocol)) newvals.append("api_protocol: %s" % (apiprotocol)) obj.APIProtocol = apiprotocol if default_account: obj.GetDefaultAccount() oldvals.append("default_account: %s" % (obj.DefaultAccount.Name if obj.DefaultAccount else "None")) # no need to build a complete object, as the update is just updating the ID newacct = cloud.CloudAccount() newacct.FromName(default_account) if newacct.ID: if not newacct.Provider.Name == obj.Provider.Name: raise Exception("Default Account must be the same Provider as this Cloud.") newvals.append("default_account: %s" % (newacct.Name)) obj.DefaultAccount = newacct obj.DBUpdate() catocommon.write_property_change_log(api._USER_ID, catocommon.CatoObjectTypes.Cloud, obj.ID, obj.Name, ", ".join(oldvals), ", ".join(newvals)) if args.get("output_format") == "json": return R(response=obj.AsJSON()) elif args.get("output_format") == "text": return R(response=obj.AsText(args.get("output_delimiter"), args.get("header"))) else: return R(response=obj.AsXML())