foreman_leapp 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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