require 'fog/core/model' module Fog module Compute class Aliyun class Volume < Fog::Model # "ImageId": "", # "InstanceId": "", # "OperationLocks": { # "OperationLock": [] # }, # "Portable": true, # "ProductCode": "", # "RegionId": "cn-qingdao", # "Size": 5, # "SourceSnapshotId": "", # "Status": "Available", # "Type": "data", identity :id, :aliases => 'DiskId' attribute :region_id, :aliases => 'RegionId' attribute :zone_id, :aliases => 'ZoneId' attribute :name, :aliases => 'DiskName' attribute :description, :aliases => 'Description' attribute :type, :aliases => 'Type' attribute :category, :aliases => 'Category' attribute :size, :aliases => 'Size' attribute :image_id, :aliases => 'ImageId' attribute :snapshot_id, :aliases => 'SourceSnapshotId' attribute :product_code, :aliases => 'ProductCode' attribute :portable, :aliases => 'Portable' attribute :state, :aliases => 'Status' attribute :operation_locks, :aliases => 'OperationLocks' attribute :server_id, :aliases => 'InstanceId' attribute :device, :aliases => 'Device' attribute :delete_with_instance, :aliases => 'DeleteWithInstance' attribute :delete_auto_snapshot, :aliases => 'DeleteAutoSnapshot' attribute :enable_auto_snapshot, :aliases => 'EnableAutoSnapshot' attribute :created_at, :aliases => 'CreationTime' attribute :attached_at, :aliases => 'AttachedTime' attribute :detached_at, :aliases => 'DetachedTime' attribute :expired_at, :aliases => 'ExpiredTime' attribute :charge_type, :aliases => 'DiskChargeType' attribute :tags, :aliases => 'Tags' def destroy requires :id service.delete_disk(id) true end def ready? requires :state state == 'Available' end def save(options={}) # raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted? # requires :availability_zone requires_one :size, :snapshot_id options[:name] = name if name options[:description]=description if description if snapshot_id data=Fog::JSON.decode(service.create_disk_by_snapshot(snapshot_id,options).body) merge_attributes(data) elsif size data = Fog::JSON.decode(service.create_disk(size,options).body) merge_attributes(data) end true end def image requires :image_id Fog::Compute::Aliyun::Images.new(:service=>service).all(:imageId=>image_id)[0] end def snapshots requires :id Fog::Compute::Aliyun::Snapshots.new(:service=>service).all(:volume_id=>id) end def source requires :snapshot_id Fog::Compute::Aliyun::Snapshots.new(:service=>service).all(:snapshotIds => [snapshot_id])[0] end private def source=(new_source) self.snapshot_id=new_source.id end def image=(new_image) self.image_id = new_image.id end end end end end