foreman_ansible 5.0.0 → 5.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/ansible_inventories_controller.rb +9 -4
  3. data/app/models/foreman_ansible/ansible_provider.rb +8 -0
  4. data/app/models/setting/ansible.rb +1 -1
  5. data/app/services/foreman_ansible/ansible_info.rb +1 -1
  6. data/app/services/foreman_ansible/operating_system_parser.rb +1 -1
  7. data/app/services/foreman_ansible/variables_importer.rb +8 -9
  8. data/app/views/ansible_variables/_fields.erb +1 -1
  9. data/app/views/foreman_ansible/job_templates/ansible_roles_-_ansible_default.erb +7 -4
  10. data/app/views/foreman_ansible/job_templates/capsule_upgrade_-_ansible_default.erb +74 -0
  11. data/app/views/foreman_ansible/job_templates/configure_cloud_connector_-_ansible_default.erb +36 -0
  12. data/app/views/foreman_ansible/job_templates/power_action_-_ansible_default.erb +1 -1
  13. data/app/views/foreman_ansible/job_templates/puppet_run_once_-_ansible_default.erb +5 -1
  14. data/app/views/foreman_ansible/job_templates/service_action_-_enable_web_console.erb +16 -0
  15. data/config/routes.rb +1 -1
  16. data/db/migrate/20200421201839_update_ansible_inv_template_name.rb +9 -0
  17. data/db/seeds.d/75_job_templates.rb +1 -1
  18. data/lib/foreman_ansible/engine.rb +22 -25
  19. data/lib/foreman_ansible/remote_execution.rb +11 -0
  20. data/lib/foreman_ansible/version.rb +1 -1
  21. data/locale/action_names.rb +3 -3
  22. data/locale/ca/LC_MESSAGES/foreman_ansible.mo +0 -0
  23. data/locale/ca/foreman_ansible.po +556 -0
  24. data/locale/cs_CZ/LC_MESSAGES/foreman_ansible.mo +0 -0
  25. data/locale/cs_CZ/foreman_ansible.po +556 -0
  26. data/locale/de/LC_MESSAGES/foreman_ansible.mo +0 -0
  27. data/locale/de/foreman_ansible.po +38 -33
  28. data/locale/en/LC_MESSAGES/foreman_ansible.mo +0 -0
  29. data/locale/en/foreman_ansible.po +38 -33
  30. data/locale/en_GB/LC_MESSAGES/foreman_ansible.mo +0 -0
  31. data/locale/en_GB/foreman_ansible.po +555 -0
  32. data/locale/es/LC_MESSAGES/foreman_ansible.mo +0 -0
  33. data/locale/es/foreman_ansible.po +38 -33
  34. data/locale/foreman_ansible.pot +96 -88
  35. data/locale/fr/LC_MESSAGES/foreman_ansible.mo +0 -0
  36. data/locale/fr/foreman_ansible.po +38 -33
  37. data/locale/gl/LC_MESSAGES/foreman_ansible.mo +0 -0
  38. data/locale/gl/foreman_ansible.po +553 -0
  39. data/locale/it/LC_MESSAGES/foreman_ansible.mo +0 -0
  40. data/locale/it/foreman_ansible.po +38 -33
  41. data/locale/ja/LC_MESSAGES/foreman_ansible.mo +0 -0
  42. data/locale/ja/foreman_ansible.po +38 -33
  43. data/locale/ko/LC_MESSAGES/foreman_ansible.mo +0 -0
  44. data/locale/ko/foreman_ansible.po +38 -33
  45. data/locale/nl_NL/LC_MESSAGES/foreman_ansible.mo +0 -0
  46. data/locale/nl_NL/foreman_ansible.po +559 -0
  47. data/locale/pl/LC_MESSAGES/foreman_ansible.mo +0 -0
  48. data/locale/pl/foreman_ansible.po +556 -0
  49. data/locale/pt_BR/LC_MESSAGES/foreman_ansible.mo +0 -0
  50. data/locale/pt_BR/foreman_ansible.po +38 -33
  51. data/locale/ru/LC_MESSAGES/foreman_ansible.mo +0 -0
  52. data/locale/ru/foreman_ansible.po +38 -33
  53. data/locale/sv_SE/LC_MESSAGES/foreman_ansible.mo +0 -0
  54. data/locale/sv_SE/foreman_ansible.po +556 -0
  55. data/locale/zh_CN/LC_MESSAGES/foreman_ansible.mo +0 -0
  56. data/locale/zh_CN/foreman_ansible.po +38 -33
  57. data/locale/zh_TW/LC_MESSAGES/foreman_ansible.mo +0 -0
  58. data/locale/zh_TW/foreman_ansible.po +38 -33
  59. data/test/factories/ansible_variables.rb +5 -0
  60. data/test/unit/services/ansible_variables_importer_test.rb +68 -43
  61. data/test/unit/services/inventory_creator_test.rb +0 -2
  62. metadata +55 -59
  63. data/locale/de/foreman_ansible.edit.po +0 -825
  64. data/locale/de/foreman_ansible.po.time_stamp +0 -0
  65. data/locale/en/foreman_ansible.edit.po +0 -714
  66. data/locale/en/foreman_ansible.po.time_stamp +0 -0
  67. data/locale/es/foreman_ansible.edit.po +0 -845
  68. data/locale/es/foreman_ansible.po.time_stamp +0 -0
  69. data/locale/fr/foreman_ansible.edit.po +0 -847
  70. data/locale/fr/foreman_ansible.po.time_stamp +0 -0
  71. data/locale/it/foreman_ansible.edit.po +0 -818
  72. data/locale/it/foreman_ansible.po.time_stamp +0 -0
  73. data/locale/ja/foreman_ansible.edit.po +0 -818
  74. data/locale/ja/foreman_ansible.po.time_stamp +0 -0
  75. data/locale/ko/foreman_ansible.edit.po +0 -804
  76. data/locale/ko/foreman_ansible.po.time_stamp +0 -0
  77. data/locale/pt_BR/foreman_ansible.edit.po +0 -845
  78. data/locale/pt_BR/foreman_ansible.po.time_stamp +0 -0
  79. data/locale/ru/foreman_ansible.edit.po +0 -819
  80. data/locale/ru/foreman_ansible.po.time_stamp +0 -0
  81. data/locale/zh_CN/foreman_ansible.edit.po +0 -813
  82. data/locale/zh_CN/foreman_ansible.po.time_stamp +0 -0
  83. data/locale/zh_TW/foreman_ansible.edit.po +0 -804
  84. data/locale/zh_TW/foreman_ansible.po.time_stamp +0 -0
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.1\n"
8
+ "Project-Id-Version: foreman_ansible 5.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -131,6 +131,9 @@ msgstr ""
131
131
  msgid "Create an override value for a specific ansible variable"
