Stop reloading configuration file from vspherehelper and instead source credentials from the configuration object that itself loads the configuration file when the application starts. Without this change the configuration file is reloaded every time vspherehelper is called. Additionally, this change makes it more straightforward to test vspherehelper connections.

A method is added to make more clear what's happening when checking if a socket can be opened to a pending VM on port 22. Additionally, the connection appends domain from the configuration, when present, to the VM name so DNS search is not required.
This commit is contained in:
kirby@puppetlabs.com 2016-11-15 13:49:12 -08:00
parent 58a548bc90
commit a244f9b92a
2 changed files with 30 additions and 23 deletions

View file

@ -26,14 +26,20 @@ module Vmpooler
end end
end end
def open_socket(host, domain=nil, timeout=5, port=22)
Timeout.timeout(timeout) do
target_host = vm
target_host = "#{vm}.#{domain}" if domain
TCPSocket.new target_host, port
end
end
def _check_pending_vm(vm, pool, timeout) def _check_pending_vm(vm, pool, timeout)
host = $vsphere[pool].find_vm(vm) host = $vsphere[pool].find_vm(vm)
if host if host
begin begin
Timeout.timeout(5) do open_socket vm, $config[:config]['domain'], timeout
TCPSocket.new vm, 22
end
move_pending_vm_to_ready(vm, pool, host) move_pending_vm_to_ready(vm, pool, host)
rescue rescue
fail_pending_vm(vm, pool, timeout) fail_pending_vm(vm, pool, timeout)
@ -395,7 +401,7 @@ module Vmpooler
def check_disk_queue def check_disk_queue
$logger.log('d', "[*] [disk_manager] starting worker thread") $logger.log('d', "[*] [disk_manager] starting worker thread")
$vsphere['disk_manager'] ||= Vmpooler::VsphereHelper.new $vsphere['disk_manager'] ||= Vmpooler::VsphereHelper.new $config[:vsphere]
$threads['disk_manager'] = Thread.new do $threads['disk_manager'] = Thread.new do
loop do loop do
@ -421,7 +427,7 @@ module Vmpooler
def check_snapshot_queue def check_snapshot_queue
$logger.log('d', "[*] [snapshot_manager] starting worker thread") $logger.log('d', "[*] [snapshot_manager] starting worker thread")
$vsphere['snapshot_manager'] ||= Vmpooler::VsphereHelper.new $vsphere['snapshot_manager'] ||= Vmpooler::VsphereHelper.new $config[:vsphere]
$threads['snapshot_manager'] = Thread.new do $threads['snapshot_manager'] = Thread.new do
loop do loop do
@ -459,7 +465,7 @@ module Vmpooler
$vsphere[pool].find_vm(vm) || $vsphere[pool].find_vm_heavy(vm)[vm] $vsphere[pool].find_vm(vm) || $vsphere[pool].find_vm_heavy(vm)[vm]
end end
def migration_enabled?(migration_limit) def migration_limit(migration_limit)
# Returns migration_limit setting when enabled # Returns migration_limit setting when enabled
return false if migration_limit == 0 or not migration_limit return false if migration_limit == 0 or not migration_limit
migration_limit if migration_limit >= 1 migration_limit if migration_limit >= 1
@ -476,7 +482,7 @@ module Vmpooler
vm_object = find_vsphere_pool_vm(pool, vm) vm_object = find_vsphere_pool_vm(pool, vm)
parent_host = vm_object.summary.runtime.host parent_host = vm_object.summary.runtime.host
parent_host_name = parent_host.name parent_host_name = parent_host.name
migration_limit = migration_enabled? $config[:config]['migration_limit'] migration_limit = migration_limit $config[:config]['migration_limit']
if not migration_limit if not migration_limit
$logger.log('s', "[ ] [#{pool}] '#{vm}' is running on #{parent_host_name}") $logger.log('s', "[ ] [#{pool}] '#{vm}' is running on #{parent_host_name}")
@ -507,7 +513,7 @@ module Vmpooler
def check_pool(pool) def check_pool(pool)
$logger.log('d', "[*] [#{pool['name']}] starting worker thread") $logger.log('d', "[*] [#{pool['name']}] starting worker thread")
$vsphere[pool['name']] ||= Vmpooler::VsphereHelper.new $vsphere[pool['name']] ||= Vmpooler::VsphereHelper.new $config[:vsphere]
$threads[pool['name']] = Thread.new do $threads[pool['name']] = Thread.new do
loop do loop do

View file

@ -6,14 +6,23 @@ module Vmpooler
DISK_TYPE = 'thin' DISK_TYPE = 'thin'
DISK_MODE = 'persistent' DISK_MODE = 'persistent'
def initialize(_vInfo = {}) def initialize(credentials)
config_file = File.expand_path('vmpooler.yaml') $credentials = credentials
vsphere = YAML.load_file(config_file)[:vsphere] end
@connection = RbVmomi::VIM.connect host: vsphere['server'], def ensure_connected(connection, credentials)
user: vsphere['username'], begin
password: vsphere['password'], connection.serviceInstance.CurrentTime
insecure: true rescue
connect_to_vsphere $credentials
end
end
def connect_to_vsphere(credentials)
@connection = RbVmomi::VIM.connect host: credentials['server'],
user: credentials['username'],
password: credentials['password'],
insecure: credentials['insecure'] || true
end end
def add_disk(vm, size, datastore) def add_disk(vm, size, datastore)
@ -211,14 +220,6 @@ module Vmpooler
(memory_usage.to_f / memory_size.to_f) * 100 (memory_usage.to_f / memory_size.to_f) * 100
end end
def ensure_connected(connection)
begin
connection.serviceInstance.CurrentTime
rescue
initialize
end
end
def find_least_used_host(cluster) def find_least_used_host(cluster)
ensure_connected @connection ensure_connected @connection