mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
refactor vm to use vcloud classes
This commit is contained in:
parent
75af68be5a
commit
7b909e3eee
4 changed files with 31 additions and 72 deletions
|
@ -20,19 +20,7 @@ class VcloudngParser < Fog::Parsers::Base
|
|||
attributes
|
||||
end
|
||||
|
||||
def extract_link(attributes_xml)
|
||||
response = {}
|
||||
link_attrs = extract_attributes(attributes_xml)
|
||||
response[:type] = link_attrs["type"]
|
||||
response[:rel] = link_attrs["rel"]
|
||||
response[:href] = link_attrs["href"]
|
||||
if response[:type] && response[:rel]
|
||||
short_type = response[:type].scan(/.*\.(.*)\+/).first.first
|
||||
snake_case_short_type = short_type.gsub(/([A-Z])/) { '_' + $1.downcase }
|
||||
response[:method_name] = response[:rel] + '_' + snake_case_short_type
|
||||
end
|
||||
response
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class NonLoaded
|
||||
|
|
|
@ -6,7 +6,7 @@ module Fog
|
|||
module Compute
|
||||
class Vcloudng
|
||||
|
||||
class Vm < Fog::Model
|
||||
class Vm < Model
|
||||
identity :id
|
||||
|
||||
attribute :vapp_id
|
||||
|
@ -18,23 +18,8 @@ module Fog
|
|||
attribute :ip_address
|
||||
attribute :cpu, :type => :integer
|
||||
attribute :memory
|
||||
attribute :hard_disks, :aliases => 'disks'
|
||||
attribute :hard_disks, :aliases => :disks
|
||||
|
||||
#def links
|
||||
# attributes["links"]
|
||||
#end
|
||||
#
|
||||
#def generate_methods
|
||||
# attributes["links"].each do |link|
|
||||
# next unless link[:method_name]
|
||||
# self.class.instance_eval do
|
||||
# define_method(link[:method_name]) do
|
||||
# puts link[:href]
|
||||
# service.get_href(link[:href])
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
#end
|
||||
|
||||
def power_on
|
||||
response = service.post_vm_poweron(id)
|
||||
|
|
|
@ -5,36 +5,22 @@ module Fog
|
|||
module Compute
|
||||
class Vcloudng
|
||||
|
||||
class Vms < Fog::Collection
|
||||
class Vms < Collection
|
||||
model Fog::Compute::Vcloudng::Vm
|
||||
|
||||
attribute :vapp_id
|
||||
|
||||
def index
|
||||
vm_links.map{ |vm| new(vm)}
|
||||
end
|
||||
|
||||
def all
|
||||
index
|
||||
end
|
||||
|
||||
def get(vm_id)
|
||||
vm = vm_links.detect{ |vm| vm['id'] == vm_id}
|
||||
return nil unless vm
|
||||
new(vm)
|
||||
end
|
||||
|
||||
def get_by_name(vm_name)
|
||||
vm = vm_links.detect{ |vm| vm['name'] == vm_name}
|
||||
return nil unless vm
|
||||
new(vm)
|
||||
end
|
||||
attribute :vapp
|
||||
|
||||
private
|
||||
|
||||
def vm_links
|
||||
data = service.get_vms(vapp_id).body
|
||||
data['vms']
|
||||
def get_by_id(item_id)
|
||||
item = item_list.detect{ |vm| vm[:id] == item_id}
|
||||
item
|
||||
end
|
||||
|
||||
def item_list
|
||||
data = service.get_vms(vapp.id).body
|
||||
items = data[:vms]
|
||||
items
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -12,7 +12,7 @@ module Fog
|
|||
@in_operating_system = false
|
||||
@in_children = false
|
||||
@resource_type = nil
|
||||
@response = { 'vms' => [] }
|
||||
@response = { :vms => [] }
|
||||
@links = []
|
||||
end
|
||||
|
||||
|
@ -23,20 +23,20 @@ module Fog
|
|||
@in_operating_system = true
|
||||
when 'VApp'
|
||||
vapp = extract_attributes(attributes)
|
||||
@response.merge!(vapp.reject {|key,value| !['href', 'name', 'size', 'status', 'type'].include?(key)})
|
||||
@response['id'] = @response['href'].split('/').last
|
||||
@response.merge!(vapp.reject {|key,value| ![:href, :name, :size, :status, :type].include?(key)})
|
||||
@response[:id] = @response[:href].split('/').last
|
||||
when 'Vm'
|
||||
vapp = extract_attributes(attributes)
|
||||
@vm.merge!(vapp.reject {|key,value| !['href', 'name', 'status', 'type'].include?(key)})
|
||||
@vm['id'] = @vm['href'].split('/').last
|
||||
@vm['vapp_id'] = @response['id']
|
||||
@vm['status'] = human_status(@vm['status'])
|
||||
@vm.merge!(vapp.reject {|key,value| ![:href, :name, :status, :type].include?(key)})
|
||||
@vm[:id] = @vm[:href].split('/').last
|
||||
@vm[:vapp_id] = @response[:id]
|
||||
@vm[:status] = human_status(@vm[:status])
|
||||
when 'Children'
|
||||
@in_children = true
|
||||
when 'HostResource'
|
||||
@current_host_resource = extract_attributes(attributes)
|
||||
when 'Link'
|
||||
@links << extract_link(attributes)
|
||||
@links << extract_attributes(attributes)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -44,10 +44,10 @@ module Fog
|
|||
if @in_children
|
||||
case name
|
||||
when 'IpAddress'
|
||||
@vm['ip_address'] = value
|
||||
@vm[:ip_address] = value
|
||||
when 'Description'
|
||||
if @in_operating_system
|
||||
@vm['operating_system'] = value
|
||||
@vm[:operating_system] = value
|
||||
@in_operating_system = false
|
||||
end
|
||||
when 'ResourceType'
|
||||
|
@ -55,21 +55,21 @@ module Fog
|
|||
when 'VirtualQuantity'
|
||||
case @resource_type
|
||||
when '3'
|
||||
@vm['cpu'] = value
|
||||
@vm[:cpu] = value
|
||||
when '4'
|
||||
@vm['memory'] = value
|
||||
@vm[:memory] = value
|
||||
end
|
||||
when 'ElementName'
|
||||
@element_name = value
|
||||
when 'Item'
|
||||
if @resource_type == '17' # disk
|
||||
@vm['disks'] ||= []
|
||||
@vm['disks'] << { @element_name => @current_host_resource["capacity"].to_i }
|
||||
@vm[:disks] ||= []
|
||||
@vm[:disks] << { @element_name => @current_host_resource[:capacity].to_i }
|
||||
end
|
||||
when 'Link'
|
||||
@vm['links'] = @links
|
||||
@vm[:links] = @links
|
||||
when 'Vm'
|
||||
@response['vms'] << @vm
|
||||
@response[:vms] << @vm
|
||||
@vm = {}
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue