vmpooler 0.10.3 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|