vmpooler 0.18.0 → 0.18.1
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/lib/vmpooler.rb +9 -13
- data/lib/vmpooler/api/dashboard.rb +18 -20
- data/lib/vmpooler/api/helpers.rb +11 -13
- data/lib/vmpooler/api/v1.rb +55 -52
- data/lib/vmpooler/metrics/dummy_statsd.rb +0 -3
- data/lib/vmpooler/metrics/graphite.rb +2 -0
- data/lib/vmpooler/metrics/promstats.rb +2 -0
- data/lib/vmpooler/metrics/statsd.rb +5 -3
- data/lib/vmpooler/pool_manager.rb +48 -55
- data/lib/vmpooler/providers/dummy.rb +20 -38
- data/lib/vmpooler/providers/vsphere.rb +18 -27
- data/lib/vmpooler/version.rb +1 -1
- metadata +40 -34
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'vmpooler/providers/base'
|
4
|
+
require 'bigdecimal'
|
5
|
+
require 'bigdecimal/util'
|
4
6
|
|
5
7
|
module Vmpooler
|
6
8
|
class PoolManager
|
@@ -49,9 +51,7 @@ module Vmpooler
|
|
49
51
|
end
|
50
52
|
|
51
53
|
def folder_configured?(folder_title, base_folder, configured_folders, whitelist)
|
52
|
-
if whitelist
|
53
|
-
return true if whitelist.include?(folder_title)
|
54
|
-
end
|
54
|
+
return true if whitelist&.include?(folder_title)
|
55
55
|
return false unless configured_folders.keys.include?(folder_title)
|
56
56
|
return false unless configured_folders[folder_title] == base_folder
|
57
57
|
|
@@ -68,7 +68,7 @@ module Vmpooler
|
|
68
68
|
redis.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now)
|
69
69
|
|
70
70
|
# Auto-expire metadata key
|
71
|
-
redis.expire(
|
71
|
+
redis.expire("vmpooler__vm__#{vm_name}", (data_ttl * 60 * 60))
|
72
72
|
redis.exec
|
73
73
|
end
|
74
74
|
|
@@ -203,9 +203,7 @@ module Vmpooler
|
|
203
203
|
return
|
204
204
|
end
|
205
205
|
wait_for_host_selection(dc, target, loop_delay, max_age) if target[dc].key?('checking')
|
206
|
-
if target[dc].key?('check_time_finished')
|
207
|
-
select_target_hosts(target, cluster, datacenter) if now - target[dc]['check_time_finished'] > max_age
|
208
|
-
end
|
206
|
+
select_target_hosts(target, cluster, datacenter) if target[dc].key?('check_time_finished') && now - target[dc]['check_time_finished'] > max_age
|
209
207
|
end
|
210
208
|
|
211
209
|
def wait_for_host_selection(dc, target, maxloop = 0, loop_delay = 1, max_age = 60)
|
@@ -418,15 +416,15 @@ module Vmpooler
|
|
418
416
|
# Determine network device type
|
419
417
|
# All possible device type options here: https://vdc-download.vmware.com/vmwb-repository/dcr-public/98d63b35-d822-47fe-a87a-ddefd469df06/2e3c7b58-f2bd-486e-8bb1-a75eb0640bee/doc/vim.vm.device.VirtualEthernetCard.html
|
420
418
|
network_device =
|
421
|
-
if template_vm_network_device.
|
419
|
+
if template_vm_network_device.instance_of? RbVmomi::VIM::VirtualVmxnet2
|
422
420
|
RbVmomi::VIM.VirtualVmxnet2
|
423
|
-
elsif template_vm_network_device.
|
421
|
+
elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualVmxnet3
|
424
422
|
RbVmomi::VIM.VirtualVmxnet3
|
425
|
-
elsif template_vm_network_device.
|
423
|
+
elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualE1000
|
426
424
|
RbVmomi::VIM.VirtualE1000
|
427
|
-
elsif template_vm_network_device.
|
425
|
+
elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualE1000e
|
428
426
|
RbVmomi::VIM.VirtualE1000e
|
429
|
-
elsif template_vm_network_device.
|
427
|
+
elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualSriovEthernetCard
|
430
428
|
RbVmomi::VIM.VirtualSriovEthernetCard
|
431
429
|
else
|
432
430
|
RbVmomi::VIM.VirtualPCNet32
|
@@ -560,7 +558,7 @@ module Vmpooler
|
|
560
558
|
boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime
|
561
559
|
powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState
|
562
560
|
|
563
|
-
|
561
|
+
{
|
564
562
|
'name' => vm_object.name,
|
565
563
|
'hostname' => hostname,
|
566
564
|
'template' => pool_configuration['template'],
|
@@ -568,8 +566,6 @@ module Vmpooler
|
|
568
566
|
'boottime' => boottime,
|
569
567
|
'powerstate' => powerstate
|
570
568
|
}
|
571
|
-
|
572
|
-
hash
|
573
569
|
end
|
574
570
|
|
575
571
|
# vSphere helper methods
|
@@ -794,7 +790,7 @@ module Vmpooler
|
|
794
790
|
}
|
795
791
|
|
796
792
|
folder_object = connection.searchIndex.FindByInventoryPath(propSpecs) # rubocop:disable Naming/VariableName
|
797
|
-
return nil unless folder_object.
|
793
|
+
return nil unless folder_object.instance_of? RbVmomi::VIM::Folder
|
798
794
|
|
799
795
|
folder_object
|
800
796
|
end
|
@@ -810,9 +806,7 @@ module Vmpooler
|
|
810
806
|
# the cpu or memory utilization is bigger than the limit param
|
811
807
|
def get_host_utilization(host, model = nil, limit = 90)
|
812
808
|
limit = @config[:config]['utilization_limit'] if @config[:config].key?('utilization_limit')
|
813
|
-
if model
|
814
|
-
return nil unless host_has_cpu_model?(host, model)
|
815
|
-
end
|
809
|
+
return nil if model && !host_has_cpu_model?(host, model)
|
816
810
|
return nil if host.runtime.inMaintenanceMode
|
817
811
|
return nil unless host.overallStatus == 'green'
|
818
812
|
return nil unless host.configIssue.empty?
|
@@ -821,9 +815,9 @@ module Vmpooler
|
|
821
815
|
memory_utilization = memory_utilization_for host
|
822
816
|
|
823
817
|
return nil if cpu_utilization.nil?
|
824
|
-
return nil if cpu_utilization == 0.0
|
818
|
+
return nil if cpu_utilization.to_d == 0.0.to_d
|
825
819
|
return nil if memory_utilization.nil?
|
826
|
-
return nil if memory_utilization == 0.0
|
820
|
+
return nil if memory_utilization.to_d == 0.0.to_d
|
827
821
|
|
828
822
|
return nil if cpu_utilization > limit
|
829
823
|
return nil if memory_utilization > limit
|
@@ -838,8 +832,7 @@ module Vmpooler
|
|
838
832
|
def get_host_cpu_arch_version(host)
|
839
833
|
cpu_model = host.hardware.cpuPkg[0].description
|
840
834
|
cpu_model_parts = cpu_model.split
|
841
|
-
|
842
|
-
arch_version
|
835
|
+
cpu_model_parts[4]
|
843
836
|
end
|
844
837
|
|
845
838
|
def cpu_utilization_for(host)
|
@@ -931,8 +924,7 @@ module Vmpooler
|
|
931
924
|
target_hosts = get_cluster_host_utilization(cluster_object)
|
932
925
|
raise("There is no host candidate in vcenter that meets all the required conditions, check that the cluster has available hosts in a 'green' status, not in maintenance mode and not overloaded CPU and memory'") if target_hosts.empty?
|
933
926
|
|
934
|
-
|
935
|
-
least_used_host
|
927
|
+
target_hosts.min[1]
|
936
928
|
end
|
937
929
|
|
938
930
|
def find_cluster(cluster, connection, datacentername)
|
@@ -979,11 +971,10 @@ module Vmpooler
|
|
979
971
|
end
|
980
972
|
|
981
973
|
def build_propSpecs(datacenter, folder, vmname) # rubocop:disable Naming/MethodName
|
982
|
-
|
974
|
+
{
|
983
975
|
entity => self,
|
984
976
|
:inventoryPath => "#{datacenter}/vm/#{folder}/#{vmname}"
|
985
977
|
}
|
986
|
-
propSpecs # rubocop:disable Naming/VariableName
|
987
978
|
end
|
988
979
|
|
989
980
|
def find_vm(pool_name, vmname, connection)
|
data/lib/vmpooler/version.rb
CHANGED
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.18.
|
4
|
+
version: 0.18.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10
|
11
|
+
date: 2020-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -70,100 +70,100 @@ dependencies:
|
|
70
70
|
name: opentelemetry-api
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
75
|
+
version: 0.8.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
82
|
+
version: 0.8.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: opentelemetry-exporter-jaeger
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
89
|
+
version: 0.8.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
96
|
+
version: 0.8.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: opentelemetry-instrumentation-concurrent_ruby
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: 0.8.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.8.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: opentelemetry-instrumentation-redis
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.8.0
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.8.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: opentelemetry-instrumentation-sinatra
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.8.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.8.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: opentelemetry-resource_detectors
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.
|
145
|
+
version: 0.8.0
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
152
|
+
version: 0.8.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: opentelemetry-sdk
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - '='
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
159
|
+
version: 0.8.0
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - '='
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
166
|
+
version: 0.8.0
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: pickup
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,14 +198,20 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: '
|
201
|
+
version: '5.0'
|
202
|
+
- - ">="
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: 5.0.4
|
202
205
|
type: :runtime
|
203
206
|
prerelease: false
|
204
207
|
version_requirements: !ruby/object:Gem::Requirement
|
205
208
|
requirements:
|
206
209
|
- - "~>"
|
207
210
|
- !ruby/object:Gem::Version
|
208
|
-
version: '
|
211
|
+
version: '5.0'
|
212
|
+
- - ">="
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 5.0.4
|
209
215
|
- !ruby/object:Gem::Dependency
|
210
216
|
name: rack
|
211
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -384,14 +390,14 @@ dependencies:
|
|
384
390
|
name: rubocop
|
385
391
|
requirement: !ruby/object:Gem::Requirement
|
386
392
|
requirements:
|
387
|
-
- - "
|
393
|
+
- - "~>"
|
388
394
|
- !ruby/object:Gem::Version
|
389
395
|
version: '1.0'
|
390
396
|
type: :development
|
391
397
|
prerelease: false
|
392
398
|
version_requirements: !ruby/object:Gem::Requirement
|
393
399
|
requirements:
|
394
|
-
- - "
|
400
|
+
- - "~>"
|
395
401
|
- !ruby/object:Gem::Version
|
396
402
|
version: '1.0'
|
397
403
|
- !ruby/object:Gem::Dependency
|