foreman_leapp 0.0.2

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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +50 -0
  4. data/Rakefile +49 -0
  5. data/app/controllers/api/v2/preupgrade_reports_controller.rb +19 -0
  6. data/app/controllers/preupgrade_reports_controller.rb +7 -0
  7. data/app/helpers/concerns/foreman_leapp/hosts_helper_extensions.rb +17 -0
  8. data/app/helpers/concerns/foreman_leapp/remote_execution_helper_extension.rb +15 -0
  9. data/app/helpers/foreman_leapp/template_helper.rb +15 -0
  10. data/app/lib/actions/preupgrade_job.rb +35 -0
  11. data/app/lib/helpers/job_helper.rb +14 -0
  12. data/app/models/concerns/foreman_leapp/job_invocation_extensions.rb +11 -0
  13. data/app/models/preupgrade_report.rb +32 -0
  14. data/app/models/preupgrade_report_entry.rb +15 -0
  15. data/app/views/api/v2/preupgrade_report_entries/base.json.rabl +4 -0
  16. data/app/views/api/v2/preupgrade_reports/base.json.rabl +3 -0
  17. data/app/views/api/v2/preupgrade_reports/index.json.rabl +3 -0
  18. data/app/views/api/v2/preupgrade_reports/show.json.rabl +7 -0
  19. data/app/views/foreman_leapp/job_templates/preupgrade.erb +14 -0
  20. data/app/views/foreman_leapp/job_templates/remediation.erb +17 -0
  21. data/app/views/foreman_leapp/job_templates/upgrade.erb +16 -0
  22. data/app/views/job_invocations/_leapp_preupgrade_report.html.erb +10 -0
  23. data/app/views/preupgrade_report_entries/base.json.rabl +4 -0
  24. data/app/views/preupgrade_reports/index.json.rabl +3 -0
  25. data/app/views/preupgrade_reports/show.json.rabl +7 -0
  26. data/config/routes.rb +11 -0
  27. data/db/migrate/20200320104040_preupgrade_report_entries.rb +25 -0
  28. data/db/migrate/20200326142259_add_job_id_to_report.rb +6 -0
  29. data/db/migrate/20200327091009_add_host_to_report.rb +6 -0
  30. data/db/seeds.d/10_leapp_preupgrade.rb +19 -0
  31. data/lib/foreman_leapp/engine.rb +95 -0
  32. data/lib/foreman_leapp/version.rb +5 -0
  33. data/lib/foreman_leapp.rb +7 -0
  34. data/lib/tasks/foreman_leapp_tasks.rake +49 -0
  35. data/locale/Makefile +60 -0
  36. data/locale/en/foreman_leapp.po +19 -0
  37. data/locale/foreman_leapp.pot +19 -0
  38. data/locale/gemspec.rb +4 -0
  39. data/test/factories/foreman_leapp_factories.rb +27 -0
  40. data/test/functional/api/v2/preupgrade_reports_controller_test.rb +30 -0
  41. data/test/functional/preupgrade_reports_controller_test.rb +16 -0
  42. data/test/helpers/template_helper_test.rb +31 -0
  43. data/test/models/preupgrade_report_entry_test.rb +36 -0
  44. data/test/models/preupgrade_report_test.rb +46 -0
  45. data/test/test_plugin_helper.rb +11 -0
  46. data/test/unit/actions/preupgrade_job_test.rb +43 -0
  47. data/test/unit/helpers/job_helper_test.rb +37 -0
  48. metadata +141 -0