132
132
  msgstr ""
133
133
 
134
+ msgid "Default Ansible inventory report template"
135
+ msgstr ""
136
+
134
137
  msgid "Default Behavior"
135
138
  msgstr ""
136
139
 
@@ -179,10 +182,13 @@ msgstr ""
179
182
  msgid "Foreman"
180
183
  msgstr ""
181
184
 
182
- msgid "Foreman will add the this level of verbosity for additional debugging output when running Ansible playbooks."
185
+ msgid "Foreman will add this level of verbosity for additional debugging output when running Ansible playbooks."
186
+ msgstr ""
187
+
188
+ msgid "Foreman will use this template to schedule the report with Ansible inventory"
183
189
  msgstr ""
184
190
 
185
- msgid "Foreman will run Ansible playbooks using this implementation"
191
+ msgid "Hash of input values of type input=>value"
186
192
  msgstr ""
187
193
 
188
194
  msgid "Hidden Value"
@@ -224,9 +230,6 @@ msgstr ""
224
230
  msgid "If checked, will raise an error if there is no default value and no matcher provide a value."
225
231
  msgstr ""
226
232
 
227
- msgid "Implementation for running Ansible"
228
- msgstr ""
229
-
230
233
  msgid "Import"
231
234
  msgstr ""
232
235
 
