Class: Vcloud::Launcher::VappOrchestrator

Inherits:
Object
  • Object
show all
Defined in:
lib/vcloud/launcher/vapp_orchestrator.rb

Class Method Summary collapse

Class Method Details

.extract_vm_networks(config) ⇒ Object



29
30
31
32
33
# File 'lib/vcloud/launcher/vapp_orchestrator.rb', line 29

def self.extract_vm_networks(config)
  if (config[:vm] && config[:vm][:network_connections])
    config[:vm][:network_connections].collect { |h| h[:name] }
  end
end

.provision(vapp_config, dry_run = false) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/vcloud/launcher/vapp_orchestrator.rb', line 5

def self.provision(vapp_config, dry_run = false)
  name, vdc_name = vapp_config[:name], vapp_config[:vdc_name]

  vapp_existing = Vcloud::Core::Vapp.get_by_name_and_vdc_name(name, vdc_name)
  if vapp_existing
    Vcloud::Core.logger.info("Found existing vApp #{name} in vDC '#{vdc_name}'. Skipping.")
    return vapp_existing
  end

  template_name = vapp_config[:vapp_template_name] || vapp_config[:catalog_item]
  catalog_name = vapp_config[:catalog_name] || vapp_config[:catalog]
  template = Vcloud::Core::VappTemplate.get(template_name, catalog_name)
  template_id = template.id
  network_names = extract_vm_networks(vapp_config)
  if dry_run
    Vcloud::Core.logger.info("Instantiating new vApp #{name} in vDC '#{vdc_name}'")
  else
    vapp = Vcloud::Core::Vapp.instantiate(name, network_names, template_id, vdc_name)
    Vcloud::Launcher::VmOrchestrator.new(vapp.vms.first, vapp).customize(vapp_config[:vm]) if vapp_config[:vm]

    vapp
  end
end