vmpooler 0.10.3 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/vmpooler +2 -3
- data/lib/vmpooler/api/dashboard.rb +12 -5
- data/lib/vmpooler/api/helpers.rb +47 -42
- data/lib/vmpooler/api/reroute.rb +2 -0
- data/lib/vmpooler/api/v1.rb +49 -49
- data/lib/vmpooler/api.rb +2 -0
- data/lib/vmpooler/dashboard.rb +2 -1
- data/lib/vmpooler/dummy_statsd.rb +2 -0
- data/lib/vmpooler/generic_connection_pool.rb +8 -6
- data/lib/vmpooler/graphite.rb +5 -5
- data/lib/vmpooler/logger.rb +3 -1
- data/lib/vmpooler/pool_manager.rb +133 -120
- data/lib/vmpooler/providers/base.rb +5 -3
- data/lib/vmpooler/providers/dummy.rb +16 -12
- data/lib/vmpooler/providers/vsphere.rb +114 -95
- data/lib/vmpooler/providers.rb +13 -15
- data/lib/vmpooler/statsd.rb +9 -9
- data/lib/vmpooler/version.rb +3 -1
- data/lib/vmpooler.rb +20 -11
- metadata +2 -2
data/lib/vmpooler/providers.rb
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathname'
|
2
4
|
|
3
5
|
module Vmpooler
|
4
6
|
class Providers
|
5
|
-
|
6
7
|
# @param names [Array] - an array of names or string name of a provider
|
7
8
|
# @return [Array] - list of provider files loaded
|
8
9
|
# ie. ["lib/vmpooler/providers/base.rb", "lib/vmpooler/providers/dummy.rb", "lib/vmpooler/providers/vsphere.rb"]
|
9
10
|
def self.load_by_name(names)
|
10
11
|
names = Array(names)
|
11
|
-
instance =
|
12
|
-
names.map {|name| instance.load_from_gems(name)}.flatten
|
12
|
+
instance = new
|
13
|
+
names.map { |name| instance.load_from_gems(name) }.flatten
|
13
14
|
end
|
14
15
|
|
15
16
|
# @return [Array] - array of provider files
|
16
17
|
# ie. ["lib/vmpooler/providers/base.rb", "lib/vmpooler/providers/dummy.rb", "lib/vmpooler/providers/vsphere.rb"]
|
17
18
|
# although these files can come from any gem
|
18
19
|
def self.load_all_providers
|
19
|
-
|
20
|
+
new.load_from_gems
|
20
21
|
end
|
21
22
|
|
22
23
|
# @return [Array] - returns an array of gem names that contain a provider
|
23
24
|
def self.installed_providers
|
24
|
-
|
25
|
+
new.vmpooler_provider_gem_list.map(&:name)
|
25
26
|
end
|
26
27
|
|
27
28
|
# @return [Array] returns a list of vmpooler providers gem plugin specs
|
@@ -38,7 +39,7 @@ module Vmpooler
|
|
38
39
|
# we don't exactly know if the provider name matches the main file name that should be loaded
|
39
40
|
# so we use globs to get everything like the name
|
40
41
|
# this could mean that vsphere5 and vsphere6 are loaded when only vsphere5 is used
|
41
|
-
Dir.glob(File.join(gem_path, "*#{name}*.rb")).each do |file|
|
42
|
+
Dir.glob(File.join(gem_path, "*#{name}*.rb")).sort.each do |file|
|
42
43
|
require file
|
43
44
|
end
|
44
45
|
end
|
@@ -50,7 +51,7 @@ module Vmpooler
|
|
50
51
|
# @return [String] - the relative path to the vmpooler provider dir
|
51
52
|
# this is used when searching gems for this path
|
52
53
|
def provider_path
|
53
|
-
File.join('lib','vmpooler','providers')
|
54
|
+
File.join('lib', 'vmpooler', 'providers')
|
54
55
|
end
|
55
56
|
|
56
57
|
# Add constants to array to skip over classes, ie. Vmpooler::PoolManager::Provider::Dummy
|
@@ -81,26 +82,24 @@ module Vmpooler
|
|
81
82
|
@plugin_map ||= Hash[plugin_classes.map { |gem| [gem.send(:name), gem] }]
|
82
83
|
end
|
83
84
|
|
84
|
-
|
85
|
-
|
86
85
|
# Internal: Retrieve a list of available gem paths from RubyGems.
|
87
86
|
#
|
88
87
|
# Returns an Array of Pathname objects.
|
89
88
|
def gem_directories
|
90
89
|
dirs = []
|
91
|
-
if
|
90
|
+
if rubygems?
|
92
91
|
dirs = gemspecs.map do |spec|
|
93
|
-
lib_path = File.expand_path(File.join(spec.full_gem_path,provider_path))
|
94
|
-
lib_path if File.
|
92
|
+
lib_path = File.expand_path(File.join(spec.full_gem_path, provider_path))
|
93
|
+
lib_path if File.exist? lib_path
|
95
94
|
end + included_lib_dirs
|
96
95
|
end
|
97
|
-
dirs.reject
|
96
|
+
dirs.reject(&:nil?).uniq
|
98
97
|
end
|
99
98
|
|
100
99
|
# Internal: Check if RubyGems is loaded and available.
|
101
100
|
#
|
102
101
|
# Returns true if RubyGems is available, false if not.
|
103
|
-
def
|
102
|
+
def rubygems?
|
104
103
|
defined? ::Gem
|
105
104
|
end
|
106
105
|
|
@@ -114,6 +113,5 @@ module Vmpooler
|
|
114
113
|
Gem.searcher.init_gemspecs
|
115
114
|
end
|
116
115
|
end
|
117
|
-
|
118
116
|
end
|
119
117
|
end
|
data/lib/vmpooler/statsd.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rubygems' unless defined?(Gem)
|
2
4
|
require 'statsd'
|
3
5
|
|
@@ -6,9 +8,7 @@ module Vmpooler
|
|
6
8
|
attr_reader :server, :port, :prefix
|
7
9
|
|
8
10
|
def initialize(params = {})
|
9
|
-
if params['server'].nil? || params['server'].empty?
|
10
|
-
raise ArgumentError, "Statsd server is required. Config: #{params.inspect}"
|
11
|
-
end
|
11
|
+
raise ArgumentError, "Statsd server is required. Config: #{params.inspect}" if params['server'].nil? || params['server'].empty?
|
12
12
|
|
13
13
|
host = params['server']
|
14
14
|
@port = params['port'] || 8125
|
@@ -18,20 +18,20 @@ module Vmpooler
|
|
18
18
|
|
19
19
|
def increment(label)
|
20
20
|
server.increment(prefix + '.' + label)
|
21
|
-
rescue =>
|
22
|
-
|
21
|
+
rescue StandardError => e
|
22
|
+
warn "Failure incrementing #{prefix}.#{label} on statsd server [#{server}:#{port}]: #{e}"
|
23
23
|
end
|
24
24
|
|
25
25
|
def gauge(label, value)
|
26
26
|
server.gauge(prefix + '.' + label, value)
|
27
|
-
rescue =>
|
28
|
-
|
27
|
+
rescue StandardError => e
|
28
|
+
warn "Failure updating gauge #{prefix}.#{label} on statsd server [#{server}:#{port}]: #{e}"
|
29
29
|
end
|
30
30
|
|
31
31
|
def timing(label, duration)
|
32
32
|
server.timing(prefix + '.' + label, duration)
|
33
|
-
rescue =>
|
34
|
-
|
33
|
+
rescue StandardError => e
|
34
|
+
warn "Failure updating timing #{prefix}.#{label} on statsd server [#{server}:#{port}]: #{e}"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/lib/vmpooler/version.rb
CHANGED
data/lib/vmpooler.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Vmpooler
|
2
4
|
require 'date'
|
3
5
|
require 'json'
|
@@ -27,13 +29,21 @@ module Vmpooler
|
|
27
29
|
# Take the name of the config file either from an ENV variable or from the filepath argument
|
28
30
|
config_file = ENV['VMPOOLER_CONFIG_FILE'] || filepath
|
29
31
|
parsed_config = YAML.load_file(config_file) if File.exist? config_file
|
32
|
+
parsed_config[:config]['extra_config'] = ENV['EXTRA_CONFIG'] if ENV['EXTRA_CONFIG']
|
33
|
+
if parsed_config[:config]['extra_config']
|
34
|
+
extra_configs = parsed_config[:config]['extra_config'].split(',')
|
35
|
+
extra_configs.each do |config|
|
36
|
+
extra_config = YAML.load_file(config)
|
37
|
+
parsed_config.merge!(extra_config)
|
38
|
+
end
|
39
|
+
end
|
30
40
|
end
|
31
41
|
|
32
42
|
parsed_config ||= { config: {} }
|
33
43
|
|
34
44
|
# Bail out if someone attempts to start vmpooler with dummy authentication
|
35
45
|
# without enbaling debug mode.
|
36
|
-
if parsed_config.
|
46
|
+
if parsed_config.key? :auth
|
37
47
|
if parsed_config[:auth]['provider'] == 'dummy'
|
38
48
|
unless ENV['VMPOOLER_DEBUG']
|
39
49
|
warning = [
|
@@ -50,7 +60,7 @@ module Vmpooler
|
|
50
60
|
parsed_config[:config]['task_limit'] = string_to_int(ENV['TASK_LIMIT']) || parsed_config[:config]['task_limit'] || 10
|
51
61
|
parsed_config[:config]['migration_limit'] = string_to_int(ENV['MIGRATION_LIMIT']) if ENV['MIGRATION_LIMIT']
|
52
62
|
parsed_config[:config]['vm_checktime'] = string_to_int(ENV['VM_CHECKTIME']) || parsed_config[:config]['vm_checktime'] || 1
|
53
|
-
parsed_config[:config]['vm_lifetime'] = string_to_int(ENV['VM_LIFETIME']) || parsed_config[:config]['vm_lifetime']
|
63
|
+
parsed_config[:config]['vm_lifetime'] = string_to_int(ENV['VM_LIFETIME']) || parsed_config[:config]['vm_lifetime'] || 24
|
54
64
|
parsed_config[:config]['prefix'] = ENV['PREFIX'] || parsed_config[:config]['prefix'] || ''
|
55
65
|
|
56
66
|
parsed_config[:config]['logfile'] = ENV['LOGFILE'] if ENV['LOGFILE']
|
@@ -86,7 +96,7 @@ module Vmpooler
|
|
86
96
|
parsed_config[:graphite]['port'] = string_to_int(ENV['GRAPHITE_PORT']) if ENV['GRAPHITE_PORT']
|
87
97
|
|
88
98
|
parsed_config[:auth] = parsed_config[:auth] || {} if ENV['AUTH_PROVIDER']
|
89
|
-
if parsed_config.
|
99
|
+
if parsed_config.key? :auth
|
90
100
|
parsed_config[:auth]['provider'] = ENV['AUTH_PROVIDER'] if ENV['AUTH_PROVIDER']
|
91
101
|
parsed_config[:auth][:ldap] = parsed_config[:auth][:ldap] || {} if parsed_config[:auth]['provider'] == 'ldap'
|
92
102
|
parsed_config[:auth][:ldap]['host'] = ENV['LDAP_HOST'] if ENV['LDAP_HOST']
|
@@ -122,10 +132,8 @@ module Vmpooler
|
|
122
132
|
end
|
123
133
|
end
|
124
134
|
|
125
|
-
|
126
|
-
parsed_config[:tagfilter]
|
127
|
-
parsed_config[:tagfilter][tag] = Regexp.new(parsed_config[:tagfilter][tag])
|
128
|
-
end
|
135
|
+
parsed_config[:tagfilter]&.keys&.each do |tag|
|
136
|
+
parsed_config[:tagfilter][tag] = Regexp.new(parsed_config[:tagfilter][tag])
|
129
137
|
end
|
130
138
|
|
131
139
|
parsed_config[:uptime] = Time.now
|
@@ -171,7 +179,7 @@ module Vmpooler
|
|
171
179
|
def self.pool_index(pools)
|
172
180
|
pools_hash = {}
|
173
181
|
index = 0
|
174
|
-
|
182
|
+
pools.each do |pool|
|
175
183
|
pools_hash[pool['name']] = index
|
176
184
|
index += 1
|
177
185
|
end
|
@@ -182,14 +190,15 @@ module Vmpooler
|
|
182
190
|
# Returns a integer if input is a string
|
183
191
|
return if s.nil?
|
184
192
|
return unless s =~ /\d/
|
185
|
-
|
193
|
+
|
194
|
+
Integer(s)
|
186
195
|
end
|
187
196
|
|
188
197
|
def self.true?(obj)
|
189
|
-
obj.to_s.downcase ==
|
198
|
+
obj.to_s.downcase == 'true'
|
190
199
|
end
|
191
200
|
|
192
|
-
def self.set_linked_clone(parsed_config)
|
201
|
+
def self.set_linked_clone(parsed_config) # rubocop:disable Naming/AccessorMethodName
|
193
202
|
parsed_config[:config]['create_linked_clones'] = parsed_config[:config]['create_linked_clones'] || true
|
194
203
|
parsed_config[:config]['create_linked_clones'] = ENV['CREATE_LINKED_CLONES'] if ENV['CREATE_LINKED_CLONES'] =~ /true|false/
|
195
204
|
parsed_config[:config]['create_linked_clones'] = true?(parsed_config[:config]['create_linked_clones']) if parsed_config[:config]['create_linked_clones']
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmpooler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pickup
|