class Object

Public Instance Methods

find_datastores() click to toggle source
# File lib/chef/knife/vsphere_datastore_maxfree.rb, line 70
def find_datastores
  if get_config(:vlan)
    find_network(get_config(:vlan)).host.map(&:datastore).flatten
  elsif get_config(:pool)
    find_pools_and_clusters(datacenter.hostFolder, get_config(:pool)).map(&:datastore).flatten
  else
    datacenter.datastore
  end
end
find_max_dscluster(folder, max_dscluster, regex) click to toggle source
# File lib/chef/knife/vsphere_datastorecluster_maxfree.rb, line 31
def find_max_dscluster(folder, max_dscluster, regex)
  folder.childEntity.each do |child|
    if child.class.to_s == "Folder"
      sub_max = find_max_dscluster(child, max_dscluster, regex)
      max_dscluster = sub_max if max_dscluster(sub_max, max_dscluster)
    elsif child.class.to_s == "StoragePod"
      if max_dscluster(child, max_dscluster) && regex.match(child.name)
        max_dscluster = child
      end
    end
  end

  max_dscluster
end
max_dscluster(dscluster, max_dscluster) click to toggle source
# File lib/chef/knife/vsphere_datastorecluster_maxfree.rb, line 21
def max_dscluster(dscluster, max_dscluster)
  return true unless max_dscluster

  if dscluster.summary[:freeSpace] > max_dscluster.summary[:freeSpace]
    return true
  end

  false
end
number_to_human_size(number) click to toggle source
# File lib/chef/knife/vsphere_datastorecluster_list.rb, line 21
def number_to_human_size(number)
  number = number.to_f
  storage_units_fmt = %w{byte kB MB GB TB}
  base = 1024
  if number.to_i < base
    unit = storage_units_fmt[0]
  else
    max_exp = storage_units_fmt.size - 1
    exponent = (Math.log(number) / Math.log(base)).to_i # Convert to base
    exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
    number /= base**exponent
    unit = storage_units_fmt[exponent]
  end

  format("%0.2f %s", number, unit)
end
print_dsclusters_in_folder(folder) click to toggle source
traverse_folders_for_dsclusters(folder) click to toggle source
# File lib/chef/knife/vsphere_datastorecluster_list.rb, line 38
def traverse_folders_for_dsclusters(folder)
  print_dsclusters_in_folder(folder)
  folder.childEntity.each do |child|
    traverse_folders_for_dsclusters(child) if child.class.to_s == "Folder"
  end
end