@@ -248,13 +251,6 @@ msgstr ""
248
251
  msgid "Import of roles successfully finished."
249
252
  msgstr ""
250
253
 
251
- msgid ""
252
- "Import of variables successfully finished.\n"
253
- "Added: #{results[:added].count} \n"
254
- " Removed: #{results[:obsolete].count} \n"
255
- "Updated: #{results[:updated].count}"
256
- msgstr ""
257
-
258
254
  msgid "Imported at"
259
255
  msgstr ""
260
256
 
@@ -383,69 +379,78 @@ msgstr ""
383
379
  msgid "Overriden"
384
380
  msgstr ""
385
381
 
386
- msgid "Play Ansible roles"
382
+ msgid "Post-provision timeout"
387
383
  msgstr ""
388
384
 
389
- msgid "Play Roles"
385
+ msgid "Prioritize Attribute Order"
390
386
  msgstr ""
391
387
 
392
- msgid "Playbook execution failed"
388
+ msgid "Private Key Path"
393
389
  msgstr ""
394
390
 
395
- msgid "Plays Ansible roles on a host"
391
+ msgid "Proxy not found"
396
392
  msgstr ""
397
393
 
398
- msgid "Plays Ansible roles on a hostgroup"
394
+ msgid "Remediation Plan"
399
395
  msgstr ""
400
396
 
401
- msgid "Plays Ansible roles on hostgroups"
397
+ msgid "Remote action:"
402
398
  msgstr ""
403
399
 
404
- msgid "Plays Ansible roles on hosts"
400
+ msgid "Remove"
405
401
  msgstr ""
406
402
 
407
- msgid "Post-provision timeout"
403
+ msgid "Remove duplicate values (only array type)"
408
404
  msgstr ""
409
405
 
410
- msgid "Prioritize Attribute Order"
406
+ msgid "Report format, defaults to '%s'"
411
407
  msgstr ""
412
408
 
413
- msgid "Private Key Path"
409
+ msgid "Role ID"
414
410
  msgstr ""
415
411
 
416
- msgid "Proxy not found"
412
+ msgid "Roles"
417
413
  msgstr ""
418
414
 
419
- msgid "Remediation Plan"
415
+ msgid "Role|Name"
420
416
  msgstr ""
421
417
 
422
- msgid "Remote action:"
418
+ msgid "Run Ansible roles"
423
419
  msgstr ""
424
420
 
425
- msgid "Remove"
421
+ msgid "Run all Ansible roles"
426
422
  msgstr ""
427
423
 
428
- msgid "Remove duplicate values (only array type)"
424
+ msgid "Run all Ansible roles on hosts belonging to this host group"
429
425
  msgstr ""
430
426
 
431
- msgid "Role ID"
427
+ msgid "Run an Ansible playbook against given hosts"
432
428
  msgstr ""
433
429
 
434
- msgid "Roles"
430
+ msgid "Run playbook"
435
431
  msgstr ""
436
432
 
437
- msgid "Role|Name"
433
+ msgid "Runs a given maintenance plan from Red Hat Access Insights given an ID."
438
434
  msgstr ""
439
435
 
440
- msgid "Run Ansible roles"
436
+ msgid "Runs all Ansible roles on a host"
441
437
  msgstr ""
442
438
 
443
- msgid "Runs a given maintenance plan from Red Hat Access Insights given an ID."
439
+ msgid "Runs all Ansible roles on a hostgroup"
440
+ msgstr ""
441
+
442
+ msgid "Runs all Ansible roles on hostgroups"
443
+ msgstr ""
444
+
445
+ msgid "Runs all Ansible roles on hosts"
444
446
  msgstr ""
445
447
 
446
448
  msgid "Runs an Ansible playbook which contains all the roles defined for a host"
447
449
  msgstr ""
448
450
 
451
+ msgid "Schedule generating of Ansible Inventory report"
452
+ msgstr ""
453
+
449
454
  msgid "Select the changes you want to realize in Foreman"
450
455
  msgstr ""
451
456
 
