Class: VCloudSdk::VApp

Inherits:
Object
  • Object
show all
Includes:
Infrastructure, Powerable
Defined in:
lib/ruby_vcloud_sdk/vapp.rb

Constant Summary

Constants included from Infrastructure

Infrastructure::ERROR_STATUSES, Infrastructure::SUCCESS_STATUS

Instance Method Summary collapse

Methods included from Powerable

#power_off, #power_on, #status

Constructor Details

#initialize(session, link) ⇒ VApp

Returns a new instance of VApp.



10
11
12
13
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 10

def initialize(session, link)
  @session = session
  @link = link
end

Instance Method Details

#deleteObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 19

def delete
  vapp = entity_xml
  vapp_name = name

  if is_status?(vapp, :POWERED_ON)
    fail CloudError,
         "vApp #{vapp_name} is powered on, power-off before deleting."
  end

  wait_for_running_tasks(vapp, "VApp #{vapp_name}")

  Config.logger.info "Deleting vApp #{vapp_name}."
  monitor_task(connection.delete(vapp.remove_link),
               @session.time_limit[:delete_vapp]) do |task|
    Config.logger.info "vApp #{vapp_name} deleted."
    return task
  end

  fail ApiRequestError,
       "Fail to delete vApp #{vapp_name}"
end

#find_vm_by_name(name) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 69

def find_vm_by_name(name)
  entity_xml.vms.each do |vm|
    return VCloudSdk::VM.new(@session, vm.href) if vm.name == name
  end

  fail ObjectNotFoundError, "VM '#{name}' is not found"
end

#list_vmsObject



63
64
65
66
67
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 63

def list_vms
  entity_xml.vms.map do |vm|
    vm.name
  end
end

#nameObject



15
16
17
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 15

def name
  entity_xml.name
end

#recompose_from_vapp_template(catalog_name, template_name) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 41

def recompose_from_vapp_template(catalog_name, template_name)
  recompose_vapp_link = get_recompose_vapp_link

  Config.logger.info "Recomposing from template '#{template_name}' in catalog '#{catalog_name}'."
  catalog = find_catalog_by_name catalog_name

  template = catalog.find_vapp_template_by_name template_name

  task = connection.post recompose_vapp_link.href,
                         recompose_from_vapp_template_param(template)

  monitor_task task, @session.time_limit[:recompose_vapp]
  Config.logger.info "vApp #{name} is recomposed."
  self
end

#remove_vm_by_name(vm_name) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 77

def remove_vm_by_name(vm_name)
  target_vm = find_vm_by_name vm_name
  recompose_vapp_link = get_recompose_vapp_link

  task = connection.post recompose_vapp_link.href,
                         remove_vm_param(target_vm)

  monitor_task task, @session.time_limit[:recompose_vapp]
  Config.logger.info "VM #{vm_name} is removed."
  self
end

#vmsObject



57
58
59
60
61
# File 'lib/ruby_vcloud_sdk/vapp.rb', line 57

def vms
  entity_xml.vms.map do |vm|
    VCloudSdk::VM.new(@session, vm.href)
  end
end