class Chef::Knife::VsphereDatastoreList

Lists all known data stores in datacenter with sizes VsphereDatastorelist extends the BaseVspherecommand

Public Instance Methods

run() click to toggle source

The main run method for datastore_list

# File lib/chef/knife/vsphere_datastore_list.rb, line 43
def run
  $stdout.sync = true

  vim_connection
  dc = datacenter
  folder = dc.hostFolder
  target_pool = get_config(:pool)

  pools = find_pools_and_clusters(folder, target_pool)
  if target_pool && pools.empty?
    fatal_exit("Pool #{target_pool} not found")
  end

  pool_info = pools.map do |pool|
    datastores = list_ds(pool)
    { "Pool" => pool.name, "Datastores" => datastores }
  end
  ui.output(pool_info)
end

Private Instance Methods

list_ds(pool) click to toggle source
# File lib/chef/knife/vsphere_datastore_list.rb, line 74
def list_ds(pool)
  pool.datastore.map do |store|
    avail = number_to_human_size(store.summary[:freeSpace])
    cap = number_to_human_size(store.summary[:capacity])
    ds_info = { "Datastore" => store.name, "Free" => avail, "Capacity" => cap }
    ds_info["Vms"] = list_vms(store) if get_config(:list)
    ds_info
  end
end
list_vms(store) click to toggle source
# File lib/chef/knife/vsphere_datastore_list.rb, line 65
def list_vms(store)
  store.vm.map do |vm|
    host_name = vm.guest[:hostName]
    guest_full_name = vm.guest[:guest_full_name]
    guest_state = vm.guest[:guest_state]
    { "VM Name" => host_name, "OS" => guest_full_name, "State" => guest_state }
  end
end