hybrid_platforms_conductor 32.4.0 → 32.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/bin/nodes_to_deploy +11 -5
  3. data/lib/hybrid_platforms_conductor/deployer.rb +9 -8
  4. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +147 -68
  5. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/platform_handler_plugin.rb.sample +1 -1
  6. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +1 -1
  7. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +1 -1
  8. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +1 -1
  9. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +1 -1
  10. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +1 -1
  11. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +1 -1
  12. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +1 -1
  13. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +1 -1
  14. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +6 -7
  15. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +7 -6
  16. data/lib/hybrid_platforms_conductor/nodes_handler.rb +45 -1
  17. data/lib/hybrid_platforms_conductor/services_handler.rb +9 -13
  18. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  19. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +35 -0
  20. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +57 -2
  21. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +68 -12
  22. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +1 -1
  23. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +47 -9
  24. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +28 -0
  25. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +71 -0
  26. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +10 -0
  27. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +25 -0
  28. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +1 -5
  29. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +37 -9
  30. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +14 -14
  31. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +70 -11
  32. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +1 -1
  33. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +2 -2
  34. metadata +12 -11
@@ -20,7 +20,7 @@ module HybridPlatformsConductorTest
20
20
  #
21
21
  # Parameters::
22
22
  # * *services* (Hash<String, Array<String> >): Expected nodes that should be deployed, with their corresponding services [default: { 'node' => %w[service] }]
23
- # * *sudo* (Boolean): Do we expect sudo to be used in commands? [default: true]
23
+ # * *sudo* (String or nil): sudo supposed to be used, or nil if none [default: 'sudo -u root']
24
24
  # * *check_mode* (Boolean): Are we testing in check mode? [default: @check_mode]
25
25
  # * *mocked_deploy_result* (Hash or nil): Mocked result of the deployment actions, or nil to use the helper's default [default: nil]
26
26
  # * *additional_expected_actions* (Array): Additional expected actions [default: []]
@@ -28,7 +28,7 @@ module HybridPlatformsConductorTest
28
28
  # * *expect_actions_timeout* (Integer or nil): Expected timeout in actions, or nil for none [default: nil]