@@ -0,0 +1,19 @@
1
+ # foreman_leapp
2
+ #
3
+ # This file is distributed under the same license as foreman_leapp.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: version 0.0.1\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2014-08-20 08:46+0100\n"
11
+ "PO-Revision-Date: 2014-08-20 08:46+0100\n"
12
+ "Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
13
+ "Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
14
+ "Language: \n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
19
+
data/locale/gemspec.rb ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Matches foreman_leapp.gemspec
4
+ _('A foreman plugin to support inplace RHEL 7 -> RHEL 8 upgrades with Leapp utility.')
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :preupgrade_report do
5
+ host
6
+ reported_at { Time.now.utc }
7
+ type { 'PreupgradeReport' }
8
+ status { '0' }
9
+ end
10
+
11
+ factory :preupgrade_report_entry do
12
+ host
13
+ preupgrade_report
14
+ sequence(:title) { |n| "Leap report entry title #{n}" }
15
+ sequence(:actor) { |n| "leapp_actor#{n}" }
16
+ hostname { host.name }
17
+ audience { 'sys_admin' }
18
+ severity { 'medium' }
19
+ leapp_run_id { SecureRandom.hex(8) }
20
+ tags { %w[tag1 tag2] }
21
+ summary { '' }
22
+ detail do
23
+ { remediations: [{ type: 'hint', context: 'meh.' },
24
+ { type: 'command', context: ['yum', '-y', 'remove', 'leapp_pkg'] }] }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ module Api
6
+ module V2
7
+ class PreupgradeReportsControllerTest < ActionController::TestCase
8
+ setup do
9
+ @host = FactoryBot.create(:host)
10
+ @report = FactoryBot.create(:preupgrade_report, host: @host)
11
+ @entry = FactoryBot.create(:preupgrade_report_entry, host: @host, preupgrade_report: @report)
12
+ end
13
+
14
+ test 'should get index' do
15
+ get :index, session: set_session_user
16
+ assert_response :success
17
+ assert_not_empty ActiveSupport::JSON.decode(@response.body)['results']
18
+ end
19
+
20
+ test 'should get detail of report and its entries' do
21
+ get :show, params: { id: @report.id }
22
+ assert_response :success
23
+
24
+ response = ActiveSupport::JSON.decode(@response.body)
25
+ assert_equal response['id'], @report.id
26
+ assert_not_empty response['preupgrade_report_entries']
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ class PreupgradeReportsControllerTest < ActionController::TestCase
6
+ setup do
7
+ @host = FactoryBot.create :host
8
+ FactoryBot.create :preupgrade_report, host: @host
9
+ end
10
+
11
+ test 'should get index' do
12
+ get :index, session: set_session_user
13
+ response = ActiveSupport::JSON.decode(@response.body)
14
+ assert_equal @host.id, response['results'].first['host_id']
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ module ForemanLeapp
6
+ class TemplateHelperTest < ActionView::TestCase
7
+ let(:host) { FactoryBot.create(:host) }
8
+ let(:report) { FactoryBot.create(:preupgrade_report, host: host) }
9
+ let(:entry) { FactoryBot.create(:preupgrade_report_entry, host: host, preupgrade_report: report) }
10
+
11
+ describe 'build_remediation_plan' do
12
+ test 'with remediation commands' do
13
+ template = build_remediation_plan([entry.id], host)
14
+ assert_equal template, "yum -y remove leapp_pkg\n"
15
+ end
16
+
17
+ test 'without remediation commands' do
18
+ empty_entry = FactoryBot.create(:preupgrade_report_entry, host: host, preupgrade_report: report,
19
+ detail: { remediations: [{ type: 'hint',
20
+ context: 'meh.' }] })
21
+ template = build_remediation_plan([empty_entry.id], host)
22
+ assert_equal template, ''
23
+ end
24
+
25
+ test 'only for current host' do
26
+ template = build_remediation_plan([entry.id], FactoryBot.create(:host))
27
+ assert_equal template, ''
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ class PreupgradeReportEntryTest < ActiveSupport::TestCase
6
+ should belong_to(:preupgrade_report)
7
+ should belong_to(:host)
8
+
9
+ should validate_presence_of(:preupgrade_report)
10
+ should validate_presence_of(:host)
11
+ should validate_presence_of(:hostname)
12
+ should validate_presence_of(:title)
13
+ should validate_presence_of(:actor)
14
+ should validate_presence_of(:audience)
15
+ should validate_presence_of(:severity)
16
+ should validate_presence_of(:leapp_run_id)
17
+
18
+ describe 'remediation_details' do
19
+ setup do
20
+ @host = FactoryBot.create(:host)
21
+
22
+ report = FactoryBot.create(:preupgrade_report)
23
+ @entry1 = FactoryBot.create(:preupgrade_report_entry, preupgrade_report: report, host: @host)
24
+ @entry2 = FactoryBot.create(:preupgrade_report_entry, preupgrade_report: report, host: @host, detail: nil)
25
+ end
26
+
27
+ it do
28
+ details = PreupgradeReportEntry.remediation_details([@entry1.id, @entry2.id], @host.id)
29
+ assert_equal details.size, 1
30
+ assert_equal details[0], @entry1.detail
31
+
32
+ details = PreupgradeReportEntry.remediation_details([@entry1.id, @entry2.id], FactoryBot.create(:host))
33
+ assert_equal details.size, 0
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ class PreupgradeReportTest < ActiveSupport::TestCase
6
+ should belong_to(:job_invocation)
7
+ should have_many(:preupgrade_report_entries).dependent(:destroy)
8
+
9
+ describe '#create_report' do
10
+ let(:job_invocation) { FactoryBot.create(:job_invocation) }
11
+ let(:host) { FactoryBot.create(:host) }
12
+
13
+ it 'with commands and hints' do
14
+ data = { 'leapp_run_id' => 'leapp_c13e471c',
15
+ 'entries' => [sample_entry_1, sample_entry_2] }
16
+
17
+ assert_difference -> { PreupgradeReport.count } => 1, -> { PreupgradeReportEntry.count } => 2 do
18
+ PreupgradeReport.create_report(host, data, job_invocation)
19
+ end
20
+ end
21
+
22
+ it 'no entries' do
23
+ data = { 'leapp_run_id' => 'leapp_c13e471c' }
24
+
25
+ assert_difference -> { PreupgradeReport.count } => 1, -> { PreupgradeReportEntry.count } => 0 do
26
+ PreupgradeReport.create_report(host, data, job_invocation)
27
+ end
28
+ end
29
+ end
30
+
31
+ def sample_entry_1
32
+ { 'severity' => 'low', 'title' => 'SElinux will be set to permissive mode',
33
+ 'tags' => %w[selinux security], 'actor' => 'check_se_linux',
34
+ 'summary' => 'sum', 'audience' => 'sysadmin', 'id' => 'id1' }
35
+ end
36
+
37
+ def sample_entry_2
38
+ { 'severity' => 'high', 'tags' => ['kernel'], 'title' => 'Multiple devel kernels installed',
39
+ 'detail' => { 'remediations' => [
40
+ { 'type' => 'hint', 'context' => 'Some context' },
41
+ { 'type' => 'command', 'context' => ['yum', '-y', 'remove', 'kernel-devel-3.10.0.1127.el7'] }
42
+ ] },
43
+ 'actor' => 'check_installed_devel_kernels', 'summary' => 'Sum', 'audience' => 'sysadmin',
44
+ 'flags' => ['inhibitor'], 'id' => 'id2' }
45
+ end
46
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This calls the main test_helper in Foreman-core
4
+ require 'test_helper'
5
+ require 'dynflow/testing'
6
+
7
+ # Add plugin to FactoryBot's paths
8
+ FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
9
+ FactoryBot.definition_file_paths << "#{ForemanTasks::Engine.root}/test/factories"
10
+ FactoryBot.definition_file_paths << "#{ForemanRemoteExecution::Engine.root}/test/factories"
11
+ FactoryBot.reload
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ module ForemanLeapp
6
+ class PreupgradeJobTest < ActiveSupport::TestCase
7
+ include Dynflow::Testing
8
+
9
+ let(:host) { FactoryBot.create(:host) }
10
+ let(:job_template) do
11
+ FactoryBot.create(:job_template, template: 'echo "1"', job_category: 'leapp',
12
+ provider_type: 'SSH', name: 'Leapp preupgrade')
13
+ end
14
+ let(:job_invocation) { FactoryBot.create(:job_invocation, job_category: ::ForemanLeapp::JOB_CATEGORY) }
15
+ let(:template_invocation) do
16
+ FactoryBot.create(:template_invocation, template: job_template, job_invocation: job_invocation)
17
+ end
18
+
19
+ let(:action) { create_action(Actions::ForemanLeapp::PreupgradeJob) }
20
+ let(:planned_action) { plan_action(action, job_invocation, host, template_invocation) }
21
+
22
+ setup do
23
+ RemoteExecutionFeature.find_by(label: 'leapp_preupgrade').update(job_template: job_template)
24
+ end
25
+
26
+ describe 'plan' do
27
+ test 'run plan phase' do
28
+ assert_equal planned_action.input['host_id'], host.id
29
+ assert_equal planned_action.input['job_invocation_id'], job_invocation.id
30
+ end
31
+ end
32
+
33
+ describe '#format_output' do
34
+ let(:output) { "first_line\n===leap_upgrade_report_start===\n{\n\"report\": \"yes!\"\n}\nExit status: 0\n" }
35
+
36
+ it { assert action.send(:format_output, output), '{"report": "yes!"}' }
37
+ end
38
+
39
+ describe 'finalize' do
40
+ it { assert_finalize_phase planned_action }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+
5
+ module Helpers
6
+ class JobHelperTest < ActionView::TestCase
7
+ let(:helper) { ::Helpers::JobHelper }
8
+ # let(:host) { FactoryBot.create(:host) }
9
+ let(:job_template) do
10
+ FactoryBot.create(:job_template, template: 'echo "1"', job_category: 'leapp',
11
+ provider_type: 'SSH', name: 'Leapp preupgrade')
12
+ end
13
+ let(:job_invocation) { FactoryBot.create(:job_invocation, job_category: ::ForemanLeapp::JOB_CATEGORY) }
14
+
15
+ describe 'correct_feature?' do
16
+ setup do
17
+ RemoteExecutionFeature.find_by(label: 'leapp_preupgrade').update(job_template: job_template)
18
+ FactoryBot.create(:template_invocation, template: job_template, job_invocation: job_invocation)
19
+ end
20
+
21
+ it 'correct category & feature' do
22
+ assert helper.correct_feature?(job_invocation, 'leapp_preupgrade')
23
+ end
24
+
25
+ it 'wrong category' do
26
+ job_invocation = FactoryBot.create(:job_invocation, job_category: 'NOPE')
27
+ FactoryBot.create(:template_invocation, template: job_template, job_invocation: job_invocation)
28
+
29
+ assert_not helper.correct_feature?(job_invocation, 'leapp_preupgrade')
30
+ end
31
+
32
+ it 'wrong feature' do
33
+ assert_not helper.correct_feature?(job_invocation, 'leapp_preupgrade2')
34
+ end
35
+ end
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman_leapp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Foreman Leapp team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: foreman_remote_execution
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '6.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.80'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.80'
55
+ description: A Foreman plugin to support inplace RHEL 7 -> RHEL 8 upgrades with Leapp
56
+ utility.
57
+ email:
58
+ - foreman-dev@googlegroups.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - LICENSE
64
+ - README.md
65
+ - Rakefile
66
+ - app/controllers/api/v2/preupgrade_reports_controller.rb
67
+ - app/controllers/preupgrade_reports_controller.rb
68
+ - app/helpers/concerns/foreman_leapp/hosts_helper_extensions.rb
69
+ - app/helpers/concerns/foreman_leapp/remote_execution_helper_extension.rb
70
+ - app/helpers/foreman_leapp/template_helper.rb
71
+ - app/lib/actions/preupgrade_job.rb
72
+ - app/lib/helpers/job_helper.rb
73
+ - app/models/concerns/foreman_leapp/job_invocation_extensions.rb
74
+ - app/models/preupgrade_report.rb
75
+ - app/models/preupgrade_report_entry.rb
76
+ - app/views/api/v2/preupgrade_report_entries/base.json.rabl
77
+ - app/views/api/v2/preupgrade_reports/base.json.rabl
78
+ - app/views/api/v2/preupgrade_reports/index.json.rabl
79
+ - app/views/api/v2/preupgrade_reports/show.json.rabl
80
+ - app/views/foreman_leapp/job_templates/preupgrade.erb
81
+ - app/views/foreman_leapp/job_templates/remediation.erb
82
+ - app/views/foreman_leapp/job_templates/upgrade.erb
83
+ - app/views/job_invocations/_leapp_preupgrade_report.html.erb
84
+ - app/views/preupgrade_report_entries/base.json.rabl
85
+ - app/views/preupgrade_reports/index.json.rabl
86
+ - app/views/preupgrade_reports/show.json.rabl
87
+ - config/routes.rb
88
+ - db/migrate/20200320104040_preupgrade_report_entries.rb
89
+ - db/migrate/20200326142259_add_job_id_to_report.rb
90
+ - db/migrate/20200327091009_add_host_to_report.rb
91
+ - db/seeds.d/10_leapp_preupgrade.rb
92
+ - lib/foreman_leapp.rb
93
+ - lib/foreman_leapp/engine.rb
94
+ - lib/foreman_leapp/version.rb
95
+ - lib/tasks/foreman_leapp_tasks.rake
96
+ - locale/Makefile
97
+ - locale/en/foreman_leapp.po
98
+ - locale/foreman_leapp.pot
99
+ - locale/gemspec.rb
100
+ - test/factories/foreman_leapp_factories.rb
101
+ - test/functional/api/v2/preupgrade_reports_controller_test.rb
102
+ - test/functional/preupgrade_reports_controller_test.rb
103
+ - test/helpers/template_helper_test.rb
104
+ - test/models/preupgrade_report_entry_test.rb
105
+ - test/models/preupgrade_report_test.rb
106
+ - test/test_plugin_helper.rb
107
+ - test/unit/actions/preupgrade_job_test.rb
108
+ - test/unit/helpers/job_helper_test.rb
109
+ homepage: https://github.com/oamg/foreman_leapp
110
+ licenses:
111
+ - GPL-3.0
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubygems_version: 3.0.3
129
+ signing_key:
130
+ specification_version: 4
131
+ summary: A Foreman plugin for Leapp utility.
132
+ test_files:
133
+ - test/functional/api/v2/preupgrade_reports_controller_test.rb
134
+ - test/functional/preupgrade_reports_controller_test.rb
135
+ - test/models/preupgrade_report_test.rb
136
+ - test/models/preupgrade_report_entry_test.rb
137
+ - test/unit/helpers/job_helper_test.rb
138
+ - test/unit/actions/preupgrade_job_test.rb
139
+ - test/test_plugin_helper.rb
140
+ - test/helpers/template_helper_test.rb
141
+ - test/factories/foreman_leapp_factories.rb