@@ -5,7 +5,7 @@
5
5
  #
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: foreman_ansible 3.0.1\n"
8
+ "Project-Id-Version: foreman_ansible 5.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "PO-Revision-Date: 2018-03-12 12:24-0400\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
@@ -131,6 +131,9 @@ msgstr ""
131
131
  msgid "Create an override value for a specific ansible variable"
132
132
  msgstr ""
133
133
 
134
+ msgid "Default Ansible inventory report template"
135
+ msgstr ""
136
+
134
137
  msgid "Default Behavior"
135
138
  msgstr ""
136
139
 
@@ -179,10 +182,13 @@ msgstr ""
179
182
  msgid "Foreman"
180
183
  msgstr ""
181
184
 
182
- msgid "Foreman will add the this level of verbosity for additional debugging output when running Ansible playbooks."
185
+ msgid "Foreman will add this level of verbosity for additional debugging output when running Ansible playbooks."
186
+ msgstr ""
187
+
188
+ msgid "Foreman will use this template to schedule the report with Ansible inventory"
183
189
  msgstr ""
184
190
 
185
- msgid "Foreman will run Ansible playbooks using this implementation"
191
+ msgid "Hash of input values of type input=>value"
186
192
  msgstr ""
187
193
 
188
194
  msgid "Hidden Value"
@@ -224,9 +230,6 @@ msgstr ""
224
230
  msgid "If checked, will raise an error if there is no default value and no matcher provide a value."
225
231
  msgstr ""
226
232
 
227
- msgid "Implementation for running Ansible"
228
- msgstr ""
229
-
230
233
  msgid "Import"
231
234
  msgstr ""
232
235
 
@@ -248,13 +251,6 @@ msgstr ""
248
251
  msgid "Import of roles successfully finished."
249
252
  msgstr ""
250
253
 
251
- msgid ""
252
- "Import of variables successfully finished.\n"
253
- "Added: #{results[:added].count} \n"
254
- " Removed: #{results[:obsolete].count} \n"
255
- "Updated: #{results[:updated].count}"
256
- msgstr ""
257
-
258
254
  msgid "Imported at"
259
255
  msgstr ""
260
256
 
@@ -383,69 +379,78 @@ msgstr ""
383
379
  msgid "Overriden"
384
380
  msgstr ""
385
381
 
386
- msgid "Play Ansible roles"
382
+ msgid "Post-provision timeout"
387
383
  msgstr ""
388
384
 
389
- msgid "Play Roles"
385
+ msgid "Prioritize Attribute Order"
390
386
  msgstr ""
391
387
 
392
- msgid "Playbook execution failed"
388
+ msgid "Private Key Path"
393
389
  msgstr ""
394
390
 
395
- msgid "Plays Ansible roles on a host"
391
+ msgid "Proxy not found"
396
392
  msgstr ""
397
393
 
398
- msgid "Plays Ansible roles on a hostgroup"
394
+ msgid "Remediation Plan"
399
395
  msgstr ""
400
396
 
401
- msgid "Plays Ansible roles on hostgroups"
397
+ msgid "Remote action:"
402
398
  msgstr ""
403
399
 
404
- msgid "Plays Ansible roles on hosts"
400
+ msgid "Remove"
405
401
  msgstr ""
406
402
 
407
- msgid "Post-provision timeout"
403
+ msgid "Remove duplicate values (only array type)"
408
404
  msgstr ""
409
405
 
410
- msgid "Prioritize Attribute Order"
406
+ msgid "Report format, defaults to '%s'"
411
407
  msgstr ""
412
408
 
413
- msgid "Private Key Path"
409
+ msgid "Role ID"
414
410
  msgstr ""
415
411
 
416
- msgid "Proxy not found"
412
+ msgid "Roles"
417
413
  msgstr ""
418
414
 
419
- msgid "Remediation Plan"
415
+ msgid "Role|Name"
420
416
  msgstr ""
421
417
 
422
- msgid "Remote action:"
418
+ msgid "Run Ansible roles"
423
419
  msgstr ""
424
420
 
425
- msgid "Remove"
421
+ msgid "Run all Ansible roles"
426
422
  msgstr ""
427
423
 
428
- msgid "Remove duplicate values (only array type)"
424
+ msgid "Run all Ansible roles on hosts belonging to this host group"
429
425
  msgstr ""
