foreman_maintain 0.4.1 → 0.4.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.
- checksums.yaml +5 -5
- data/README.md +7 -1
- data/definitions/checks/disk/performance.rb +11 -1
- data/definitions/checks/version_locking_enabled.rb +14 -0
- data/definitions/features/candlepin_database.rb +1 -1
- data/definitions/features/downstream.rb +12 -2
- data/definitions/features/foreman_database.rb +1 -1
- data/definitions/features/package_manager.rb +34 -0
- data/definitions/features/sync_plans.rb +25 -24
- data/definitions/procedures/backup/config_files.rb +4 -1
- data/definitions/procedures/maintenance_mode/is_enabled.rb +2 -2
- data/definitions/procedures/packages/enable_version_locking.rb +17 -0
- data/definitions/procedures/packages/lock_versions.rb +17 -0
- data/definitions/procedures/packages/locking_status.rb +17 -0
- data/definitions/procedures/packages/unlock_versions.rb +13 -0
- data/definitions/procedures/packages/update.rb +1 -1
- data/definitions/procedures/sync_plans/disable.rb +1 -1
- data/definitions/scenarios/backup.rb +3 -3
- data/definitions/scenarios/upgrade_to_satellite_6_2.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_3.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_4.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_5.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_5_z.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_6.rb +80 -0
- data/definitions/scenarios/version_locking.rb +39 -0
- data/lib/foreman_maintain/cli/base.rb +5 -0
- data/lib/foreman_maintain/cli/packages_command.rb +36 -0
- data/lib/foreman_maintain/cli.rb +2 -0
- data/lib/foreman_maintain/concerns/system_helpers.rb +16 -16
- data/lib/foreman_maintain/package_manager/base.rb +71 -0
- data/lib/foreman_maintain/package_manager/dnf.rb +17 -0
- data/lib/foreman_maintain/package_manager/yum.rb +126 -0
- data/lib/foreman_maintain/package_manager.rb +3 -0
- data/lib/foreman_maintain/reporter/cli_reporter.rb +1 -1
- data/lib/foreman_maintain/version.rb +1 -1
- data/lib/foreman_maintain.rb +1 -0
- metadata +16 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 41f6663257db0cfdff24426812ca56a64a53105c6192b5abf5a2dba70e934fb5
|
4
|
+
data.tar.gz: a745621e9499e97d3c39e7d4d86f833b31c96e762d34d7a2def668e59cb555a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c78e8bfc7d0ef67cbaf4d79c319b37175b4148d2050625894ac9a3e5186795b08ffe7f696472f110f3260ebac0381dd3407df55ce2cb92704751d00c4bed40c2
|
7
|
+
data.tar.gz: 0bfaef53cbc4ccf91f1f841365bdbe0beb6256104f3e6c704f6e0b8554c6921d2b7e3cd5c4ce0e5c7c94d6fe71e6e51525a4d47c38d14f1ff8428045a8fd15ae
|
data/README.md
CHANGED
@@ -120,6 +120,12 @@ export EXTERNAL_SAT_ORG='Sat6-CI'
|
|
120
120
|
export EXTERNAL_SAT_ACTIVATION_KEY='Satellite QA RHEL7'
|
121
121
|
```
|
122
122
|
|
123
|
+
To use beta repositories during upgrade, set the following environment variable
|
124
|
+
|
125
|
+
```
|
126
|
+
export FOREMAN_MAINTAIN_USE_BETA='1'
|
127
|
+
```
|
128
|
+
|
123
129
|
## Implementation
|
124
130
|
|
125
131
|
`foreman_maintain` maps the CLI commands into definitions. This allows to keep the set
|
@@ -437,7 +443,7 @@ Possible options for the `:completion` attribute are:
|
|
437
443
|
* `maintenance-mode status` gives a brief output with On/Off message. This includes status of each step.
|
438
444
|
|
439
445
|
* `maintenance-mode is-enabled` returns `0 or 1` output depending upon the maintenance-mode status.
|
440
|
-
Here,
|
446
|
+
Here, 0=ON & 1=OFF.
|
441
447
|
|
442
448
|
If User would like to check whether maintenance-mode is ON/OFF on system in their external script then
|
443
449
|
they can use subcommand `foreman-maintain maintenance-mode is-enabled`.
|
@@ -26,7 +26,11 @@ module Checks
|
|
26
26
|
puts "\n"
|
27
27
|
puts stats.stdout
|
28
28
|
|
29
|
-
|
29
|
+
if feature(:downstream) && feature(:downstream).at_least_version?('6.3')
|
30
|
+
assert(success, io_obj.slow_disk_error_msg + warning_message, :warn => true)
|
31
|
+
else
|
32
|
+
assert(success, io_obj.slow_disk_error_msg)
|
33
|
+
end
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
@@ -38,11 +42,17 @@ module Checks
|
|
38
42
|
|
39
43
|
def dirs_to_check
|
40
44
|
return DEFAULT_DIRS.first(1) if check_only_single_device?
|
45
|
+
|
41
46
|
DEFAULT_DIRS
|
42
47
|
end
|
43
48
|
|
44
49
|
private
|
45
50
|
|
51
|
+
def warning_message
|
52
|
+
"\nWARNING: Low disk speed might have a negative impact on the system."\
|
53
|
+
"\nSee https://access.redhat.com/solutions/3397771 before proceeding"
|
54
|
+
end
|
55
|
+
|
46
56
|
def compute_disk_speed(spinner)
|
47
57
|
success = true
|
48
58
|
io_obj = ForemanMaintain::Utils::Disk::NilDevice.new
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Checks
|
2
|
+
class VersionLockingEnabled < ForemanMaintain::Check
|
3
|
+
metadata do
|
4
|
+
description 'Check if tooling for package version locking is installed'
|
5
|
+
end
|
6
|
+
|
7
|
+
def run
|
8
|
+
enabled = feature(:package_manager).version_locking_enabled?
|
9
|
+
enable_locking = Procedures::Packages::EnableVersionLocking.new(:assumeyes => assumeyes?)
|
10
|
+
assert(enabled, 'Tools for package version locking are not available on this system',
|
11
|
+
:next_steps => enable_locking)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -64,7 +64,9 @@ class Features::Downstream < ForemanMaintain::Feature
|
|
64
64
|
|
65
65
|
rh_repos.concat(sat_and_tools_repos(rh_version_major, sat_version))
|
66
66
|
|
67
|
-
|
67
|
+
if sat_version > version('6.3')
|
68
|
+
rh_repos << ansible_repo(sat_version, rh_version_major)
|
69
|
+
end
|
68
70
|
|
69
71
|
if current_minor_version == '6.3' && sat_version.to_s != '6.4' && (
|
70
72
|
feature(:puppet_server) && feature(:puppet_server).puppet_version.major == 4)
|
@@ -74,6 +76,14 @@ class Features::Downstream < ForemanMaintain::Feature
|
|
74
76
|
rh_repos
|
75
77
|
end
|
76
78
|
|
79
|
+
def ansible_repo(sat_version, rh_version_major)
|
80
|
+
if sat_version >= version('6.6')
|
81
|
+
"rhel-#{rh_version_major}-server-ansible-2.8-rpms"
|
82
|
+
elsif sat_version >= version('6.4')
|
83
|
+
"rhel-#{rh_version_major}-server-ansible-2.6-rpms"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
77
87
|
def sat_and_tools_repos(rh_version_major, sat_version)
|
78
88
|
sat_version_full = "#{sat_version.major}.#{sat_version.minor}"
|
79
89
|
sat_repo_id = "rhel-#{rh_version_major}-server-satellite-#{sat_version_full}-rpms"
|
@@ -81,7 +91,7 @@ class Features::Downstream < ForemanMaintain::Feature
|
|
81
91
|
sat_maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms"
|
82
92
|
|
83
93
|
# Override to use Beta repositories for sat version until GA
|
84
|
-
if
|
94
|
+
if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
|
85
95
|
sat_repo_id = "rhel-server-#{rh_version_major}-satellite-6-beta-rpms"
|
86
96
|
sat_tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-6-beta-rpms"
|
87
97
|
sat_maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-beta-rpms"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Features::PackageManager < ForemanMaintain::Feature
|
2
|
+
metadata do
|
3
|
+
label :package_manager
|
4
|
+
end
|
5
|
+
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :manager, :lock_versions, :unlock_versions,
|
8
|
+
:installed?, :find_installed_package, :install, :update,
|
9
|
+
:version_locking_enabled?, :configure_version_locking,
|
10
|
+
:foreman_related_packages, :version_locking_packages,
|
11
|
+
:versions_locked?, :clean_cache
|
12
|
+
|
13
|
+
def self.type
|
14
|
+
@type ||= %w[dnf yum apt].find { |manager| command_present?(manager) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def type
|
18
|
+
self.class.type
|
19
|
+
end
|
20
|
+
|
21
|
+
def manager
|
22
|
+
@manager ||= case type
|
23
|
+
when 'dnf'
|
24
|
+
ForemanMaintain::PackageManager::Dnf.new
|
25
|
+
when 'yum'
|
26
|
+
ForemanMaintain::PackageManager::Yum.new
|
27
|
+
else
|
28
|
+
raise 'No supported package manager was found'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# TODO: DEB grep ^Package: /var/lib/apt/lists/deb.theforeman.org_dists_*
|
33
|
+
# TODO DEB apt-mark hold/unhold <package>
|
34
|
+
end
|
@@ -3,33 +3,34 @@ class Features::SyncPlans < ForemanMaintain::Feature
|
|
3
3
|
label :sync_plans
|
4
4
|
end
|
5
5
|
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
def required_new_implementation
|
7
|
+
@required_new_implementation ||=
|
8
|
+
feature(:foreman_database).query(
|
9
|
+
<<-SQL
|
10
|
+
SELECT COUNT(1) FROM information_schema.table_constraints
|
11
|
+
WHERE constraint_name='katello_sync_plan_foreman_tasks_recurring_logic_fk' AND table_name='katello_sync_plans'
|
12
|
+
SQL
|
13
|
+
).first['count'].to_i > 0
|
12
14
|
end
|
13
15
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
<<-SQL
|
18
|
-
SELECT id FROM katello_sync_plans WHERE enabled ='#{enabled}'
|
19
|
-
SQL
|
20
|
-
).map { |r| r['id'].to_i }
|
21
|
-
end
|
16
|
+
def sync_plan_ids_by_status(enabled = true, filter_ids = nil)
|
17
|
+
if filter_ids
|
18
|
+
return [] if filter_ids.empty?
|
22
19
|
|
23
|
-
|
24
|
-
|
20
|
+
ids_condition = filter_ids.map { |id| "'#{id}'" }.join(',')
|
21
|
+
end
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
SELECT id FROM katello_sync_plans WHERE enabled ='#{enabled}' AND id IN (#{ids_condition})
|
23
|
+
if required_new_implementation
|
24
|
+
query = <<-SQL
|
25
|
+
select sp.id as id from katello_sync_plans sp inner join foreman_tasks_recurring_logics rl on sp.foreman_tasks_recurring_logic_id = rl.id
|
26
|
+
where rl.state='#{enabled ? 'active' : 'disabled'}' #{ids_condition ? " AND sp.id IN (#{ids_condition})" : ''}
|
31
27
|
SQL
|
32
|
-
|
28
|
+
else
|
29
|
+
query = <<-SQL
|
30
|
+
SELECT id FROM katello_sync_plans WHERE enabled ='#{enabled ? 't' : 'f'}' #{ids_condition ? " AND id IN (#{ids_condition})" : ''}
|
31
|
+
SQL
|
32
|
+
end
|
33
|
+
feature(:foreman_database).query(query).map { |r| r['id'].to_i }
|
33
34
|
end
|
34
35
|
|
35
36
|
def make_disable(ids)
|
@@ -69,7 +70,7 @@ class Features::SyncPlans < ForemanMaintain::Feature
|
|
69
70
|
private
|
70
71
|
|
71
72
|
def update_records(ids, enabled)
|
72
|
-
ids_not_required_update =
|
73
|
+
ids_not_required_update = sync_plan_ids_by_status(enabled, ids)
|
73
74
|
ids_required_update = ids - ids_not_required_update
|
74
75
|
make_data_key_empty(enabled) if !ids_not_required_update.empty? && ids_required_update.empty?
|
75
76
|
updated_record_ids = []
|
@@ -104,7 +105,7 @@ class Features::SyncPlans < ForemanMaintain::Feature
|
|
104
105
|
else
|
105
106
|
@data[:disabled] = [] unless @data[:disabled]
|
106
107
|
@data[:enabled] = [] if @data[:disabled].empty?
|
107
|
-
@data[:disabled].concat(new_ids)
|
108
|
+
@data[:disabled].concat(new_ids).uniq!
|
108
109
|
end
|
109
110
|
end
|
110
111
|
|
@@ -11,6 +11,8 @@ module Procedures::Backup
|
|
11
11
|
param :backup_dir, 'Directory where to backup to', :required => true
|
12
12
|
param :proxy_features, 'List of proxy features to backup (default: all)',
|
13
13
|
:array => true, :default => ['all']
|
14
|
+
param :ignore_changed_files, 'Should packing tar ignore changed files',
|
15
|
+
:flag => true, :default => false
|
14
16
|
end
|
15
17
|
|
16
18
|
def run
|
@@ -18,9 +20,10 @@ module Procedures::Backup
|
|
18
20
|
increments = File.join(@backup_dir, '.config.snar')
|
19
21
|
with_spinner('Collecting config files to backup') do
|
20
22
|
configs = config_files.join(' ')
|
23
|
+
statuses = @ignore_changed_files ? [0, 1] : [0]
|
21
24
|
execute!("tar --selinux --create --gzip --file=#{tarball} " \
|
22
25
|
"--listed-incremental=#{increments} --ignore-failed-read " \
|
23
|
-
"#{configs}")
|
26
|
+
"#{configs}", :valid_exit_statuses => statuses)
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
@@ -9,8 +9,8 @@ module Procedures::MaintenanceMode
|
|
9
9
|
attr_reader :status_code
|
10
10
|
|
11
11
|
def run
|
12
|
-
@status_code = feature(:iptables).maintenance_mode_chain_exist? ?
|
13
|
-
puts "Maintenance mode is #{@status_code ==
|
12
|
+
@status_code = feature(:iptables).maintenance_mode_chain_exist? ? 0 : 1
|
13
|
+
puts "Maintenance mode is #{@status_code == 1 ? 'Off' : 'On'}"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Procedures::Packages
|
2
|
+
class EnableVersionLocking < ForemanMaintain::Procedure
|
3
|
+
metadata do
|
4
|
+
description 'Install and configure tools for version locking'
|
5
|
+
param :assumeyes, 'Do not ask for confirmation'
|
6
|
+
end
|
7
|
+
|
8
|
+
def run
|
9
|
+
packages = feature(:package_manager).version_locking_packages
|
10
|
+
feature(:package_manager).install(packages, :assumeyes => @assumeyes)
|
11
|
+
unless feature(:package_manager).installed?(packages)
|
12
|
+
raise "Unable to install some of the required dependences: #{packages.join(' ')}"
|
13
|
+
end
|
14
|
+
feature(:package_manager).configure_version_locking
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Procedures::Packages
|
2
|
+
class LockVersions < ForemanMaintain::Procedure
|
3
|
+
metadata do
|
4
|
+
for_feature :package_manager
|
5
|
+
description 'Lock versions of Foreman-related packages'
|
6
|
+
preparation_steps { [Checks::VersionLockingEnabled.new] }
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
with_spinner('Collecting list of packages to lock') do |spinner|
|
11
|
+
package_list = feature(:package_manager).foreman_related_packages
|
12
|
+
spinner.update('Locking packages')
|
13
|
+
feature(:package_manager).lock_versions(package_list)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Procedures::Packages
|
2
|
+
class LockingStatus < ForemanMaintain::Procedure
|
3
|
+
metadata do
|
4
|
+
for_feature :package_manager
|
5
|
+
description 'Check status of version locking of Foreman-related packages'
|
6
|
+
preparation_steps { [Checks::VersionLockingEnabled.new] }
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
if feature(:package_manager).versions_locked?
|
11
|
+
puts 'Packages are locked.'
|
12
|
+
else
|
13
|
+
puts 'Packages are not locked.'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Procedures::Packages
|
2
|
+
class UnlockVersions < ForemanMaintain::Procedure
|
3
|
+
metadata do
|
4
|
+
for_feature :package_manager
|
5
|
+
description 'Unlock versions of Foreman-related packages'
|
6
|
+
preparation_steps { [Checks::VersionLockingEnabled.new] }
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
feature(:package_manager).unlock_versions
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -21,7 +21,7 @@ module Procedures::SyncPlans
|
|
21
21
|
default_storage = ForemanMaintain.storage(:default)
|
22
22
|
feature(:sync_plans).load_from_storage(default_storage)
|
23
23
|
with_spinner('disabling sync plans') do |spinner|
|
24
|
-
ids = feature(:sync_plans).
|
24
|
+
ids = feature(:sync_plans).sync_plan_ids_by_status(true)
|
25
25
|
feature(:sync_plans).make_disable(ids)
|
26
26
|
spinner.update "Total #{ids.length} sync plans are now disabled."
|
27
27
|
end
|
@@ -19,7 +19,6 @@ module ForemanMaintain::Scenarios
|
|
19
19
|
param :tar_volume_size, 'Size of tar volume (indicates splitting)'
|
20
20
|
end
|
21
21
|
|
22
|
-
# rubocop:disable Metrics/MethodLength
|
23
22
|
def compose
|
24
23
|
check_valid_startegy
|
25
24
|
safety_confirmation
|
@@ -27,7 +26,6 @@ module ForemanMaintain::Scenarios
|
|
27
26
|
prepare_directory
|
28
27
|
logical_volume_confirmation
|
29
28
|
add_step_with_context(Procedures::Backup::Metadata)
|
30
|
-
add_step_with_context(Procedures::Backup::ConfigFiles)
|
31
29
|
|
32
30
|
case strategy
|
33
31
|
when :online
|
@@ -39,7 +37,6 @@ module ForemanMaintain::Scenarios
|
|
39
37
|
end
|
40
38
|
add_step_with_context(Procedures::Backup::CompressData)
|
41
39
|
end
|
42
|
-
# rubocop:enable Metrics/MethodLength
|
43
40
|
|
44
41
|
# rubocop:disable Metrics/MethodLength
|
45
42
|
def set_context_mapping
|
@@ -132,6 +129,7 @@ module ForemanMaintain::Scenarios
|
|
132
129
|
add_steps_with_context(
|
133
130
|
find_procedures(:maintenance_mode_on),
|
134
131
|
Procedures::Service::Stop,
|
132
|
+
Procedures::Backup::ConfigFiles,
|
135
133
|
Procedures::Backup::Pulp,
|
136
134
|
Procedures::Backup::Offline::Mongo,
|
137
135
|
Procedures::Backup::Offline::CandlepinDB,
|
@@ -162,6 +160,7 @@ module ForemanMaintain::Scenarios
|
|
162
160
|
Procedures::Backup::Snapshot::PrepareMount,
|
163
161
|
find_procedures(:maintenance_mode_on),
|
164
162
|
Procedures::Service::Stop,
|
163
|
+
Procedures::Backup::ConfigFiles,
|
165
164
|
Procedures::Backup::Snapshot::MountMongo,
|
166
165
|
Procedures::Backup::Snapshot::MountPulp,
|
167
166
|
Procedures::Backup::Snapshot::MountCandlepinDB,
|
@@ -184,6 +183,7 @@ module ForemanMaintain::Scenarios
|
|
184
183
|
# rubocop:enable Metrics/MethodLength
|
185
184
|
|
186
185
|
def add_online_backup_steps
|
186
|
+
add_step_with_context(Procedures::Backup::ConfigFiles, :ignore_changed_files => true)
|
187
187
|
add_step_with_context(Procedures::Backup::Pulp, :ensure_unchanged => true)
|
188
188
|
add_steps_with_context(
|
189
189
|
Procedures::Backup::Online::Mongo,
|
@@ -45,6 +45,7 @@ module Scenarios::Satellite_6_2
|
|
45
45
|
|
46
46
|
def compose
|
47
47
|
add_step(Procedures::Repositories::Setup.new(:version => '6.2'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
48
49
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
49
50
|
add_step(Procedures::Installer::Upgrade.new)
|
50
51
|
end
|
@@ -45,6 +45,7 @@ module Scenarios::Satellite_6_2_z
|
|
45
45
|
|
46
46
|
def compose
|
47
47
|
add_step(Procedures::Repositories::Setup.new(:version => '6.2'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
48
49
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
49
50
|
add_step(Procedures::Installer::Upgrade.new)
|
50
51
|
end
|
@@ -46,6 +46,7 @@ module Scenarios::Satellite_6_3
|
|
46
46
|
|
47
47
|
def compose
|
48
48
|
add_step(Procedures::Repositories::Setup.new(:version => '6.3'))
|
49
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
49
50
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
50
51
|
add_step(Procedures::Installer::Upgrade.new)
|
51
52
|
end
|
@@ -45,6 +45,7 @@ module Scenarios::Satellite_6_3_z
|
|
45
45
|
|
46
46
|
def compose
|
47
47
|
add_step(Procedures::Repositories::Setup.new(:version => '6.3'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
48
49
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
49
50
|
add_step(Procedures::Installer::Upgrade.new)
|
50
51
|
end
|
@@ -46,6 +46,7 @@ module Scenarios::Satellite_6_4
|
|
46
46
|
|
47
47
|
def compose
|
48
48
|
add_step(Procedures::Repositories::Setup.new(:version => '6.4'))
|
49
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
49
50
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
50
51
|
add_step(Procedures::Installer::Upgrade.new)
|
51
52
|
end
|
@@ -45,6 +45,7 @@ module Scenarios::Satellite_6_4_z
|
|
45
45
|
|
46
46
|
def compose
|
47
47
|
add_step(Procedures::Repositories::Setup.new(:version => '6.4'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
48
49
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
49
50
|
add_step(Procedures::Installer::Upgrade.new)
|
50
51
|
end
|
@@ -45,6 +45,7 @@ module Scenarios::Satellite_6_5
|
|
45
45
|
|
46
46
|
def compose
|
47
47
|
add_step(Procedures::Repositories::Setup.new(:version => '6.5'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
48
49
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
49
50
|
add_step(Procedures::Installer::Upgrade.new)
|
50
51
|
end
|
@@ -45,6 +45,7 @@ module Scenarios::Satellite_6_5_z
|
|
45
45
|
|
46
46
|
def compose
|
47
47
|
add_step(Procedures::Repositories::Setup.new(:version => '6.5'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
48
49
|
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
49
50
|
add_step(Procedures::Installer::Upgrade.new)
|
50
51
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Scenarios::Satellite_6_6
|
2
|
+
class Abstract < ForemanMaintain::Scenario
|
3
|
+
def self.upgrade_metadata(&block)
|
4
|
+
metadata do
|
5
|
+
tags :upgrade_to_satellite_6_6
|
6
|
+
confine do
|
7
|
+
feature(:downstream) && feature(:downstream).current_minor_version == '6.5'
|
8
|
+
end
|
9
|
+
instance_eval(&block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class PreUpgradeCheck < Abstract
|
15
|
+
upgrade_metadata do
|
16
|
+
description 'Checks before upgrading to Satellite 6.6'
|
17
|
+
tags :pre_upgrade_checks
|
18
|
+
run_strategy :fail_slow
|
19
|
+
end
|
20
|
+
|
21
|
+
def compose
|
22
|
+
add_steps(find_checks(:default))
|
23
|
+
add_steps(find_checks(:pre_upgrade))
|
24
|
+
add_step(Checks::Repositories::Validate.new(:version => '6.6'))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class PreMigrations < Abstract
|
29
|
+
upgrade_metadata do
|
30
|
+
description 'Procedures before migrating to Satellite 6.6'
|
31
|
+
tags :pre_migrations
|
32
|
+
end
|
33
|
+
|
34
|
+
def compose
|
35
|
+
add_steps(find_procedures(:pre_migrations))
|
36
|
+
add_step(Procedures::Service::Stop.new)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Migrations < Abstract
|
41
|
+
upgrade_metadata do
|
42
|
+
description 'Migration scripts to Satellite 6.6'
|
43
|
+
tags :migrations
|
44
|
+
end
|
45
|
+
|
46
|
+
def compose
|
47
|
+
add_step(Procedures::Repositories::Setup.new(:version => '6.6'))
|
48
|
+
add_step(Procedures::Packages::UnlockVersions.new)
|
49
|
+
add_step(Procedures::Packages::Update.new(:assumeyes => true))
|
50
|
+
add_step(Procedures::Installer::Upgrade.new)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class PostMigrations < Abstract
|
55
|
+
upgrade_metadata do
|
56
|
+
description 'Procedures after migrating to Satellite 6.6'
|
57
|
+
tags :post_migrations
|
58
|
+
end
|
59
|
+
|
60
|
+
def compose
|
61
|
+
add_step(Procedures::Service::Start.new)
|
62
|
+
add_steps(find_procedures(:post_migrations))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class PostUpgradeChecks < Abstract
|
67
|
+
upgrade_metadata do
|
68
|
+
description 'Checks after upgrading to Satellite 6.6'
|
69
|
+
tags :post_upgrade_checks
|
70
|
+
run_strategy :fail_slow
|
71
|
+
end
|
72
|
+
|
73
|
+
def compose
|
74
|
+
add_steps(find_checks(:default))
|
75
|
+
add_steps(find_checks(:post_upgrade))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
ForemanMaintain::UpgradeRunner.register_version('6.6', :upgrade_to_satellite_6_6)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ForemanMaintain::Scenarios
|
2
|
+
module VersionLocking
|
3
|
+
class Status < ForemanMaintain::Scenario
|
4
|
+
metadata do
|
5
|
+
label :version_locking_status
|
6
|
+
description 'detection of status of package version locking'
|
7
|
+
manual_detection
|
8
|
+
end
|
9
|
+
|
10
|
+
def compose
|
11
|
+
add_step(Procedures::Packages::LockingStatus)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Unlock < ForemanMaintain::Scenario
|
16
|
+
metadata do
|
17
|
+
label :version_locking_unlock
|
18
|
+
description 'unlocking of package versions'
|
19
|
+
manual_detection
|
20
|
+
end
|
21
|
+
|
22
|
+
def compose
|
23
|
+
add_step(Procedures::Packages::UnlockVersions)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Lock < ForemanMaintain::Scenario
|
28
|
+
metadata do
|
29
|
+
label :version_locking_lock
|
30
|
+
description 'locking of package versions'
|
31
|
+
manual_detection
|
32
|
+
end
|
33
|
+
|
34
|
+
def compose
|
35
|
+
add_step(Procedures::Packages::LockVersions)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -64,6 +64,11 @@ module ForemanMaintain
|
|
64
64
|
runner.run
|
65
65
|
end
|
66
66
|
|
67
|
+
def run_scenarios_and_exit(scenarios, rescue_scenario: nil)
|
68
|
+
run_scenario(scenarios, rescue_scenario)
|
69
|
+
exit runner.exit_code
|
70
|
+
end
|
71
|
+
|
67
72
|
def available_checks
|
68
73
|
filter = {}
|
69
74
|
filter[:tags] = tags if respond_to?(:tags)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ForemanMaintain
|
2
|
+
module Cli
|
3
|
+
class PackagesCommand < Base
|
4
|
+
subcommand 'lock', 'Prevent Foreman-related packages from automatic update' do
|
5
|
+
interactive_option
|
6
|
+
def execute
|
7
|
+
run_scenarios_and_exit(Scenarios::VersionLocking::Lock.new)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
subcommand 'unlock', 'Enable Foreman-related packages for automatic update' do
|
12
|
+
interactive_option
|
13
|
+
def execute
|
14
|
+
run_scenarios_and_exit(Scenarios::VersionLocking::Unlock.new)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
subcommand 'status', 'Check if Foreman-related packages are protected against update' do
|
19
|
+
interactive_option
|
20
|
+
def execute
|
21
|
+
run_scenarios_and_exit(Scenarios::VersionLocking::Status.new)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
subcommand 'is-locked', 'Check if update of Foreman-related packages is allowed' do
|
26
|
+
interactive_option
|
27
|
+
def execute
|
28
|
+
locked = feature(:package_manager).versions_locked?
|
29
|
+
puts "Foreman related packages are#{locked ? '' : ' not'} locked"
|
30
|
+
exit_code = locked ? 0 : 1
|
31
|
+
exit exit_code
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/foreman_maintain/cli.rb
CHANGED
@@ -9,6 +9,7 @@ require 'foreman_maintain/cli/advanced_command'
|
|
9
9
|
require 'foreman_maintain/cli/service_command'
|
10
10
|
require 'foreman_maintain/cli/restore_command'
|
11
11
|
require 'foreman_maintain/cli/maintenance_mode_command'
|
12
|
+
require 'foreman_maintain/cli/packages_command'
|
12
13
|
|
13
14
|
module ForemanMaintain
|
14
15
|
module Cli
|
@@ -20,6 +21,7 @@ module ForemanMaintain
|
|
20
21
|
subcommand 'service', 'Control applicable services', ServiceCommand
|
21
22
|
subcommand 'backup', 'Backup server', BackupCommand
|
22
23
|
subcommand 'restore', 'Restore a backup', RestoreCommand
|
24
|
+
subcommand 'packages', 'Lock/Unlock installed packages', PackagesCommand
|
23
25
|
subcommand 'advanced', 'Advanced tools for server maintenance', AdvancedCommand
|
24
26
|
subcommand 'maintenance-mode', 'Control maintenance-mode for application',
|
25
27
|
MaintenanceModeCommand
|
@@ -54,6 +54,10 @@ module ForemanMaintain
|
|
54
54
|
$CHILD_STATUS.success?
|
55
55
|
end
|
56
56
|
|
57
|
+
def command_present?(command_name)
|
58
|
+
execute?("command -v #{command_name}")
|
59
|
+
end
|
60
|
+
|
57
61
|
def execute!(command, options = {})
|
58
62
|
command_runner = Utils::CommandRunner.new(logger, command, options)
|
59
63
|
execution.puts '' if command_runner.interactive? && respond_to?(:execution)
|
@@ -81,11 +85,12 @@ module ForemanMaintain
|
|
81
85
|
File.exist?(filename)
|
82
86
|
end
|
83
87
|
|
88
|
+
def file_nonzero?(filename)
|
89
|
+
File.exist?(filename) && !File.zero?(filename)
|
90
|
+
end
|
91
|
+
|
84
92
|
def find_package(name)
|
85
|
-
|
86
|
-
if $CHILD_STATUS.success?
|
87
|
-
result
|
88
|
-
end
|
93
|
+
feature(:package_manager).find_installed_package(name)
|
89
94
|
end
|
90
95
|
|
91
96
|
def hostname
|
@@ -101,20 +106,15 @@ module ForemanMaintain
|
|
101
106
|
end
|
102
107
|
|
103
108
|
def packages_action(action, packages, options = {})
|
104
|
-
|
105
|
-
|
109
|
+
options.validate_options!(:assumeyes)
|
110
|
+
case action
|
111
|
+
when :install
|
112
|
+
feature(:package_manager).install(packages, :assumeyes => options[:assumeyes])
|
113
|
+
when :update
|
114
|
+
feature(:package_manager).update(packages, :assumeyes => options[:assumeyes])
|
115
|
+
else
|
106
116
|
raise ArgumentError, "Unexpected action #{action} expected #{expected_actions.inspect}"
|
107
117
|
end
|
108
|
-
options.validate_options!(:assumeyes)
|
109
|
-
yum_options = []
|
110
|
-
yum_options << '-y' if options[:assumeyes]
|
111
|
-
execute!("yum #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
|
112
|
-
:interactive => true)
|
113
|
-
end
|
114
|
-
|
115
|
-
def clean_all_packages
|
116
|
-
execute!('dnf clean all') if find_package('dnf')
|
117
|
-
execute!('yum clean all') if find_package('yum')
|
118
118
|
end
|
119
119
|
|
120
120
|
def package_version(name)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module ForemanMaintain::PackageManager
|
2
|
+
# rubocop:disable Lint/UnusedMethodArgument
|
3
|
+
class Base
|
4
|
+
def foreman_related_packages
|
5
|
+
raise NotImplementedError
|
6
|
+
end
|
7
|
+
|
8
|
+
# list of packages providing the version locking
|
9
|
+
def version_locking_packages
|
10
|
+
raise NotImplementedError
|
11
|
+
end
|
12
|
+
|
13
|
+
# check tools are installed and enabled
|
14
|
+
def version_locking_enabled?
|
15
|
+
raise NotImplementedError
|
16
|
+
end
|
17
|
+
|
18
|
+
# make sure the version locking tools are configured
|
19
|
+
# we can assume it is already installed
|
20
|
+
def configure_version_locking
|
21
|
+
raise NotImplementedError
|
22
|
+
end
|
23
|
+
|
24
|
+
# are the packages installed on the system?
|
25
|
+
def installed?(packages)
|
26
|
+
raise NotImplementedError
|
27
|
+
end
|
28
|
+
|
29
|
+
# find installed package and return full nvra or nil
|
30
|
+
def find_installed_package(name)
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
33
|
+
|
34
|
+
# install package
|
35
|
+
def install(packages, assumeyes: false)
|
36
|
+
raise NotImplementedError
|
37
|
+
end
|
38
|
+
|
39
|
+
# update package
|
40
|
+
def update(packages = [], assumeyes: false)
|
41
|
+
raise NotImplementedError
|
42
|
+
end
|
43
|
+
|
44
|
+
# prevent listed packages from update
|
45
|
+
def lock_versions(package_list)
|
46
|
+
raise NotImplementedError
|
47
|
+
end
|
48
|
+
|
49
|
+
# allow all packages we previously locked to update
|
50
|
+
def unlock_versions
|
51
|
+
raise NotImplementedError
|
52
|
+
end
|
53
|
+
|
54
|
+
# check if packages are locked
|
55
|
+
def versions_locked?
|
56
|
+
raise NotImplementedError
|
57
|
+
end
|
58
|
+
|
59
|
+
# clean the package manager cache
|
60
|
+
def clean_cache
|
61
|
+
raise NotImplementedError
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def sys
|
67
|
+
ForemanMaintain::Utils::SystemHelpers
|
68
|
+
end
|
69
|
+
end
|
70
|
+
# rubocop:enable Lint/UnusedMethodArgument
|
71
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ForemanMaintain::PackageManager
|
2
|
+
class Dnf < Yum
|
3
|
+
def clean_cache
|
4
|
+
dnf_action('clean', 'all')
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def dnf_action(action, packages, assumeyes: false)
|
11
|
+
yum_options = []
|
12
|
+
yum_options << '-y' if assumeyes
|
13
|
+
sys.execute!("dnf #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
|
14
|
+
:interactive => true)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module ForemanMaintain::PackageManager
|
2
|
+
class Yum < Base
|
3
|
+
VERSIONLOCK_START_CLAUSE = '## foreman-maintain - start'.freeze
|
4
|
+
VERSIONLOCK_END_CLAUSE = '## foreman-maintain - end'.freeze
|
5
|
+
VERSIONLOCK_CONFIG_FILE = '/etc/yum/pluginconf.d/versionlock.conf'.freeze
|
6
|
+
VERSIONLOCK_DEFAULT_LIST_FILE = '/etc/yum/pluginconf.d/versionlock.list'.freeze
|
7
|
+
|
8
|
+
def self.parse_envra(envra)
|
9
|
+
# envra format: 0:foreman-1.20.1.10-1.el7sat.noarch
|
10
|
+
parsed = envra.match(/\d*:?(?<name>.*)-[^-]+-[^-]+\.[^.]+/)
|
11
|
+
parsed ? Hash[parsed.names.zip(parsed.captures)].merge(:envra => envra) : nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def foreman_related_packages
|
15
|
+
query = "repoquery -a --qf='%{envra} %{repo.id}' --search foreman-installer |head -n1"
|
16
|
+
foreman_repo = sys.execute(query).split[1]
|
17
|
+
query_installed = "repoquery -a --qf='%{envra}' --repoid='#{foreman_repo}'"
|
18
|
+
sys.execute(query_installed). split("\n").map do |pkg|
|
19
|
+
self.class.parse_envra(pkg)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def version_locking_packages
|
24
|
+
%w[yum-utils yum-plugin-versionlock]
|
25
|
+
end
|
26
|
+
|
27
|
+
def lock_versions(package_list)
|
28
|
+
unlock_versions
|
29
|
+
File.open(versionlock_file, 'a') do |f|
|
30
|
+
f.puts VERSIONLOCK_START_CLAUSE
|
31
|
+
f.puts '# The following packages are locked by foreman-maintain. Do not modify!'
|
32
|
+
package_list.each { |package| f.puts "#{package[:envra]}.*" }
|
33
|
+
f.puts '# End of list of packages locked by foreman-maintain'
|
34
|
+
f.puts VERSIONLOCK_END_CLAUSE
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def unlock_versions
|
39
|
+
lock_file = versionlock_file
|
40
|
+
content = File.read(lock_file)
|
41
|
+
content = content.gsub(/#{VERSIONLOCK_START_CLAUSE}.*#{VERSIONLOCK_END_CLAUSE}\n/m, '')
|
42
|
+
File.open(lock_file, 'w') { |f| f.write content }
|
43
|
+
end
|
44
|
+
|
45
|
+
def versions_locked?
|
46
|
+
lock_file = versionlock_file
|
47
|
+
return false if lock_file.nil?
|
48
|
+
content = File.read(lock_file)
|
49
|
+
!!content.match(/#{VERSIONLOCK_START_CLAUSE}.*#{VERSIONLOCK_END_CLAUSE}\n/m)
|
50
|
+
end
|
51
|
+
|
52
|
+
def version_locking_enabled?
|
53
|
+
installed?(version_locking_packages) && versionlock_config =~ /^\s*enabled\s+=\s+1/ \
|
54
|
+
&& File.exist?(versionlock_file)
|
55
|
+
end
|
56
|
+
|
57
|
+
# make sure the version locking tools are configured
|
58
|
+
# enabled = 1
|
59
|
+
# locklist = <list file>
|
60
|
+
# we can assume it is already installed
|
61
|
+
def configure_version_locking
|
62
|
+
config = versionlock_config
|
63
|
+
config += "\n" unless config[-1] == "\n"
|
64
|
+
enabled_re = /^\s*enabled\s*=.*$/
|
65
|
+
if enabled_re.match(config)
|
66
|
+
config = config.gsub(enabled_re, 'enabled = 1')
|
67
|
+
else
|
68
|
+
config += "enabled = 1\n"
|
69
|
+
end
|
70
|
+
unless config =~ /^\s*locklist\s*=.*$/
|
71
|
+
config += "locklist = #{VERSIONLOCK_DEFAULT_LIST_FILE}\n"
|
72
|
+
end
|
73
|
+
File.open(versionlock_config_file, 'w') { |file| file.puts config }
|
74
|
+
FileUtils.touch(versionlock_file)
|
75
|
+
end
|
76
|
+
|
77
|
+
def installed?(packages)
|
78
|
+
packages_list = [packages].flatten(1).map { |pkg| "'#{pkg}'" }.join(' ')
|
79
|
+
sys.execute?(%(rpm -q #{packages_list}))
|
80
|
+
end
|
81
|
+
|
82
|
+
def find_installed_package(name)
|
83
|
+
status, result = sys.execute_with_status(%(rpm -q '#{name}'))
|
84
|
+
if status == 0
|
85
|
+
result
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def install(packages, assumeyes: false)
|
90
|
+
yum_action('install', packages, :assumeyes => assumeyes)
|
91
|
+
end
|
92
|
+
|
93
|
+
def update(packages = [], assumeyes: false)
|
94
|
+
yum_action('update', packages, :assumeyes => assumeyes)
|
95
|
+
end
|
96
|
+
|
97
|
+
def clean_cache
|
98
|
+
yum_action('clean', 'all')
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def versionlock_config
|
104
|
+
File.exist?(versionlock_config_file) ? File.read(versionlock_config_file) : ''
|
105
|
+
end
|
106
|
+
|
107
|
+
def versionlock_config_file
|
108
|
+
VERSIONLOCK_CONFIG_FILE
|
109
|
+
end
|
110
|
+
|
111
|
+
def versionlock_file
|
112
|
+
result = versionlock_config.match(/^\s*locklist\s*=\s*(\S+)/)
|
113
|
+
result.nil? ? nil : File.expand_path(result.captures[0])
|
114
|
+
end
|
115
|
+
|
116
|
+
def yum_action(action, packages, assumeyes: false)
|
117
|
+
yum_options = []
|
118
|
+
packages = [packages].flatten(1)
|
119
|
+
yum_options << '-y' if assumeyes
|
120
|
+
yum_options_s = yum_options.empty? ? '' : ' ' + yum_options.join(' ')
|
121
|
+
packages_s = packages.empty? ? '' : ' ' + packages.join(' ')
|
122
|
+
sys.execute!("yum#{yum_options_s} #{action}#{packages_s}",
|
123
|
+
:interactive => true)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -317,7 +317,7 @@ module ForemanMaintain
|
|
317
317
|
|
318
318
|
recommend << <<-MESSAGE.strip_heredoc
|
319
319
|
The steps in warning state itself might not mean there is an error,
|
320
|
-
but it should be
|
320
|
+
but it should be reviewed to ensure the behavior is expected
|
321
321
|
MESSAGE
|
322
322
|
end
|
323
323
|
puts((message + recommend).join("\n"))
|
data/lib/foreman_maintain.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_maintain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Nečas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- definitions/checks/root_user.rb
|
152
152
|
- definitions/checks/services_up.rb
|
153
153
|
- definitions/checks/system_registration.rb
|
154
|
+
- definitions/checks/version_locking_enabled.rb
|
154
155
|
- definitions/features/candlepin.rb
|
155
156
|
- definitions/features/candlepin_database.rb
|
156
157
|
- definitions/features/cron.rb
|
@@ -169,6 +170,7 @@ files:
|
|
169
170
|
- definitions/features/iptables.rb
|
170
171
|
- definitions/features/katello.rb
|
171
172
|
- definitions/features/mongo.rb
|
173
|
+
- definitions/features/package_manager.rb
|
172
174
|
- definitions/features/pulp.rb
|
173
175
|
- definitions/features/puppet_server.rb
|
174
176
|
- definitions/features/service.rb
|
@@ -214,7 +216,11 @@ files:
|
|
214
216
|
- definitions/procedures/iptables/remove_maintenance_mode_chain.rb
|
215
217
|
- definitions/procedures/knowledge_base_article.rb
|
216
218
|
- definitions/procedures/maintenance_mode/is_enabled.rb
|
219
|
+
- definitions/procedures/packages/enable_version_locking.rb
|
217
220
|
- definitions/procedures/packages/install.rb
|
221
|
+
- definitions/procedures/packages/lock_versions.rb
|
222
|
+
- definitions/procedures/packages/locking_status.rb
|
223
|
+
- definitions/procedures/packages/unlock_versions.rb
|
218
224
|
- definitions/procedures/packages/update.rb
|
219
225
|
- definitions/procedures/passenger_recycler.rb
|
220
226
|
- definitions/procedures/pulp/migrate.rb
|
@@ -257,6 +263,8 @@ files:
|
|
257
263
|
- definitions/scenarios/upgrade_to_satellite_6_4_z.rb
|
258
264
|
- definitions/scenarios/upgrade_to_satellite_6_5.rb
|
259
265
|
- definitions/scenarios/upgrade_to_satellite_6_5_z.rb
|
266
|
+
- definitions/scenarios/upgrade_to_satellite_6_6.rb
|
267
|
+
- definitions/scenarios/version_locking.rb
|
260
268
|
- lib/foreman_maintain.rb
|
261
269
|
- lib/foreman_maintain/check.rb
|
262
270
|
- lib/foreman_maintain/cli.rb
|
@@ -271,6 +279,7 @@ files:
|
|
271
279
|
- lib/foreman_maintain/cli/base.rb
|
272
280
|
- lib/foreman_maintain/cli/health_command.rb
|
273
281
|
- lib/foreman_maintain/cli/maintenance_mode_command.rb
|
282
|
+
- lib/foreman_maintain/cli/packages_command.rb
|
274
283
|
- lib/foreman_maintain/cli/restore_command.rb
|
275
284
|
- lib/foreman_maintain/cli/service_command.rb
|
276
285
|
- lib/foreman_maintain/cli/transform_clamp_options.rb
|
@@ -294,6 +303,10 @@ files:
|
|
294
303
|
- lib/foreman_maintain/error.rb
|
295
304
|
- lib/foreman_maintain/executable.rb
|
296
305
|
- lib/foreman_maintain/feature.rb
|
306
|
+
- lib/foreman_maintain/package_manager.rb
|
307
|
+
- lib/foreman_maintain/package_manager/base.rb
|
308
|
+
- lib/foreman_maintain/package_manager/dnf.rb
|
309
|
+
- lib/foreman_maintain/package_manager/yum.rb
|
297
310
|
- lib/foreman_maintain/param.rb
|
298
311
|
- lib/foreman_maintain/procedure.rb
|
299
312
|
- lib/foreman_maintain/reporter.rb
|
@@ -344,7 +357,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
344
357
|
version: '0'
|
345
358
|
requirements: []
|
346
359
|
rubyforge_project:
|
347
|
-
rubygems_version: 2.
|
360
|
+
rubygems_version: 2.7.9
|
348
361
|
signing_key:
|
349
362
|
specification_version: 4
|
350
363
|
summary: Foreman maintenance tool belt
|