module VagrantPlugins::VSphere::Util::VimHelpers

Public Instance Methods

find_clustercompute_or_compute_resource(datacenter, path) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 31
def find_clustercompute_or_compute_resource(datacenter, path)
  if path.is_a? String
    es = path.split('/').reject(&:empty?)
  elsif path.is_a? Enumerable
    es = path
  else
    fail "unexpected path class #{path.class}"
  end
  return datacenter.hostFolder if es.empty?
  final = es.pop

  p = es.inject(datacenter.hostFolder) do |f, e|
    f.find(e, RbVmomi::VIM::Folder) || return
  end

  begin
    if (x = p.find(final, RbVmomi::VIM::ComputeResource))
      x
    elsif (x = p.find(final, RbVmomi::VIM::ClusterComputeResource))
      x
    end
  rescue Exception
    # When looking for the ClusterComputeResource there seems to be some parser error in RbVmomi Folder.find, try this instead
    x = p.childEntity.find { |x2| x2.name == final }
    if x.is_a?(RbVmomi::VIM::ClusterComputeResource) || x.is_a?(RbVmomi::VIM::ComputeResource)
      x
    else
      puts 'ex unknown type ' + x.to_json
      nil
    end
  end
end
get_compute_resource(datacenter, machine) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 25
def get_compute_resource(datacenter, machine)
  cr = find_clustercompute_or_compute_resource(datacenter, machine.provider_config.compute_resource_name)
  fail Errors::VSphereError, :missing_compute_resource if cr.nil?
  cr
end
get_customization_spec_info_by_name(connection, machine) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 64
def get_customization_spec_info_by_name(connection, machine)
  name = machine.provider_config.customization_spec_name
  return if name.nil? || name.empty?

  manager = connection.serviceContent.customizationSpecManager
  fail Errors::VSphereError, :null_configuration_spec_manager if manager.nil?

  spec = manager.GetCustomizationSpec(name: name)
  fail Errors::VSphereError, :missing_configuration_spec if spec.nil?

  spec
end
get_datacenter(connection, machine) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 7
def get_datacenter(connection, machine)
  connection.serviceInstance.find_datacenter(machine.provider_config.data_center_name) || fail(Errors::VSphereError, :missing_datacenter)
end
get_datastore(datacenter, machine) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 77
def get_datastore(datacenter, machine)
  name = machine.provider_config.data_store_name
  return if name.nil? || name.empty?

  # find_datastore uses folder datastore that only lists Datastore and not StoragePod, if not found also try datastoreFolder which contains StoragePod(s)
  datacenter.find_datastore(name) || datacenter.datastoreFolder.traverse(name) || fail(Errors::VSphereError, :missing_datastore)
end
get_network_by_name(dc, name) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 85
def get_network_by_name(dc, name)
  dc.network.find { |f| f.name == name } || fail(Errors::VSphereError, :missing_vlan)
end
get_resource_pool(datacenter, machine) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 15
def get_resource_pool(datacenter, machine)
  compute_resource = get_compute_resource(datacenter, machine)
  rp = compute_resource.resourcePool
  unless machine.provider_config.resource_pool_name.nil?
    rp = compute_resource.resourcePool.find(machine.provider_config.resource_pool_name)
    fail Errors::VSphereError, :missing_resource_pool if rp.nil?
  end
  rp
end
get_vm_by_uuid(connection, machine) click to toggle source
# File lib/vSphere/util/vim_helpers.rb, line 11
def get_vm_by_uuid(connection, machine)
  get_datacenter(connection, machine).vmFolder.findByUuid machine.id
end