Class: MOS::Client
Overview
基类函数为Base,mos-sdk的实现类
Instance Attribute Summary
Attributes inherited from Base
#access, #debug, #format, #secret, #timeout, #url
Instance Method Summary collapse
-
#change_instance_type(iid, itype, duration = nil, datadisk = nil, bandwidth = nil) ⇒ Object
更改虚拟机类型 - @param [String] iid 虚拟机ID - @param [String] itype 指定更改的虚拟机类型 - @param [String] duration 指定更改后的初始租期,缺省为‘1M’,即一个月 - @param [Integer] datadisk 指定创建虚拟机使用的额外数据盘,单位为1GB - @param [Integer] bandwidth 指定创建虚拟机使用的额外带宽,单位为Mbps - 省略datadisk和bandwidth参数无法成功修改,具体用法可参考对应测试样例.
-
#create_instance(imageid, itype, duration = nil, name = nil, keypair = nil, secgroup = nil, datadisk = nil, bandwidth = nil, zone = nil) ⇒ Object
创建虚拟机,创建时要提供datadisk和bandwidth参数 - @param [String] imageid 系统模板ID - @param [String] itype 虚拟机类型ID 例如 C4_M4 代表四核 4G内存 - @param [String] duration 虚拟机租期, 缺省为‘1M’,即一个月 - @param [String] name 虚拟机名称(可选) - @param [String] keypair 虚拟机使用的SSH密钥ID - @param [Integer] datadisk 指定创建虚拟机使用的额外数据盘,单位为1GB - @param [Integer] bandwidth 指定创建虚拟机使用的额外带宽,单位为Mbps - @return [Hash] 创建成功的虚拟机信息.
-
#create_template(iid, name, notes = nil) ⇒ Object
保存虚拟机的模板 - @param [String] iid 虚拟机ID - @param [String] name 模板名称 - @param [String] notes 保存模板的说明 - @return [Hash] 请求是否成功.
-
#delete_key_pair(kid) ⇒ Object
删除一个SSH密钥对 - @param [String] kid 密钥对ID.
-
#delete_template(tid) ⇒ Object
删除一个模板 - @param [String] tid 模板ID.
-
#describe_instance_status(iid) ⇒ Object
获取虚拟机的状态 - @param [String] iid 虚拟机ID - @return [Hash] 虚拟机状态.
-
#describe_instance_types(limit = 0, offset = 0, filters = nil) ⇒ Object
获取所有虚拟机类型 - @param [Integer] limit 最大返回数量,用于分页控制 - @param [Integer] offset 返回偏移量,用于分页控制 - @param [Hash] filters 过滤条件,key/value分别指定过滤字段名称和值,支持的字段名称为:name, status - @return [Hash] 所有虚拟机信息.
-
#describe_instance_volumes(iid, limit = 0, offset = 0, filters = nil) ⇒ Object
获取指定虚拟机的虚拟磁盘信息 - @param [String] iid 虚拟机ID - @param [Integer] limit 最大返回数量,用于分页控制 - @param [Integer] offset 返回的偏移量,用于分页控制 - @param [Hash] filters 返回结果过滤条件,由hash的key/value指定过滤字段名和值 - @return [Hash] 指定虚拟机磁盘列表.
-
#describe_instances(ids = nil, names = nil, limit = 0, offset = 0, filters = nil) ⇒ Object
获得所有虚拟机 - @param [Array] ids 期望获取的虚拟机ID列表 - @param [Array] names 期望获取信息的虚拟机名称列表 - @param [Integer] limit 最多返回数量 - @param [Integer] offset 返回虚拟机的偏移量,用于分页显示 - @param [Hash] filters 过滤器,一个hash,包含过滤字段名和值,可能过滤字段为:name, status - @return [Hash] 虚拟机列表.
-
#describe_key_pairs(limit = 0, offset = 0, filters = nil) ⇒ Object
获取用户的SSH密钥对 - @param [Integer] limit 最大返回数量,用于分页控制 - @param [Integer] offset 返回偏移量,用于分页控制 - @param [Hash] filters 过滤条件,key/value分别指定过滤字段名称和值,支持的字段名称为:name - @return [Hash] 包含SSH密钥对列表.
-
#describe_network_interfaces(iid, limit = 0, offset = 0, filters = nil) ⇒ Object
获取指定虚拟机的网络接口(虚拟网卡)信息 - @param [String] iid 虚拟机ID - @param [Integer] limit 最大返回数量,用于分页控制 - @param [Integer] offset 返回的偏移量,用于分页控制 - @param [Hash] filters 返回结果过滤条件,由hash的key/value指定过滤字段名和值 - @return [Hash] 指定虚拟机的网络接口(虚拟网卡)信息.
-
#describe_templates ⇒ Object
获得所有虚拟机模板 - @return [Hash] 模板列表.
-
#get_balance ⇒ Object
获取帐户余额和最近更新时间 - @return [Hash] 帐户余额和最近更新时间.
-
#get_instance_contract_info(iid) ⇒ Object
获取虚拟机的租期信息 - @param [String] iid 虚拟机ID - @return [Hash] 虚拟机租期信息,包含过期时间、自动删除时间.
-
#get_instance_metadata(iid) ⇒ Object
获取虚拟机的metadata - @param [String] iid 虚拟机ID - @return [Hash] 一个hash,包含虚拟机所有metadata的key/value.
-
#get_password_data(iid, key_file = nil) ⇒ Object
获取虚拟机的Login帐户信息 - @param [String] iid 虚拟机ID - @param [String] key_file 私钥文件路径,如果虚拟机使用了SSH密钥,需要指定私钥解密password - @return [Hash] 虚拟机Login信息,包含帐户名称、密码,如果使用SSH密钥,则还包含密钥ID和名称.
-
#import_key_pair(name, pubkey) ⇒ Object
导入一个用户的SSH公钥,并创建一个SSH密钥对 - @param [String] name 密钥对名称 - @param [String] pubkey SSH公钥信息 - @return [Hash] 创建的SSH密钥对信息.
-
#initialize(access, secret, url, format = 'xml', timeout = 300, debug = false) ⇒ Client
constructor
构造函数.
-
#put_instance_metadata(iid, data) ⇒ Object
修改虚拟机的metadata - @param [String] iid 虚拟机ID - @param [Hash] data 需要增加或修改的metadata信息.
-
#reboot_instance(iid) ⇒ Object
重启虚拟机 - @param [String] iid 虚拟机ID.
-
#rebuild_instance_root_image(iid, image_id = nil) ⇒ Object
重置虚拟机系统磁盘 - @param [String] iid 虚拟机ID - @param [String] image_id 将虚拟机系统磁盘用指定镜像模板重置,如果无该参数,则使用原镜像模板重置.
-
#renew_instance(iid, duration = nil) ⇒ Object
虚拟机租期续费 - @param [String] iid 虚拟机ID - @param [String] duration 续费租期,缺省为‘1M’,即一个月.
-
#start_instance(iid) ⇒ Object
启动虚拟机 - @param [String] iid 虚拟机ID.
-
#stop_instance(iid, force = false) ⇒ Object
停止虚拟机 - @param [String] iid 虚拟机ID - @param [] force 是否强制停止虚拟机.
-
#terminate_instance(iid) ⇒ Object
删除虚拟机 - @param [String] iid 虚拟机ID.
Methods inherited from Base
#_request, #get_signature, #parse_array_params, #raw_request, #request, #sha256_hmac, #string_to_sign
Constructor Details
#initialize(access, secret, url, format = 'xml', timeout = 300, debug = false) ⇒ Client
构造函数
13 14 15 |
# File 'lib/mos-sdk.rb', line 13 def initialize(access, secret, url, format='xml', timeout=300, debug=false) super(access, secret, url, format, timeout, debug) end |
Instance Method Details
#change_instance_type(iid, itype, duration = nil, datadisk = nil, bandwidth = nil) ⇒ Object
更改虚拟机类型
-
@param [String] iid 虚拟机ID
-
@param [String] itype 指定更改的虚拟机类型
-
@param [String] duration 指定更改后的初始租期,缺省为‘1M’,即一个月
-
@param [Integer] datadisk 指定创建虚拟机使用的额外数据盘,单位为1GB
-
@param [Integer] bandwidth 指定创建虚拟机使用的额外带宽,单位为Mbps
-
省略datadisk和bandwidth参数无法成功修改,具体用法可参考对应测试样例
224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/mos-sdk.rb', line 224 def change_instance_type(iid, itype, duration=nil, datadisk=nil, bandwidth=nil) kwargs = {} kwargs['InstanceId'] = iid kwargs['InstanceType'] = itype unless duration.nil? /^\d+[HhMm]$/.match(duration) ? kwargs['Duration'] = duration : (raise Exception('Illegal duration format')) end kwargs['ExtraExtDisksize'] = datadisk unless datadisk.nil? kwargs['ExtraExtBandwidth'] = bandwidth unless bandwidth.nil? self.request('ChangeInstanceType', *kwargs) end |
#create_instance(imageid, itype, duration = nil, name = nil, keypair = nil, secgroup = nil, datadisk = nil, bandwidth = nil, zone = nil) ⇒ Object
创建虚拟机,创建时要提供datadisk和bandwidth参数
-
@param [String] imageid 系统模板ID
-
@param [String] itype 虚拟机类型ID 例如 C4_M4 代表四核 4G内存
-
@param [String] duration 虚拟机租期, 缺省为‘1M’,即一个月
-
@param [String] name 虚拟机名称(可选)
-
@param [String] keypair 虚拟机使用的SSH密钥ID
-
@param [Integer] datadisk 指定创建虚拟机使用的额外数据盘,单位为1GB
-
@param [Integer] bandwidth 指定创建虚拟机使用的额外带宽,单位为Mbps
-
@return [Hash] 创建成功的虚拟机信息
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/mos-sdk.rb', line 116 def create_instance(imageid, itype, duration=nil, name=nil, keypair=nil, secgroup=nil, datadisk=nil, bandwidth=nil, zone=nil) kwargs = {} kwargs['ImageId'] = imageid kwargs['InstanceType'] = itype unless duration.nil? /^\d+[HhMm]$/.match(duration) ? kwargs['Duration'] = duration : (raise Exception('Illegal duration format')) end kwargs['InstanceName'] = name unless name.nil? kwargs['KeyName'] = keypair unless keypair.nil? kwargs['ExtraExtDisksize'] = datadisk unless datadisk.nil? kwargs['ExtraExtBandwidth'] = bandwidth unless bandwidth.nil? kwargs['GroupId'] = secgroup unless secgroup.nil? kwargs['AvailabilityZoneId'] = zone unless zone.nil? val = self.request('CreateInstance', *kwargs) val['Instance'] end |
#create_template(iid, name, notes = nil) ⇒ Object
保存虚拟机的模板
-
@param [String] iid 虚拟机ID
-
@param [String] name 模板名称
-
@param [String] notes 保存模板的说明
-
@return [Hash] 请求是否成功
302 303 304 305 306 307 308 |
# File 'lib/mos-sdk.rb', line 302 def create_template(iid, name, notes=nil) kwargs = {} kwargs['InstanceId'] = iid kwargs['Name'] = name kwargs['Notes'] = notes unless notes.nil? self.request('CreateTemplate', *kwargs) end |
#delete_key_pair(kid) ⇒ Object
删除一个SSH密钥对
-
@param [String] kid 密钥对ID
291 292 293 294 295 |
# File 'lib/mos-sdk.rb', line 291 def delete_key_pair(kid) kwargs = {} kwargs['KeyName'] = kid self.request('DeleteKeyPair', *kwargs) end |
#delete_template(tid) ⇒ Object
删除一个模板
-
@param [String] tid 模板ID
312 313 314 315 316 |
# File 'lib/mos-sdk.rb', line 312 def delete_template(tid) kwargs = {} kwargs['TemplateId'] = tid self.request('DeleteTemplate', *kwargs) end |
#describe_instance_status(iid) ⇒ Object
获取虚拟机的状态
-
@param [String] iid 虚拟机ID
-
@return [Hash] 虚拟机状态
137 138 139 140 141 142 |
# File 'lib/mos-sdk.rb', line 137 def describe_instance_status(iid) kwargs = {} kwargs['InstanceId'] = iid val = self.request('DescribeInstanceStatus', *kwargs) val['InstanceStatus'] end |
#describe_instance_types(limit = 0, offset = 0, filters = nil) ⇒ Object
获取所有虚拟机类型
-
@param [Integer] limit 最大返回数量,用于分页控制
-
@param [Integer] offset 返回偏移量,用于分页控制
-
@param [Hash] filters 过滤条件,key/value分别指定过滤字段名称和值,支持的字段名称为:name, status
-
@return [Hash] 所有虚拟机信息
22 23 24 25 26 27 |
# File 'lib/mos-sdk.rb', line 22 def describe_instance_types(limit=0, offset=0, filters=nil) kwargs = {} self.parse_array_params(limit, offset, filters, kwargs) # parse_list_params 父类函数 val = self.request('DescribeInstanceTypes', *kwargs) val['InstanceTypeSet'] end |
#describe_instance_volumes(iid, limit = 0, offset = 0, filters = nil) ⇒ Object
获取指定虚拟机的虚拟磁盘信息
-
@param [String] iid 虚拟机ID
-
@param [Integer] limit 最大返回数量,用于分页控制
-
@param [Integer] offset 返回的偏移量,用于分页控制
-
@param [Hash] filters 返回结果过滤条件,由hash的key/value指定过滤字段名和值
-
@return [Hash] 指定虚拟机磁盘列表
64 65 66 67 68 69 70 |
# File 'lib/mos-sdk.rb', line 64 def describe_instance_volumes(iid, limit=0, offset=0, filters=nil) kwargs = {} kwargs['InstanceId'] = iid self.parse_array_params(limit, offset, filters, kwargs) val = self.request('DescribeInstanceVolumes', *kwargs) val['InstanceVolumeSet'] end |
#describe_instances(ids = nil, names = nil, limit = 0, offset = 0, filters = nil) ⇒ Object
获得所有虚拟机
-
@param [Array] ids 期望获取的虚拟机ID列表
-
@param [Array] names 期望获取信息的虚拟机名称列表
-
@param [Integer] limit 最多返回数量
-
@param [Integer] offset 返回虚拟机的偏移量,用于分页显示
-
@param [Hash] filters 过滤器,一个hash,包含过滤字段名和值,可能过滤字段为:name, status
-
@return [Hash] 虚拟机列表
49 50 51 52 53 54 55 56 |
# File 'lib/mos-sdk.rb', line 49 def describe_instances(ids=nil, names=nil, limit=0, offset=0, filters=nil) kwargs = {} kwargs['InstanceId'] = ids if ids.kind_of?(Array) && ids.size() > 0 kwargs['InstanceName'] = names if names.kind_of?(Array) && names.size() > 0 self.parse_array_params(limit, offset, filters, kwargs) val = self.request('DescribeInstances', *kwargs) val['InstanceSet'] end |
#describe_key_pairs(limit = 0, offset = 0, filters = nil) ⇒ Object
获取用户的SSH密钥对
-
@param [Integer] limit 最大返回数量,用于分页控制
-
@param [Integer] offset 返回偏移量,用于分页控制
-
@param [Hash] filters 过滤条件,key/value分别指定过滤字段名称和值,支持的字段名称为:name
-
@return [Hash] 包含SSH密钥对列表
270 271 272 273 274 275 |
# File 'lib/mos-sdk.rb', line 270 def describe_key_pairs(limit=0, offset=0, filters=nil) kwargs = {} self.parse_array_params(limit, offset, filters, kwargs) val = self.request('DescribeKeyPairs', *kwargs) val['KeyPairSet'] end |
#describe_network_interfaces(iid, limit = 0, offset = 0, filters = nil) ⇒ Object
获取指定虚拟机的网络接口(虚拟网卡)信息
-
@param [String] iid 虚拟机ID
-
@param [Integer] limit 最大返回数量,用于分页控制
-
@param [Integer] offset 返回的偏移量,用于分页控制
-
@param [Hash] filters 返回结果过滤条件,由hash的key/value指定过滤字段名和值
-
@return [Hash] 指定虚拟机的网络接口(虚拟网卡)信息
78 79 80 81 82 83 84 |
# File 'lib/mos-sdk.rb', line 78 def describe_network_interfaces(iid, limit=0, offset=0, filters=nil) kwargs = {} kwargs['InstanceId'] = iid self.parse_array_params(limit, offset, filters, kwargs) val = self.request('DescribeInstanceNetworkInterfaces', *kwargs) val['InstanceNetworkInterfaceSet'] end |
#describe_templates ⇒ Object
获得所有虚拟机模板
-
@return [Hash] 模板列表
31 32 33 34 |
# File 'lib/mos-sdk.rb', line 31 def describe_templates() val = self.request('DescribeTemplates') val['TemplateSet'] end |
#get_balance ⇒ Object
获取帐户余额和最近更新时间
-
@return [Hash] 帐户余额和最近更新时间
38 39 40 |
# File 'lib/mos-sdk.rb', line 38 def get_balance() self.request('GetBalance') end |
#get_instance_contract_info(iid) ⇒ Object
获取虚拟机的租期信息
-
@param [String] iid 虚拟机ID
-
@return [Hash] 虚拟机租期信息,包含过期时间、自动删除时间
101 102 103 104 105 |
# File 'lib/mos-sdk.rb', line 101 def get_instance_contract_info(iid) kwargs = {} kwargs['InstanceId'] = iid self.request('GetInstanceContractInfo', *kwargs) end |
#get_instance_metadata(iid) ⇒ Object
获取虚拟机的metadata
-
@param [String] iid 虚拟机ID
-
@return [Hash] 一个hash,包含虚拟机所有metadata的key/value
241 242 243 244 245 246 |
# File 'lib/mos-sdk.rb', line 241 def (iid) kwargs = {} kwargs['InstanceId'] = iid val = self.request('GetInstanceMetadata', *kwargs) val['InstanceMetadata'] end |
#get_password_data(iid, key_file = nil) ⇒ Object
获取虚拟机的Login帐户信息
-
@param [String] iid 虚拟机ID
-
@param [String] key_file 私钥文件路径,如果虚拟机使用了SSH密钥,需要指定私钥解密password
-
@return [Hash] 虚拟机Login信息,包含帐户名称、密码,如果使用SSH密钥,则还包含密钥ID和名称
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/mos-sdk.rb', line 148 def get_password_data(iid, key_file=nil) kwargs = {} kwargs['InstanceId'] = iid val = self.request('GetPasswordData', *kwargs) if val.has_key?('passwordData') && val.has_key?('keypairName') if key_file.nil? raise Exception('Password is encrypted, please specify private key of keypair %s' % val['keypairName']) else begin f = open(key_file) rescue puts 'fail to open file' exit(-1) end key = f.read() f.close() val['passwordData']=Base64.decode64( OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, val['passwordData']) ).strip end end val end |
#import_key_pair(name, pubkey) ⇒ Object
导入一个用户的SSH公钥,并创建一个SSH密钥对
-
@param [String] name 密钥对名称
-
@param [String] pubkey SSH公钥信息
-
@return [Hash] 创建的SSH密钥对信息
281 282 283 284 285 286 287 |
# File 'lib/mos-sdk.rb', line 281 def import_key_pair(name, pubkey) kwargs = {} kwargs['KeyName'] = name kwargs['PublicKeyMaterial'] = pubkey val = self.request('ImportKeyPair', *kwargs) val['KeyPair'] end |
#put_instance_metadata(iid, data) ⇒ Object
修改虚拟机的metadata
-
@param [String] iid 虚拟机ID
-
@param [Hash] data 需要增加或修改的metadata信息
251 252 253 254 255 256 257 258 259 260 261 262 263 |
# File 'lib/mos-sdk.rb', line 251 def (iid, data) kwargs = {} kwargs['InstanceId'] = iid names = [] values = [] data.each do |key, value| names.push(key) values.push(value) end kwargs['Name'] = names kwargs['Value'] = values self.request('PutInstanceMetadata', *kwargs) end |
#reboot_instance(iid) ⇒ Object
重启虚拟机
-
@param [String] iid 虚拟机ID
193 194 195 196 197 |
# File 'lib/mos-sdk.rb', line 193 def reboot_instance(iid) kwargs = {} kwargs['InstanceId'] = iid self.request('RebootInstance', *kwargs) end |
#rebuild_instance_root_image(iid, image_id = nil) ⇒ Object
重置虚拟机系统磁盘
-
@param [String] iid 虚拟机ID
-
@param [String] image_id 将虚拟机系统磁盘用指定镜像模板重置,如果无该参数,则使用原镜像模板重置
210 211 212 213 214 215 |
# File 'lib/mos-sdk.rb', line 210 def rebuild_instance_root_image(iid, image_id=nil) kwargs = {} kwargs['InstanceId'] = iid kwargs['ImageId'] = image_id if !(image_id.nil?) && image_id.size > 0 self.request('RebuildInstanceRootImage', *kwargs) end |
#renew_instance(iid, duration = nil) ⇒ Object
虚拟机租期续费
-
@param [String] iid 虚拟机ID
-
@param [String] duration 续费租期,缺省为‘1M’,即一个月
89 90 91 92 93 94 95 96 |
# File 'lib/mos-sdk.rb', line 89 def renew_instance(iid, duration=nil) kwargs = {} kwargs['InstanceId'] = iid unless duration.nil? (/^\d+[HhMm]$/.match(duration)) ? (kwargs['Duration'] = duration) : (raise Exception("Illegal duration %s" % duration)) end self.request('RenewInstance', *kwargs) end |
#start_instance(iid) ⇒ Object
启动虚拟机
-
@param [String] iid 虚拟机ID
175 176 177 178 179 |
# File 'lib/mos-sdk.rb', line 175 def start_instance(iid) kwargs = {} kwargs['InstanceId'] = iid self.request('StartInstance', *kwargs) end |
#stop_instance(iid, force = false) ⇒ Object
停止虚拟机
-
@param [String] iid 虚拟机ID
-
@param [] force 是否强制停止虚拟机
184 185 186 187 188 189 |
# File 'lib/mos-sdk.rb', line 184 def stop_instance(iid, force=false) kwargs = {} kwargs['InstanceId'] = iid kwargs['Force'] = force if force self.request('StopInstance', *kwargs) end |
#terminate_instance(iid) ⇒ Object
删除虚拟机
-
@param [String] iid 虚拟机ID
201 202 203 204 205 |
# File 'lib/mos-sdk.rb', line 201 def terminate_instance(iid) kwargs = {} kwargs['InstanceId'] = iid self.request('TerminateInstance', *kwargs) end |