class Vmpooler::PoolManager::Provider::Base

Attributes

logger[R]

Helper Methods Global Logger object

metrics[R]

Global Metrics object

provider_options[R]

Provider options passed in during initialization

Public Class Methods

new(config, logger, metrics, redis_connection_pool, name, options) click to toggle source
# File lib/vmpooler/providers/base.rb, line 17
def initialize(config, logger, metrics, redis_connection_pool, name, options)
  @config = config
  @logger = logger
  @metrics = metrics
  @redis = redis_connection_pool
  @provider_name = name

  # Ensure that there is not a nil provider configuration
  @config[:providers] = {} if @config[:providers].nil?
  @config[:providers][@provider_name] = {} if provider_config.nil?

  # Ensure that there is not a nil pool configuration
  @config[:pools] = {} if @config[:pools].nil?

  @provider_options = options
  logger.log('s', "[!] Creating provider '#{name}'")
end

Public Instance Methods

create_disk(_pool_name, _vm_name, _disk_size) click to toggle source

inputs

[String]  pool_name  : Name of the pool
[String]  vm_name    : Name of the VM to create the disk on
[Integer] disk_size  : Size of the disk to create in Gigabytes (GB)

returns

[Boolean] : true if success, false if disk could not be created
Raises RuntimeError if the Pool does not exist
Raises RuntimeError if the VM does not exist
# File lib/vmpooler/providers/base.rb, line 168
def create_disk(_pool_name, _vm_name, _disk_size)
  raise("#{self.class.name} does not implement create_disk")
end
create_snapshot(_pool_name, _vm_name, _new_snapshot_name) click to toggle source

inputs

[String] pool_name         : Name of the pool
[String] new_vmname        : Name of the VM to create the snapshot on
[String] new_snapshot_name : Name of the new snapshot to create

returns

[Boolean] : true if success, false if snapshot could not be created
Raises RuntimeError if the Pool does not exist
Raises RuntimeError if the VM does not exist
# File lib/vmpooler/providers/base.rb, line 180
def create_snapshot(_pool_name, _vm_name, _new_snapshot_name)
  raise("#{self.class.name} does not implement create_snapshot")
end
create_template_delta_disks(_pool) click to toggle source

inputs

[Hash] pool : Configuration for the pool

returns

nil when successful. Raises error when encountered
# File lib/vmpooler/providers/base.rb, line 228
def create_template_delta_disks(_pool)
  raise("#{self.class.name} does not implement create_template_delta_disks")
end
create_vm(_pool_name, _new_vmname) click to toggle source

inputs

[String] pool       : Name of the pool
[String] new_vmname : Name to give the new VM

returns

[Hashtable] of the VM as per get_vm
Raises RuntimeError if the pool_name is not supported by the Provider
# File lib/vmpooler/providers/base.rb, line 156
def create_vm(_pool_name, _new_vmname)
  raise("#{self.class.name} does not implement create_vm")
end
destroy_vm(_pool_name, _vm_name) click to toggle source

inputs

[String] pool_name : Name of the pool
[String] vm_name   : Name of the VM to destroy

returns

[Boolean] : true if success, false on error. Should returns true if the VM is missing
# File lib/vmpooler/providers/base.rb, line 202
def destroy_vm(_pool_name, _vm_name)
  raise("#{self.class.name} does not implement destroy_vm")
end
find_least_used_compatible_host(_pool_name, _vm_name) click to toggle source

inputs

[String] pool_name : Name of the pool
[String] vm_name   : Name of the VM

returns

[String] : Name of the most appropriate host computer to run this VM.  Useful for load balancing VMs in a cluster
             If this is not a Virtual Machine, it returns the vm_name
# File lib/vmpooler/providers/base.rb, line 111
def find_least_used_compatible_host(_pool_name, _vm_name)
  raise("#{self.class.name} does not implement find_least_used_compatible_host")
end
get_target_datacenter_from_config(_provider_name) click to toggle source

inputs

[String] provider_name : Name of the provider

returns

Hash of folders
# File lib/vmpooler/providers/base.rb, line 236
def get_target_datacenter_from_config(_provider_name)
  raise("#{self.class.name} does not implement get_target_datacenter_from_config")
end
get_vm(_pool_name, _vm_name) click to toggle source

inputs

[String] pool_name : Name of the pool
[String] vm_name   : Name of the VM to find

returns

nil if VM doesn't exist
[Hastable] of the VM
 [String] name       : Name of the VM
 [String] hostname   : Name reported by Vmware tools (host.summary.guest.hostName)
 [String] template   : This is the name of template exposed by the API.  It must _match_ the poolname
 [String] poolname   : Name of the pool the VM is located
 [Time]   boottime   : Time when the VM was created/booted
 [String] powerstate : Current power state of a VM.  Valid values (as per vCenter API)
                         - 'PoweredOn','PoweredOff'
# File lib/vmpooler/providers/base.rb, line 146
def get_vm(_pool_name, _vm_name)
  raise("#{self.class.name} does not implement get_vm")