430
426
 
431
- msgid "Role ID"
427
+ msgid "Run an Ansible playbook against given hosts"
432
428
  msgstr ""
433
429
 
434
- msgid "Roles"
430
+ msgid "Run playbook"
435
431
  msgstr ""
436
432
 
437
- msgid "Role|Name"
433
+ msgid "Runs a given maintenance plan from Red Hat Access Insights given an ID."
438
434
  msgstr ""
439
435
 
440
- msgid "Run Ansible roles"
436
+ msgid "Runs all Ansible roles on a host"
441
437
  msgstr ""
442
438
 
443
- msgid "Runs a given maintenance plan from Red Hat Access Insights given an ID."
439
+ msgid "Runs all Ansible roles on a hostgroup"
440
+ msgstr ""
441
+
442
+ msgid "Runs all Ansible roles on hostgroups"
443
+ msgstr ""
444
+
445
+ msgid "Runs all Ansible roles on hosts"
444
446
  msgstr ""
445
447
 
446
448
  msgid "Runs an Ansible playbook which contains all the roles defined for a host"
447
449
  msgstr ""
448
450
 
451
+ msgid "Schedule generating of Ansible Inventory report"
452
+ msgstr ""
453
+
449
454
  msgid "Select the changes you want to realize in Foreman"
450
455
  msgstr ""
451
456
 
@@ -6,5 +6,10 @@ FactoryBot.define do
6
6
  sequence(:default_value) { |n| "default_value_#{n}" }
7
7
  ansible_role
8
8
  imported { true }
9
+ override { false }
10
+
11
+ after(:build) do |variable|
12
+ variable.key_type ||= ForemanAnsible::VariablesImporter::VARIABLE_TYPES[variable.default_value.class.to_s] || 'string'
13
+ end
9
14
  end
10
15
  end
@@ -5,52 +5,77 @@ require 'test_plugin_helper'
5
5
  # This service is meant to take in essentially a string coming from
6
6
  # the proxy API, and parse that into AnsibleVariables.
7
7
  class AnsibleVariablesImporterTest < ActiveSupport::TestCase
8
- setup do
9
- @importer = ForemanAnsible::VariablesImporter.new
10
- end
11
- test 'does not reimport already existing variables' do
12
- already_existing = FactoryBot.create(:ansible_variable)
13
- new_role = FactoryBot.create(:ansible_role)
14
- api_response = {
15
- new_role.name => { 'new_var' => 'new value' },
16
- already_existing.ansible_role.name => { already_existing.key => already_existing.default_value }
17
- }
18
- changes = @importer.import_variables(api_response, [new_role.name])
19
- assert_not_empty changes['new']
20
- assert_equal 'new_var', changes['new'].first.key
21
- assert_equal new_role, changes['new'].first.ansible_role
22
- end
8
+ let(:importer) { ForemanAnsible::VariablesImporter.new }
23
9
 
24
- test "variables attempts to remove variables that don't exist anymore" do
25
- obsolete_variable = FactoryBot.create(:ansible_variable)
26
- changes = @importer.import_variables({}, [])
27
- assert_not_empty changes['obsolete']
28
- assert_equal obsolete_variable.key, changes['obsolete'].first.key
29
- assert_equal(
30
- obsolete_variable.ansible_role,
31
- changes['obsolete'].first.ansible_role
32
- )
33
- end
10
+ describe '#import_variables' do
11
+ test 'does not reimport already existing variables' do
12
+ already_existing = FactoryBot.create(:ansible_variable)
13
+ new_role = FactoryBot.create(:ansible_role)
14
+ api_response = {
15
+ new_role.name => { 'new_var' => 'new value' },
16
+ already_existing.ansible_role.name => { already_existing.key => already_existing.default_value }
17
+ }
18
+ changes = importer.import_variables(api_response, [new_role.name])
19
+ assert_empty changes['update']
20
+ assert_not_empty changes['new']
21
+ assert_equal 'new_var', changes['new'].first.key
22
+ assert_equal new_role, changes['new'].first.ansible_role
23
+ end
34
24
 
