vmpooler 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 277212a5ca26187ed46a4e6d0ef0716511a3b63097deab1485908c95bb437c5e
4
- data.tar.gz: 36272bc0744f943d88ca3eb0a33a070268f2a0fa45e130a7ee8abb04d4d0243e
3
+ metadata.gz: da4a010ab09d34f4fbfa9993526ad18dec205dfbc72f427a250304b2147bdf31
4
+ data.tar.gz: 61193bec61a1385754487f107e601c1fc76959ae81fc27a47d4f11a881553e91
5
5
  SHA512:
6
- metadata.gz: 8bb11603444163deb47713be137b1da3234096c60c59cbedda58b35d5dafeef80a2f6f733ccd1c1d0eb4db39959f189183937a712139346ccd673a8d1ea7f8d0
7
- data.tar.gz: 4502d6509ac75fc693ca24c9defdb401fc00aff14f3cba2d39143786efe3b0aef6eed0bc3ab6a1adb9cdd925684aa39f8e84c999dbbdd88d121efc052ba6fd84
6
+ metadata.gz: 13399e493bcaaf5c18541c2125366bb88325936746b715550c6e438d31de77eed9b0f42d9e6140c7529eb0dbd27e4335529f368e6b190c1d047f0cd2710f801e
7
+ data.tar.gz: 0f8551abcbb4cfbaf7bbf60d52f6630ce8334fff620ef1e05bad35e53fb7448c69da074494f8df5efa97053ad6b1e3dd2e55c942e97b359156b0ec07b26de912
@@ -56,14 +56,11 @@ module Vmpooler
56
56
  return false
57
57
  end
58
58
 