end
get_vm_host(_pool_name, _vm_name) click to toggle source

inputs

[String]pool_name : Name of the pool
[String] vm_name  : Name of the VM

returns

[String] : Name of the host computer running the vm.  If this is not a Virtual Machine, it returns the vm_name
# File lib/vmpooler/providers/base.rb, line 101
def get_vm_host(_pool_name, _vm_name)
  raise("#{self.class.name} does not implement get_vm_host")
end
global_config() click to toggle source

returns

[Hashtable] : The entire VMPooler configuration
# File lib/vmpooler/providers/base.rb, line 63
def global_config
  # This entire VM Pooler config
  @config
end
migrate_vm(_pool_name, _vm_name, _redis) click to toggle source

inputs

[String] pool_name      : Name of the pool
[String] vm_name        : Name of the VM to migrate
[Class] redis           : Redis object
# File lib/vmpooler/providers/base.rb, line 129
def migrate_vm(_pool_name, _vm_name, _redis)
  raise("#{self.class.name} does not implement migrate_vm")
end
migrate_vm_to_host(_pool_name, _vm_name, _dest_host_name) click to toggle source

inputs

[String] pool_name      : Name of the pool
[String] vm_name        : Name of the VM to migrate
[String] dest_host_name : Name of the host to migrate `vm_name` to

returns

[Boolean] : true on success or false on failure
# File lib/vmpooler/providers/base.rb, line 121
def migrate_vm_to_host(_pool_name, _vm_name, _dest_host_name)
  raise("#{self.class.name} does not implement migrate_vm_to_host")
end
name() click to toggle source

returns

[String] : Name of the provider service
# File lib/vmpooler/providers/base.rb, line 70
def name
  @provider_name
end
pool_config(pool_name) click to toggle source

inputs

[String] pool_name : Name of the pool to get the configuration

returns

[Hashtable] : The pools configuration from the config file.  Returns nil if the pool does not exist
# File lib/vmpooler/providers/base.rb, line 41
def pool_config(pool_name)
  # Get the configuration of a specific pool
  @config[:pools].each do |pool|
    return pool if pool['name'] == pool_name
  end

  nil
end
provided_pools() click to toggle source

returns

Array[String] : Array of pool names this provider services
# File lib/vmpooler/providers/base.rb, line 76
def provided_pools
  list = []
  @config[:pools].each do |pool|
    list << pool['name'] if pool['provider'] == name
  end
  list
end
provider_config() click to toggle source

returns

[Hashtable] : This provider's configuration from the config file.  Returns nil if the provider does not exist
# File lib/vmpooler/providers/base.rb, line 52
def provider_config
  @config[:providers].each do |provider|
    # Convert the symbol from the config into a string for comparison
    return (provider[1].nil? ? {} : provider[1]) if provider[0].to_s == @provider_name
  end

  nil
end
purge_unconfigured_folders(_base_folders, _configured_folders, _whitelist) click to toggle source
# File lib/vmpooler/providers/base.rb, line 240
def purge_unconfigured_folders(_base_folders, _configured_folders, _whitelist)
  raise("#{self.class.name} does not implement purge_unconfigured_folders")
end
revert_snapshot(_pool_name, _vm_name, _snapshot_name) click to toggle source

inputs

[String] pool_name     : Name of the pool
[String] new_vmname    : Name of the VM to restore
[String] snapshot_name : Name of the snapshot to restore to

returns

[Boolean] : true if success, false if snapshot could not be revertted
Raises RuntimeError if the Pool does not exist
Raises RuntimeError if the VM does not exist
Raises RuntimeError if the snapshot does not exist
# File lib/vmpooler/providers/base.rb, line 193
def revert_snapshot(_pool_name, _vm_name, _snapshot_name)
  raise("#{self.class.name} does not implement revert_snapshot")
end
vm_exists?(pool_name, vm_name) click to toggle source

inputs

[String] pool_name : Name of the pool
[String] vm_name   : Name of the VM to check if it exists

returns

[Boolean] : true if it exists, false if not
# File lib/vmpooler/providers/base.rb, line 220
def vm_exists?(pool_name, vm_name)
  !get_vm(pool_name, vm_name).nil?
end
vm_ready?(_pool_name, _vm_name) click to toggle source

inputs

[String] pool_name : Name of the pool
[String] vm_name   : Name of the VM to check if ready

returns

[Boolean] : true if ready, false if not
# File lib/vmpooler/providers/base.rb, line 211
def vm_ready?(_pool_name, _vm_name)
  raise("#{self.class.name} does not implement vm_ready?")
end
vms_in_pool(_pool_name) click to toggle source

inputs

[String] pool_name : Name of the pool

returns

Array[Hashtable]
  Hash contains:
    'name' => [String] Name of VM
# File lib/vmpooler/providers/base.rb, line 92
def vms_in_pool(_pool_name)
  raise("#{self.class.name} does not implement vms_in_pool")
end