35
- test 'does not do anything if response is empty' do
36
- changes = @importer.import_variables({}, [])
37
- assert_equal({ 'new' => [], 'obsolete' => [], 'update' => [] }, changes)
38
- end
25
+ test "variables attempts to remove variables that don't exist anymore" do
26
+ obsolete_variable = FactoryBot.create(:ansible_variable)
27
+ changes = importer.import_variables({}, [])
28
+ assert_not_empty changes['obsolete']
29
+ assert_equal obsolete_variable.key, changes['obsolete'].first.key
30
+ assert_equal(
31
+ obsolete_variable.ansible_role,
32
+ changes['obsolete'].first.ansible_role
33
+ )
34
+ end
39
35
 
40
- test 'do not update changed defaults' do
41
- role = FactoryBot.create(:ansible_role)
42
- variable = FactoryBot.create(:ansible_variable, :default_value => 'default value', :ansible_role_id => role.id)
43
- api_response = {
44
- role.name => { variable.key => 'changed value', 'new_variable' => 'new value' }
45
- }
46
- changes = @importer.import_variables(api_response, [])
47
- assert_empty changes['update']
48
- assert_equal 'new_variable', changes['new'].first.key
49
- end
36
+ test 'does not do anything if response is empty' do
37
+ changes = importer.import_variables({}, [])
38
+ assert_equal({ 'new' => [], 'obsolete' => [], 'update' => [] }, changes)
39
+ end
40
+
41
+ test 'update changed defaults' do
42
+ role = FactoryBot.create(:ansible_role)
43
+ variable = FactoryBot.create(:ansible_variable, :default_value => 'default value', :ansible_role => role)
44
+ api_response = {
45
+ role.name => { variable.key => 'changed value' }
46
+ }
47
+ changes = importer.import_variables(api_response, [])
48
+ assert_not_empty changes['update']
49
+ assert_equal variable.key, changes['update'].first.key
50
+ end
51
+
52
+ test 'does not update overriden defaults' do
53
+ role = FactoryBot.create(:ansible_role)
54
+ variable = FactoryBot.create(:ansible_variable, :default_value => 'default value', :override => true, :ansible_role => role)
55
+ api_response = {
56
+ role.name => { variable.key => 'changed value' }
57
+ }
58
+ changes = importer.import_variables(api_response, [])
59
+ assert_empty changes['update']
60
+ end
61
+
62
+ test 'reimports variable with same key for different role' do
63
+ role = FactoryBot.create(:ansible_role)
64
+ variable = FactoryBot.create(:ansible_variable)
65
+ api_response = {
66
+ role.name => { variable.key => 'new value' }
67
+ }
68
+ changes = importer.import_variables(api_response, [role.name])
69
+ assert_empty changes['update']
70
+ assert_not_empty changes['new']
71
+ assert_equal variable.key, changes['new'].first.key
72
+ assert_equal 'new value', changes['new'].first.default_value
73
+ end
50
74
 
51
- test 'should ignore custom variables' do
52
- FactoryBot.create(:ansible_variable, :imported => false)
53
- changes = @importer.import_variables({}, [])
54
- assert_empty changes['obsolete']
75
+ test 'ignores custom variables' do
76
+ FactoryBot.create(:ansible_variable, :imported => false)
77
+ changes = importer.import_variables({}, [])
78
+ assert_empty changes['obsolete']
79
+ end
55
80
  end
56
81
  end
@@ -32,8 +32,6 @@ module ForemanAnsible
32
32
  test 'settings are respected if param cannot be found' do
33
33
  AnsibleProvider.stubs(:find_ip_or_hostname).with(@host).returns(@host.name)
34
34
  extra_options = { 'ansible_user' => 'someone', 'ansible_port' => 2000 }
35
- Setting.expects(:[]).with('Enable_Smart_Variables_in_ENC').
36
- returns(nil).at_least_once
37
35
  Setting.expects(:[]).with('ansible_ssh_private_key_file').
38
36
  returns(nil).at_least_once
39
37
  Setting.expects(:[]).with('remote_execution_ssh_port').