59
- def authenticate_ldap(port, host, user_object, base, username_str, password_str)
59
+ def authenticate_ldap(port, host, encryption_hash, user_object, base, username_str, password_str)
60
60
  ldap = Net::LDAP.new(
61
61
  :host => host,
62
62
  :port => port,
63
- :encryption => {
64
- :method => :start_tls,
65
- :tls_options => { :ssl_version => 'TLSv1' }
66
- },
63
+ :encryption => encryption_hash,
67
64
  :base => base,
68
65
  :auth => {
69
66
  :method => :simple,
@@ -86,6 +83,10 @@ module Vmpooler
86
83
  ldap_port = auth[:ldap]['port'] || 389
87
84
  ldap_user_obj = auth[:ldap]['user_object']
88
85
  ldap_host = auth[:ldap]['host']
86
+ ldap_encryption_hash = auth[:ldap]['encryption'] || {
87
+ :method => :start_tls,
88
+ :tls_options => { :ssl_version => 'TLSv1' }
89
+ }
89
90
 
90
91
  unless ldap_base.is_a? Array
91
92
  ldap_base = ldap_base.split
@@ -100,6 +101,7 @@ module Vmpooler
100
101
  result = authenticate_ldap(
101
102
  ldap_port,
102
103
  ldap_host,
104
+ ldap_encryption_hash,
103
105
  search_user_obj,
104
106
  search_base,
105
107
  username_str,
@@ -210,6 +210,7 @@ module Vmpooler
210
210
  account_for_starting_vm(vmpool, vmname)
211
211
  vms << [vmpool, vmname, vmtemplate]
212
212
  metrics.increment("checkout.success.#{vmpool}")
213
+ update_user_metrics('allocate', vmname) if Vmpooler::API.settings.config[:config]['usage_stats']
213
214
  else
214
215
  failed = true
215
216
  metrics.increment("checkout.empty.#{requested}")
@@ -235,6 +236,59 @@ module Vmpooler
235
236
  result
236
237
  end
237
238
 
239
+ def component_to_test(match, labels_string)
240
+ return if labels_string.nil?
241
+
242
+ labels_string_parts = labels_string.split(',')
243
+ labels_string_parts.each do |part|
244
+ key, value = part.split('=')
245
+ next if value.nil?
246
+ return value if key == match
247
+ end
248
+ 'none'
249
+ end
250
+
251
+ def update_user_metrics(operation, vmname)
252
+ backend.multi
253
+ backend.hget("vmpooler__vm__#{vmname}", 'tag:jenkins_build_url')
254
+ backend.hget("vmpooler__vm__#{vmname}", 'token:user')
255
+ backend.hget("vmpooler__vm__#{vmname}", 'template')
256
+ jenkins_build_url, user, poolname = backend.exec
257
+ poolname = poolname.gsub('.', '_')
258
+
259
+ if user
260
+ user = user.gsub('.', '_')
261
+ else
262
+ user = 'unauthenticated'
263
+ end
264
+ metrics.increment("user.#{user}.#{operation}.#{poolname}")
265
+
266
+ if jenkins_build_url
267
+ if jenkins_build_url.include? 'litmus'
268
+ # Very simple filter for Litmus jobs - just count them coming through for the moment.
269
+ metrics.increment("usage_litmus.#{user}.#{operation}.#{poolname}")
270
+ return
271
+ end
272
+
273
+ url_parts = jenkins_build_url.split('/')[2..-1]
274
+ jenkins_instance = url_parts[0].gsub('.', '_')
275
+ value_stream_parts = url_parts[2].split('_')
276
+ value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') }
277
+ value_stream = value_stream_parts.shift
278
+ branch = value_stream_parts.pop
279
+ project = value_stream_parts.shift
280
+ job_name = value_stream_parts.join('_')
281
+ build_metadata_parts = url_parts[3]
282
+ component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
283
+
284
+ metrics.increment("usage_jenkins_instance.#{jenkins_instance}.#{value_stream}.#{operation}.#{poolname}")
285
+ metrics.increment("usage_branch_project.#{branch}.#{project}.#{operation}.#{poolname}")
286
+ metrics.increment("usage_job_component.#{job_name}.#{component_to_test}.#{operation}.#{poolname}")
287
+ end
288
+ rescue StandardError => e
289
+ puts 'd', "[!] [#{poolname}] failed while evaluating usage labels on '#{vmname}' with an error: #{e}"
290
+ end
291
+
238
292
  def update_pool_size(payload)
239
293
  result = { 'ok' => false }
240
294
 
@@ -1169,6 +1223,7 @@ module Vmpooler
1169
1223
  status 200
1170
1224
  result['ok'] = true
1171
1225
  metrics.increment('delete.success')
1226
+ update_user_metrics('destroy', params[:hostname]) if Vmpooler::API.settings.config[:config]['usage_stats']
1172
1227
  else
1173
1228
  metrics.increment('delete.failed')
1174
1229
  end
@@ -165,33 +165,33 @@ module Vmpooler
165
165
  },
166
166
  user: {
167
167
  mtype: M_COUNTER,
168
- torun: %i[manager],
169
- docstring: 'Number of pool instances this user created created',
170
- param_labels: %i[user poolname]
168
+ torun: %i[api],
169
+ docstring: 'Number of pool instances and the operation performed by a user',
170
+ param_labels: %i[user operation poolname]
171
171
  },
172
172
  usage_litmus: {
173
173
  mtype: M_COUNTER,
174
- torun: %i[manager],
175
- docstring: 'Pools by Litmus job usage',
176
- param_labels: %i[user poolname]
174
+ torun: %i[api],
175
+ docstring: 'Number of pool instances and the operation performed by Litmus jobs',
176
+ param_labels: %i[user operation poolname]
177
177
  },
178
178
  usage_jenkins_instance: {
179
179
  mtype: M_COUNTER,
180
- torun: %i[manager],
181
- docstring: 'Pools by Jenkins instance usage',
182
- param_labels: %i[jenkins_instance value_stream poolname]
180
+ torun: %i[api],
181
+ docstring: 'Number of pool instances and the operation performed by Jenkins instances',
182
+ param_labels: %i[jenkins_instance value_stream operation poolname]
183
183
  },
184
184
  usage_branch_project: {
185
185
  mtype: M_COUNTER,
186
- torun: %i[manager],
187
- docstring: 'Pools by branch/project usage',
188
- param_labels: %i[branch project poolname]
186
+ torun: %i[api],
187
+ docstring: 'Number of pool instances and the operation performed by Jenkins branch/project',
188
+ param_labels: %i[branch project operation poolname]
189
189
  },
190
190
  usage_job_component: {
191
191
  mtype: M_COUNTER,
192
- torun: %i[manager],
193
- docstring: 'Pools by job/component usage',
194
- param_labels: %i[job_name component_to_test poolname]
192
+ torun: %i[api],
193
+ docstring: 'Number of pool instances and the operation performed by Jenkins job/component',
194
+ param_labels: %i[job_name component_to_test operation poolname]
195
195
  },
196
196
  checkout: {
197
197
  mtype: M_COUNTER,
@@ -473,66 +473,11 @@ module Vmpooler
473
473
  finish = format('%<time>.2f', time: Time.now - start)
474
474
  $logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds")
475
475
  $metrics.timing("destroy.#{pool}", finish)
476
- get_vm_usage_labels(vm, redis)
477
476
  end
478
477
  end
479
478
  dereference_mutex(vm)
480
479
  end
481
480
 
482
- def get_vm_usage_labels(vm, redis)
483
- return unless $config[:config]['usage_stats']
484
-
485
- redis.multi
486
- redis.hget("vmpooler__vm__#{vm}", 'checkout')
487
- redis.hget("vmpooler__vm__#{vm}", 'tag:jenkins_build_url')
488
- redis.hget("vmpooler__vm__#{vm}", 'token:user')
489
- redis.hget("vmpooler__vm__#{vm}", 'template')
490
- checkout, jenkins_build_url, user, poolname = redis.exec
491
- return if checkout.nil?
492
-
493
- user ||= 'unauthenticated'
494
- user = user.gsub('.', '_')
495
- $metrics.increment("user.#{user}.#{poolname}")
496
-
497
- return unless jenkins_build_url
498
-
499
- if jenkins_build_url.include? 'litmus'
500
- # Very simple filter for Litmus jobs - just count them coming through for the moment.
501
- $metrics.increment("usage_litmus.#{user}.#{poolname}")
502
- return
503
- end
504
-
505
- url_parts = jenkins_build_url.split('/')[2..-1]
506
- jenkins_instance = url_parts[0].gsub('.', '_')
507
- value_stream_parts = url_parts[2].split('_')
508
- value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') }
509
- value_stream = value_stream_parts.shift
510
- branch = value_stream_parts.pop
511
- project = value_stream_parts.shift
512
- job_name = value_stream_parts.join('_')
513
- build_metadata_parts = url_parts[3]
514
- component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
515
-
516
- $metrics.increment("usage_jenkins_instance.#{jenkins_instance}.#{value_stream}.#{poolname}")
517
- $metrics.increment("usage_branch_project.#{branch}.#{project}.#{poolname}")
518
- $metrics.increment("usage_job_component.#{job_name}.#{component_to_test}.#{poolname}")
519
- rescue StandardError => e
520
- $logger.log('d', "[!] [#{poolname}] failed while evaluating usage labels on '#{vm}' with an error: #{e}")
521
- raise
522
- end
523
-
524
- def component_to_test(match, labels_string)
525
- return if labels_string.nil?
526
-
527
- labels_string_parts = labels_string.split(',')
528
- labels_string_parts.each do |part|
529
- key, value = part.split('=')
530
- next if value.nil?
531
- return value if key == match
532
- end
533
- 'none'
534
- end
535
-
536
481
  def purge_unused_vms_and_folders
537
482
  global_purge = $config[:config]['purge_unconfigured_folders']
538
483
  providers = $config[:providers].keys
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vmpooler
4
- VERSION = '1.0.0'
4
+ VERSION = '1.2.0'
5
5
  end
data/lib/vmpooler.rb CHANGED
@@ -119,6 +119,11 @@ module Vmpooler
119
119
  parsed_config[:auth][:ldap]['port'] = string_to_int(ENV['LDAP_PORT']) if ENV['LDAP_PORT']
120
120
  parsed_config[:auth][:ldap]['base'] = ENV['LDAP_BASE'] if ENV['LDAP_BASE']
121
121
  parsed_config[:auth][:ldap]['user_object'] = ENV['LDAP_USER_OBJECT'] if ENV['LDAP_USER_OBJECT']
122
+ if parsed_config[:auth]['provider'] == 'ldap' && parsed_config[:auth][:ldap].key?('encryption')
123
+ parsed_config[:auth][:ldap]['encryption'] = parsed_config[:auth][:ldap]['encryption']
124
+ elsif parsed_config[:auth]['provider'] == 'ldap'
125
+ parsed_config[:auth][:ldap]['encryption'] = {}
126
+ end
122
127
  end
123
128
 
124
129
  # Create an index of pool aliases
@@ -236,12 +241,12 @@ module Vmpooler
236
241
  if tracing_enabled.eql?('false')
237
242
  puts "Exporting of traces has been disabled so the span processor has been se to a 'NoopSpanExporter'"
238
243
  span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
239
- exporter: OpenTelemetry::SDK::Trace::Export::NoopSpanExporter.new
244
+ OpenTelemetry::SDK::Trace::Export::NoopSpanExporter.new
240
245
  )
241
246
  else
242
247
  puts "Exporting of traces will be done over HTTP in binary Thrift format to #{tracing_jaeger_host}"
243
248
  span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
244
- exporter: OpenTelemetry::Exporter::Jaeger::CollectorExporter.new(endpoint: tracing_jaeger_host)
249
+ OpenTelemetry::Exporter::Jaeger::CollectorExporter.new(endpoint: tracing_jaeger_host)
245
250
  )
246
251
  end
247
252
 
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: 1.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-02 00:00:00.000000000 Z
11
+ date: 2021-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -72,84 +72,84 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 0.13.0
75
+ version: 0.17.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.13.0
82
+ version: 0.17.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: opentelemetry-instrumentation-concurrent_ruby
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.13.0
89
+ version: 0.17.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.13.0
96
+ version: 0.17.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: opentelemetry-instrumentation-redis
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.13.0
103
+ version: 0.17.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.13.0
110
+ version: 0.17.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: opentelemetry-instrumentation-sinatra
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.13.0
117
+ version: 0.17.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.13.0
124
+ version: 0.17.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: opentelemetry-resource_detectors
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 0.13.0
131
+ version: 0.17.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.13.0
138
+ version: 0.17.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: opentelemetry-sdk
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 0.13.1
145
+ version: 0.17.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.13.1
152
+ version: 0.17.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: pickup
155
155
  requirement: !ruby/object:Gem::Requirement