29
29
  def expected_actions_for_deploy_on(
30
30
  services: { 'node' => %w[service] },
31
- sudo: true,
31
+ sudo: 'sudo -u root',
32
32
  check_mode: @check_mode,
33
33
  mocked_deploy_result: nil,
34
34
  additional_expected_actions: [],
@@ -82,7 +82,7 @@ module HybridPlatformsConductorTest
82
82
  # * *expect_prepare_for_deploy* (Boolean): Should we expect calls to prepare for deploy? [default: true]
83
83
  # * *expect_connections_to_nodes* (Boolean): Should we expect connections to nodes? [default: true]
84
84
  # * *expect_default_actions* (Boolean): Should we expect default actions? [default: true]
85
- # * *expect_sudo* (Boolean): Do we expect sudo to be used in commands? [default: true]
85
+ # * *expect_sudo* (String or nil): Expected sudo command, or nil if none [default: 'sudo -u root']
86
86
  # * *expect_secrets* (Hash): Secrets to be expected during deployment [default: {}]
87
87
  # * *expect_local_environment* (Boolean): Expected local environment flag [default: false]
88
88
  # * *expect_additional_actions* (Array): Additional expected actions [default: []]
@@ -99,7 +99,7 @@ module HybridPlatformsConductorTest
99
99
  expect_prepare_for_deploy: true,
100
100
  expect_connections_to_nodes: true,
101
101
  expect_default_actions: true,
102
- expect_sudo: true,
102
+ expect_sudo: 'sudo -u root',
103
103
  expect_secrets: {},
104
104
  expect_local_environment: false,
105
105
  expect_additional_actions: [],
@@ -201,12 +201,21 @@ module HybridPlatformsConductorTest
201
201
  end
202
202
 
203
203
  it 'deploys on 1 node using root' do
204
- with_platform_to_deploy(expect_sudo: false) do
204
+ with_platform_to_deploy(expect_sudo: nil) do
205
205
  test_actions_executor.connector(:ssh).ssh_user = 'root'
206
206
  expect(test_deployer.deploy_on('node')).to eq('node' => expected_deploy_result)
207
207
  end
208
208
  end
209
209
 
210
+ it 'deploys on 1 node using an alternate sudo' do
211
+ with_platform_to_deploy(
212
+ expect_sudo: 'other_sudo --user root',
213
+ additional_config: 'sudo_for { |user| "other_sudo --user #{user}" }'
214
+ ) do
215
+ expect(test_deployer.deploy_on('node')).to eq('node' => expected_deploy_result)
216
+ end
217
+ end
218
+
210
219
  it 'deploys on 1 node using 1 secret' do
211
220
  with_platform_to_deploy(expect_secrets: { 'secret1' => 'password1' }) do
212
221
  test_deployer.secrets = [{ 'secret1' => 'password1' }]
@@ -227,9 +236,9 @@ module HybridPlatformsConductorTest
227
236
  nodes_info: { nodes: { 'node' => { meta: { image: 'debian_9' }, services: %w[service] } } },
228
237
  expect_local_environment: true,
229
238
  expect_additional_actions: [
230
- { remote_bash: 'sudo apt update && sudo apt install -y ca-certificates' },
239
+ { remote_bash: 'sudo -u root apt update && sudo -u root apt install -y ca-certificates' },
231
240
  {
232
- remote_bash: 'sudo update-ca-certificates',
241
+ remote_bash: 'sudo -u root update-ca-certificates',
233
242
  scp: {
234
243
  certs_dir => '/usr/local/share/ca-certificates',
235
244
  :sudo => true
@@ -244,6 +253,31 @@ module HybridPlatformsConductorTest
244
253
  end
245
254
  end
246
255
 
256
+ it 'deploys on 1 node in local environment with certificates to install using hpc_certificates on Debian and an alternate sudo' do
257
+ with_certs_dir do |certs_dir|
258
+ with_platform_to_deploy(
259
+ nodes_info: { nodes: { 'node' => { meta: { image: 'debian_9' }, services: %w[service] } } },
260
+ expect_sudo: 'other_sudo --user root',
261
+ expect_local_environment: true,
262
+ expect_additional_actions: [
263
+ { remote_bash: 'other_sudo --user root apt update && other_sudo --user root apt install -y ca-certificates' },
264
+ {
265
+ remote_bash: 'other_sudo --user root update-ca-certificates',
266
+ scp: {
267
+ certs_dir => '/usr/local/share/ca-certificates',
268
+ :sudo => true
269
+ }
270
+ }
271
+ ],
272
+ additional_config: 'sudo_for { |user| "other_sudo --user #{user}" }'
273
+ ) do
274
+ ENV['hpc_certificates'] = certs_dir
275
+ test_deployer.local_environment = true
276
+ expect(test_deployer.deploy_on('node')).to eq('node' => expected_deploy_result)
277
+ end
278
+ end
279
+ end
280
+
247
281
  it 'deploys on 1 node with certificates to install using hpc_certificates on Debian but ignores them in non-local environment' do
248
282
  with_certs_dir do |certs_dir|
249
283
  with_platform_to_deploy(nodes_info: { nodes: { 'node' => { meta: { image: 'debian_9' }, services: %w[service] } } }) do
@@ -257,7 +291,7 @@ module HybridPlatformsConductorTest
257
291
  with_certs_dir do |certs_dir|
258
292
  with_platform_to_deploy(
259
293
  nodes_info: { nodes: { 'node' => { meta: { image: 'debian_9' }, services: %w[service] } } },
260
- expect_sudo: false,
294
+ expect_sudo: nil,
261
295
  expect_local_environment: true,
262
296
  expect_additional_actions: [
263
297
  { remote_bash: 'apt update && apt install -y ca-certificates' },
@@ -284,9 +318,9 @@ module HybridPlatformsConductorTest
284
318
  nodes_info: { nodes: { 'node' => { meta: { image: 'centos_7' }, services: %w[service] } } },
285
319
  expect_local_environment: true,
286
320
  expect_additional_actions: [
287
- { remote_bash: 'sudo yum install -y ca-certificates' },
321
+ { remote_bash: 'sudo -u root yum install -y ca-certificates' },
288
322
  {
289
- remote_bash: ['sudo update-ca-trust enable', 'sudo update-ca-trust extract'],
323
+ remote_bash: ['sudo -u root update-ca-trust enable', 'sudo -u root update-ca-trust extract'],
290
324
  scp: {
291
325
  "#{certs_dir}/test_cert.crt" => '/etc/pki/ca-trust/source/anchors',
292
326
  :sudo => true
@@ -301,11 +335,36 @@ module HybridPlatformsConductorTest
301
335
  end
302
336
  end
303
337
 
338
+ it 'deploys on 1 node with certificates to install using hpc_certificates on CentOS and an alternate sudo' do
339
+ with_certs_dir do |certs_dir|
340
+ with_platform_to_deploy(
341
+ nodes_info: { nodes: { 'node' => { meta: { image: 'centos_7' }, services: %w[service] } } },
342
+ expect_sudo: 'other_sudo --user root',
343
+ expect_local_environment: true,
344
+ expect_additional_actions: [
345
+ { remote_bash: 'other_sudo --user root yum install -y ca-certificates' },
346
+ {
347
+ remote_bash: ['other_sudo --user root update-ca-trust enable', 'other_sudo --user root update-ca-trust extract'],
348
+ scp: {
349
+ "#{certs_dir}/test_cert.crt" => '/etc/pki/ca-trust/source/anchors',
350
+ :sudo => true
351
+ }
352
+ }
353
+ ],
354
+ additional_config: 'sudo_for { |user| "other_sudo --user #{user}" }'
355
+ ) do
356
+ ENV['hpc_certificates'] = certs_dir
357
+ test_deployer.local_environment = true
358
+ expect(test_deployer.deploy_on('node')).to eq('node' => expected_deploy_result)
359
+ end
360
+ end
361
+ end
362
+
304
363
  it 'deploys on 1 node with certificates to install using hpc_certificates on CentOS using root' do
305
364
  with_certs_dir do |certs_dir|
306
365
  with_platform_to_deploy(
307
366
  nodes_info: { nodes: { 'node' => { meta: { image: 'centos_7' }, services: %w[service] } } },
308
- expect_sudo: false,
367
+ expect_sudo: nil,
309
368
  expect_local_environment: true,
310
369
  expect_additional_actions: [
311
370
  { remote_bash: 'yum install -y ca-certificates' },
@@ -58,7 +58,7 @@ module HybridPlatformsConductorTest
58
58
  #
59
59
  # Parameters::
60
60
  # * *content* (String): hpc_config.rb's content
61
- # * Proc: Code called with the platforms.rb file created.
61
+ # * Proc: Code called with the hpc_config.rb file created.
62
62
  # * Parameters::
63
63
  # * *hybrid_platforms_dir* (String): The hybrid-platforms directory
64
64
  def with_platforms(content)
@@ -330,7 +330,7 @@ module HybridPlatformsConductorTest
330
330
  expect(actions).to eq({
331
331
  'node' => {
332
332
  remote_bash: {
333
- commands: "#{expected_sudo ? 'sudo -E ' : ''}./proxmox/reserve_proxmox_container --create ./proxmox/create/create_#{expected_file_id}.json --config ./proxmox/config/config_#{expected_file_id}.json",
333
+ commands: "#{expected_sudo ? 'sudo -u root -E ' : ''}./proxmox/reserve_proxmox_container --create ./proxmox/create/create_#{expected_file_id}.json --config ./proxmox/config/config_#{expected_file_id}.json",
334
334
  env: {
335
335
  'hpc_user_for_proxmox' => proxmox_user,
336
336
  'hpc_password_for_proxmox' => proxmox_password,
@@ -382,7 +382,7 @@ module HybridPlatformsConductorTest
382
382
  expect(actions).to eq({
383
383
  'node' => {
384
384
  remote_bash: {
385
- commands: "#{expected_sudo ? 'sudo -E ' : ''}./proxmox/reserve_proxmox_container --destroy ./proxmox/destroy/destroy_#{expected_file_id}.json --config ./proxmox/config/config_#{expected_file_id}.json",
385
+ commands: "#{expected_sudo ? 'sudo -u root -E ' : ''}./proxmox/reserve_proxmox_container --destroy ./proxmox/destroy/destroy_#{expected_file_id}.json --config ./proxmox/config/config_#{expected_file_id}.json",
386
386
  env: {
387
387
  'hpc_user_for_proxmox' => proxmox_user,
388
388
  'hpc_password_for_proxmox' => proxmox_password,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hybrid_platforms_conductor
3
3
  version: !ruby/object:Gem::Version
4
- version: 32.4.0
4
+ version: 32.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muriel Salvan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-19 00:00:00.000000000 Z
11
+ date: 2021-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: range_operators
@@ -281,20 +281,20 @@ description: Provides a complete toolset to help DevOps maintain, deploy, monito
281
281
  email:
282
282
  - muriel@x-aeon.com
283
283
  executables:
284
- - test
285
284
  - topograph
286
- - dump_nodes_json
285
+ - test
287
286
  - free_veids
288
- - report
289
- - setup
290
- - deploy
287
+ - free_ips
288
+ - nodes_to_deploy
291
289
  - last_deploys
290
+ - check-node
291
+ - run
292
+ - report
292
293
  - get_impacted_nodes
293
294
  - ssh_config
294
- - run
295
- - nodes_to_deploy
296
- - check-node
297
- - free_ips
295
+ - deploy
296
+ - setup
297
+ - dump_nodes_json
298
298
  extensions: []
299
299
  extra_rdoc_files: []
300
300
  files:
@@ -463,6 +463,7 @@ files:
463
463
  - spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb
464
464
  - spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb
465
465
  - spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb
466
+ - spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb
466
467
  - spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb
467
468
  - spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb
468
469
  - spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb