foreman_maintain 0.0.9 → 0.0.10
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 +4 -4
 - data/README.md +3 -3
 - data/definitions/checks/disk_speed_minimal.rb +9 -5
 - data/definitions/checks/foreman_tasks/not_running.rb +20 -2
 - data/definitions/checks/hammer_ping.rb +16 -0
 - data/definitions/checks/system_registration.rb +8 -8
 - data/definitions/features/downstream.rb +9 -1
 - data/definitions/features/foreman_proxy.rb +4 -1
 - data/definitions/features/foreman_server.rb +12 -0
 - data/definitions/features/foreman_tasks.rb +49 -4
 - data/definitions/features/hammer.rb +55 -0
 - data/definitions/features/katello.rb +17 -0
 - data/definitions/features/katello_service.rb +54 -5
 - data/definitions/procedures/foreman_tasks/fetch_tasks_status.rb +15 -0
 - data/definitions/procedures/foreman_tasks/ui_investigate.rb +1 -1
 - data/definitions/procedures/katello_service/restart.rb +24 -0
 - data/definitions/procedures/katello_service/start.rb +19 -0
 - data/definitions/procedures/katello_service/stop.rb +17 -0
 - data/definitions/scenarios/upgrade_to_satellite_6_2.rb +3 -1
 - data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +3 -1
 - data/definitions/scenarios/upgrade_to_satellite_6_3.rb +3 -1
 - data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +3 -1
 - data/lib/foreman_maintain/cli/advanced/procedure/abstract_by_tag_command.rb +2 -2
 - data/lib/foreman_maintain/cli/transform_clamp_options.rb +2 -2
 - data/lib/foreman_maintain/cli/upgrade_command.rb +6 -1
 - data/lib/foreman_maintain/concerns/system_helpers.rb +67 -45
 - data/lib/foreman_maintain/config.rb +2 -2
 - data/lib/foreman_maintain/detector.rb +1 -1
 - data/lib/foreman_maintain/executable.rb +1 -3
 - data/lib/foreman_maintain/runner/execution.rb +1 -1
 - data/lib/foreman_maintain/utils/disk/io/block_device.rb +1 -1
 - data/lib/foreman_maintain/utils/disk/io/file_system.rb +1 -1
 - data/lib/foreman_maintain/version.rb +1 -1
 - data/lib/foreman_maintain.rb +2 -1
 - metadata +11 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6541f1ff74d6b4f49f684fdf4a90169407fff41c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 0de3f21c5ec4b3f20da234dd4ab6de64914e1da4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c728131aed58b4939b2d8b2e1d4c0df2adfa192a28523643072ee16a1348f9136feb178987bd4a230ffc123adad54298be86697b6a657956c6c970c49313bb25
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 643d48edb17bd4d7dafc84fd0a80b0404152c9ee77b834b88a4d10c960c107fe5b71bdb2da5a0801552d4cc31017bbe870f55c7b0b1f4154e79a62e2c7dd6ede
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -85,7 +85,7 @@ state of the system. 
     | 
|
| 
       85 
85 
     | 
    
         | 
| 
       86 
86 
     | 
    
         
             
            #### Satellite notes
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
            To use custom  
     | 
| 
      
 88 
     | 
    
         
            +
            To use custom organization/activation key for configuring repositories during
         
     | 
| 
       89 
89 
     | 
    
         
             
            upgrade, set the following environment variables
         
     | 
| 
       90 
90 
     | 
    
         | 
| 
       91 
91 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -116,7 +116,7 @@ The definitions for this components are present in `definitions` folder. 
     | 
|
| 
       116 
116 
     | 
    
         
             
            ### Features
         
     | 
| 
       117 
117 
     | 
    
         | 
| 
       118 
118 
     | 
    
         
             
            Before `foreman_maintain` starts, it takes the set of `features` definition
         
     | 
| 
       119 
     | 
    
         
            -
            and determines their  
     | 
| 
      
 119 
     | 
    
         
            +
            and determines their presence by running their `confine` blocks against
         
     | 
| 
       120 
120 
     | 
    
         
             
            the system.
         
     | 
| 
       121 
121 
     | 
    
         | 
| 
       122 
122 
     | 
    
         
             
            The `confine` block can run an external command to check if the feature
         
     | 
| 
         @@ -154,7 +154,7 @@ scenarios) from version-specific nuances. 
     | 
|
| 
       154 
154 
     | 
    
         
             
            Checks define assertions to determine status of the system.
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
       156 
156 
     | 
    
         
             
            ```ruby
         
     | 
| 
       157 
     | 
    
         
            -
            class Checks:: 
     | 
| 
      
 157 
     | 
    
         
            +
            class Checks::ForemanIsRunning < ForemanMaintain::Check
         
     | 
| 
       158 
158 
     | 
    
         
             
              metadata do
         
     | 
| 
       159 
159 
     | 
    
         
             
                for_feature :foreman
         
     | 
| 
       160 
160 
     | 
    
         
             
                description 'check foreman service is running'
         
     | 
| 
         @@ -3,12 +3,16 @@ class Checks::DiskSpeedMinimal < ForemanMaintain::Check 
     | 
|
| 
       3 
3 
     | 
    
         
             
                label :disk_io
         
     | 
| 
       4 
4 
     | 
    
         
             
                description 'Check for recommended disk speed of pulp, mongodb, pgsql dir.'
         
     | 
| 
       5 
5 
     | 
    
         
             
                tags :pre_upgrade
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       6 
7 
     | 
    
         
             
                preparation_steps { Procedures::Packages::Install.new(:packages => %w[hdparm fio]) }
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                confine do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  feature(:katello)
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
       7 
12 
     | 
    
         
             
              end
         
     | 
| 
       8 
13 
     | 
    
         | 
| 
       9 
14 
     | 
    
         
             
              EXPECTED_IO = 80
         
     | 
| 
       10 
     | 
    
         
            -
              DEFAULT_UNIT 
     | 
| 
       11 
     | 
    
         
            -
              DEFAULT_DIRS   = ['/var/lib/pulp', '/var/lib/mongodb', '/var/lib/pgsql'].freeze
         
     | 
| 
      
 15 
     | 
    
         
            +
              DEFAULT_UNIT = 'MB/sec'.freeze
         
     | 
| 
       12 
16 
     | 
    
         | 
| 
       13 
17 
     | 
    
         
             
              def run
         
     | 
| 
       14 
18 
     | 
    
         
             
                with_spinner(description) do |spinner|
         
     | 
| 
         @@ -20,14 +24,14 @@ class Checks::DiskSpeedMinimal < ForemanMaintain::Check 
     | 
|
| 
       20 
24 
     | 
    
         
             
              end
         
     | 
| 
       21 
25 
     | 
    
         | 
| 
       22 
26 
     | 
    
         
             
              def check_only_single_device?
         
     | 
| 
       23 
     | 
    
         
            -
                 
     | 
| 
      
 27 
     | 
    
         
            +
                feature(:katello).data_dirs.map do |dir|
         
     | 
| 
       24 
28 
     | 
    
         
             
                  ForemanMaintain::Utils::Disk::Device.new(dir).name
         
     | 
| 
       25 
29 
     | 
    
         
             
                end.uniq.length <= 1
         
     | 
| 
       26 
30 
     | 
    
         
             
              end
         
     | 
| 
       27 
31 
     | 
    
         | 
| 
       28 
32 
     | 
    
         
             
              def dirs_to_check
         
     | 
| 
       29 
     | 
    
         
            -
                return  
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
      
 33 
     | 
    
         
            +
                return feature(:katello).data_dirs.first(1) if check_only_single_device?
         
     | 
| 
      
 34 
     | 
    
         
            +
                feature(:katello).data_dirs
         
     | 
| 
       31 
35 
     | 
    
         
             
              end
         
     | 
| 
       32 
36 
     | 
    
         | 
| 
       33 
37 
     | 
    
         
             
              private
         
     | 
| 
         @@ -9,8 +9,26 @@ module Checks::ForemanTasks 
     | 
|
| 
       9 
9 
     | 
    
         
             
                end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                def run
         
     | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                  task_count = feature(:foreman_tasks).running_tasks_count
         
     | 
| 
      
 13 
     | 
    
         
            +
                  assert(task_count == 0,
         
     | 
| 
      
 14 
     | 
    
         
            +
                         failure_message(task_count),
         
     | 
| 
      
 15 
     | 
    
         
            +
                         :next_steps =>
         
     | 
| 
      
 16 
     | 
    
         
            +
                           [Procedures::ForemanTasks::FetchTasksStatus.new(:state => 'running'),
         
     | 
| 
      
 17 
     | 
    
         
            +
                            Procedures::ForemanTasks::UiInvestigate.new(
         
     | 
| 
      
 18 
     | 
    
         
            +
                              'search_query' => search_query_for_running_tasks
         
     | 
| 
      
 19 
     | 
    
         
            +
                            )])
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                private
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def search_query_for_running_tasks
         
     | 
| 
      
 25 
     | 
    
         
            +
                  'state = running AND '\
         
     | 
| 
      
 26 
     | 
    
         
            +
                  "label !^(#{Features::ForemanTasks::EXCLUDE_ACTIONS_FOR_RUNNING_TASKS.join(' ')})"
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def failure_message(task_count)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  "There are #{task_count} active task(s) in the system." \
         
     | 
| 
      
 31 
     | 
    
         
            +
                  "\nPlease wait for these to complete or cancel them from the Monitor tab."
         
     | 
| 
       14 
32 
     | 
    
         
             
                end
         
     | 
| 
       15 
33 
     | 
    
         
             
              end
         
     | 
| 
       16 
34 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Checks::HammerPing < ForemanMaintain::Check
         
     | 
| 
      
 2 
     | 
    
         
            +
              include ForemanMaintain::Concerns::Hammer
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata do
         
     | 
| 
      
 4 
     | 
    
         
            +
                label :hammer_ping
         
     | 
| 
      
 5 
     | 
    
         
            +
                for_feature :hammer
         
     | 
| 
      
 6 
     | 
    
         
            +
                description 'Check whether all services are running using hammer ping'
         
     | 
| 
      
 7 
     | 
    
         
            +
                tags :default
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def run
         
     | 
| 
      
 11 
     | 
    
         
            +
                result = feature(:hammer).hammer_ping_cmd
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert(result[:success],
         
     | 
| 
      
 13 
     | 
    
         
            +
                       result[:message],
         
     | 
| 
      
 14 
     | 
    
         
            +
                       :next_steps => Procedures::KatelloService::Restart.new(:only => result[:data]))
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -5,22 +5,18 @@ class Checks::SystemRegistration < ForemanMaintain::Check 
     | 
|
| 
       5 
5 
     | 
    
         
             
                tags :default
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                confine do
         
     | 
| 
       8 
     | 
    
         
            -
                  file_exists?('/etc/rhsm/rhsm.conf')
         
     | 
| 
      
 8 
     | 
    
         
            +
                  file_exists?('/etc/rhsm/rhsm.conf') &&
         
     | 
| 
      
 9 
     | 
    
         
            +
                    !feature(:foreman_server) &&
         
     | 
| 
      
 10 
     | 
    
         
            +
                    feature(:foreman_proxy)
         
     | 
| 
       9 
11 
     | 
    
         
             
                end
         
     | 
| 
       10 
12 
     | 
    
         
             
              end
         
     | 
| 
       11 
13 
     | 
    
         | 
| 
       12 
14 
     | 
    
         
             
              def run
         
     | 
| 
       13 
     | 
    
         
            -
                if  
     | 
| 
      
 15 
     | 
    
         
            +
                if rhsm_hostname_eql_hostname?
         
     | 
| 
       14 
16 
     | 
    
         
             
                  warn! 'System is self registered'
         
     | 
| 
       15 
     | 
    
         
            -
                else
         
     | 
| 
       16 
     | 
    
         
            -
                  puts 'System is not self registered'
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              def system_is_self_registerd?
         
     | 
| 
       21 
     | 
    
         
            -
                rhsm_hostname.casecmp(hostname).zero?
         
     | 
| 
       22 
     | 
    
         
            -
              end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
20 
     | 
    
         
             
              def rhsm_hostname
         
     | 
| 
       25 
21 
     | 
    
         
             
                execute("grep '\\bhostname\\b' < #{rhsm_conf_file}  | grep -v '^#'").sub(/.*?=/, '').strip
         
     | 
| 
       26 
22 
     | 
    
         
             
              end
         
     | 
| 
         @@ -28,4 +24,8 @@ class Checks::SystemRegistration < ForemanMaintain::Check 
     | 
|
| 
       28 
24 
     | 
    
         
             
              def rhsm_conf_file
         
     | 
| 
       29 
25 
     | 
    
         
             
                '/etc/rhsm/rhsm.conf'
         
     | 
| 
       30 
26 
     | 
    
         
             
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def rhsm_hostname_eql_hostname?
         
     | 
| 
      
 29 
     | 
    
         
            +
                @result ||= rhsm_hostname.casecmp(hostname).zero?
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
       31 
31 
     | 
    
         
             
            end
         
     | 
| 
         @@ -34,9 +34,17 @@ class Features::Downstream < ForemanMaintain::Feature 
     | 
|
| 
       34 
34 
     | 
    
         
             
              def rh_repos(sat_version)
         
     | 
| 
       35 
35 
     | 
    
         
             
                sat_version = version(sat_version)
         
     | 
| 
       36 
36 
     | 
    
         
             
                rh_version_major = execute!('facter operatingsystemmajrelease')
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                sat_repo_id = "rhel-#{rh_version_major}-server-satellite-#{sat_version.major}"\
         
     | 
| 
      
 39 
     | 
    
         
            +
                              ".#{sat_version.minor}-rpms"
         
     | 
| 
      
 40 
     | 
    
         
            +
                # Override to use Beta repositories for 6.3 until GA
         
     | 
| 
      
 41 
     | 
    
         
            +
                if sat_version.to_s == '6.3'
         
     | 
| 
      
 42 
     | 
    
         
            +
                  sat_repo_id = "rhel-server-#{rh_version_major}-satellite-6-beta-rpms"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       37 
45 
     | 
    
         
             
                ["rhel-#{rh_version_major}-server-rpms",
         
     | 
| 
       38 
46 
     | 
    
         
             
                 "rhel-server-rhscl-#{rh_version_major}-rpms",
         
     | 
| 
       39 
     | 
    
         
            -
                  
     | 
| 
      
 47 
     | 
    
         
            +
                 sat_repo_id]
         
     | 
| 
       40 
48 
     | 
    
         
             
              end
         
     | 
| 
       41 
49 
     | 
    
         | 
| 
       42 
50 
     | 
    
         
             
              def version_from_source
         
     | 
| 
         @@ -1,6 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Features::ForemanProxy < ForemanMaintain::Feature
         
     | 
| 
       2 
2 
     | 
    
         
             
              metadata do
         
     | 
| 
       3 
3 
     | 
    
         
             
                label :foreman_proxy
         
     | 
| 
      
 4 
     | 
    
         
            +
                confine do
         
     | 
| 
      
 5 
     | 
    
         
            +
                  find_package('foreman-proxy')
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
       4 
7 
     | 
    
         
             
              end
         
     | 
| 
       5 
8 
     | 
    
         | 
| 
       6 
9 
     | 
    
         
             
              attr_reader :dhcpd_conf_file, :cert_path
         
     | 
| 
         @@ -36,7 +39,7 @@ class Features::ForemanProxy < ForemanMaintain::Feature 
     | 
|
| 
       36 
39 
     | 
    
         
             
                array_output = curl_resp.split(/\r\n/)
         
     | 
| 
       37 
40 
     | 
    
         
             
                result_array = array_output.last.split(/\n/)
         
     | 
| 
       38 
41 
     | 
    
         
             
                curl_http_status = result_array.delete_at(result_array.length - 1).strip.to_i
         
     | 
| 
       39 
     | 
    
         
            -
                curl_http_resp =  
     | 
| 
      
 42 
     | 
    
         
            +
                curl_http_resp = parse_json(result_array.join(''))
         
     | 
| 
       40 
43 
     | 
    
         
             
                ForemanMaintain::Utils::CurlResponse.new(
         
     | 
| 
       41 
44 
     | 
    
         
             
                  curl_http_resp,
         
     | 
| 
       42 
45 
     | 
    
         
             
                  curl_http_status,
         
     | 
| 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Features::ForemanTasks < ForemanMaintain::Feature
         
     | 
| 
       2 
2 
     | 
    
         
             
              MIN_AGE = 30
         
     | 
| 
      
 3 
     | 
    
         
            +
              TIMEOUT_FOR_TASKS_STATUS = 300
         
     | 
| 
      
 4 
     | 
    
         
            +
              RETRY_INTERVAL_FOR_TASKS_STATE = 10
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
       4 
6 
     | 
    
         
             
              SAFE_TO_DELETE = %w[
         
     | 
| 
       5 
7 
     | 
    
         
             
                Actions::Katello::Host::GenerateApplicability
         
     | 
| 
         @@ -11,6 +13,11 @@ class Features::ForemanTasks < ForemanMaintain::Feature 
     | 
|
| 
       11 
13 
     | 
    
         
             
                Actions::Katello::EventQueue::Monitor
         
     | 
| 
       12 
14 
     | 
    
         
             
              ].freeze
         
     | 
| 
       13 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
              EXCLUDE_ACTIONS_FOR_RUNNING_TASKS = %w[
         
     | 
| 
      
 17 
     | 
    
         
            +
                Actions::Candlepin::ListenOnCandlepinEvents
         
     | 
| 
      
 18 
     | 
    
         
            +
                Actions::Katello::EventQueue::Monitor
         
     | 
| 
      
 19 
     | 
    
         
            +
              ].freeze
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       14 
21 
     | 
    
         
             
              metadata do
         
     | 
| 
       15 
22 
     | 
    
         
             
                label :foreman_tasks
         
     | 
| 
       16 
23 
     | 
    
         | 
| 
         @@ -33,10 +40,14 @@ class Features::ForemanTasks < ForemanMaintain::Feature 
     | 
|
| 
       33 
40 
     | 
    
         
             
              end
         
     | 
| 
       34 
41 
     | 
    
         | 
| 
       35 
42 
     | 
    
         
             
              def running_tasks_count
         
     | 
| 
       36 
     | 
    
         
            -
                 
     | 
| 
       37 
     | 
    
         
            -
                 
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                actions_to_exclude = quotize(EXCLUDE_ACTIONS_FOR_RUNNING_TASKS)
         
     | 
| 
      
 44 
     | 
    
         
            +
                sql = <<-SQL
         
     | 
| 
      
 45 
     | 
    
         
            +
                  SELECT count(*) AS count
         
     | 
| 
      
 46 
     | 
    
         
            +
                    FROM foreman_tasks_tasks
         
     | 
| 
      
 47 
     | 
    
         
            +
                    WHERE state IN ('running') AND
         
     | 
| 
      
 48 
     | 
    
         
            +
                    label NOT IN (#{actions_to_exclude})
         
     | 
| 
      
 49 
     | 
    
         
            +
                SQL
         
     | 
| 
      
 50 
     | 
    
         
            +
                feature(:foreman_database).query(sql).first['count'].to_i
         
     | 
| 
       40 
51 
     | 
    
         
             
              end
         
     | 
| 
       41 
52 
     | 
    
         | 
| 
       42 
53 
     | 
    
         
             
              def paused_tasks_count(ignored_tasks = [])
         
     | 
| 
         @@ -86,8 +97,42 @@ class Features::ForemanTasks < ForemanMaintain::Feature 
     | 
|
| 
       86 
97 
     | 
    
         
             
                hammer('task resume')
         
     | 
| 
       87 
98 
     | 
    
         
             
              end
         
     | 
| 
       88 
99 
     | 
    
         | 
| 
      
 100 
     | 
    
         
            +
              def fetch_tasks_status(state, spinner)
         
     | 
| 
      
 101 
     | 
    
         
            +
                Timeout.timeout(TIMEOUT_FOR_TASKS_STATUS) do
         
     | 
| 
      
 102 
     | 
    
         
            +
                  check_task_count(state, spinner)
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
              rescue Timeout::Error => e
         
     | 
| 
      
 105 
     | 
    
         
            +
                logger.error e.message
         
     | 
| 
      
 106 
     | 
    
         
            +
                puts "\nTimeout: #{e.message}. Try again."
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
       89 
109 
     | 
    
         
             
              private
         
     | 
| 
       90 
110 
     | 
    
         | 
| 
      
 111 
     | 
    
         
            +
              def check_task_count(state, spinner)
         
     | 
| 
      
 112 
     | 
    
         
            +
                loop do
         
     | 
| 
      
 113 
     | 
    
         
            +
                  spinner.update "Try checking status of #{state} task(s)"
         
     | 
| 
      
 114 
     | 
    
         
            +
                  task_count = call_tasks_count_by_state(state)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  break if task_count == 0
         
     | 
| 
      
 116 
     | 
    
         
            +
                  puts "\nThere are #{task_count} #{state} tasks."
         
     | 
| 
      
 117 
     | 
    
         
            +
                  spinner.update "Waiting #{RETRY_INTERVAL_FOR_TASKS_STATE} seconds before retry."
         
     | 
| 
      
 118 
     | 
    
         
            +
                  sleep RETRY_INTERVAL_FOR_TASKS_STATE
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
              rescue StandardError => e
         
     | 
| 
      
 121 
     | 
    
         
            +
                logger.error e.message
         
     | 
| 
      
 122 
     | 
    
         
            +
              end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
              def call_tasks_count_by_state(state)
         
     | 
| 
      
 125 
     | 
    
         
            +
                case state
         
     | 
| 
      
 126 
     | 
    
         
            +
                when 'running'
         
     | 
| 
      
 127 
     | 
    
         
            +
                  running_tasks_count
         
     | 
| 
      
 128 
     | 
    
         
            +
                when 'paused'
         
     | 
| 
      
 129 
     | 
    
         
            +
                  paused_tasks_count
         
     | 
| 
      
 130 
     | 
    
         
            +
                else
         
     | 
| 
      
 131 
     | 
    
         
            +
                  logger.error "No count method defined for state #{state}."
         
     | 
| 
      
 132 
     | 
    
         
            +
                  raise "Unsupported for state #{state}."
         
     | 
| 
      
 133 
     | 
    
         
            +
                end
         
     | 
| 
      
 134 
     | 
    
         
            +
              end
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
       91 
136 
     | 
    
         
             
              def parent_backup_dir
         
     | 
| 
       92 
137 
     | 
    
         
             
                File.expand_path(ForemanMaintain.config.backup_dir)
         
     | 
| 
       93 
138 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Features::Hammer < ForemanMaintain::Feature
         
     | 
| 
      
 2 
     | 
    
         
            +
              metadata do
         
     | 
| 
      
 3 
     | 
    
         
            +
                label :hammer
         
     | 
| 
      
 4 
     | 
    
         
            +
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              SERVICES_MAPPING = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                'candlepin_auth' => %w[postgresql tomcat],
         
     | 
| 
      
 8 
     | 
    
         
            +
                'candlepin' => %w[postgresql tomcat],
         
     | 
| 
      
 9 
     | 
    
         
            +
                'pulp_auth' => %w[pulp_resource_manager pulp_workers pulp_celerybeat],
         
     | 
| 
      
 10 
     | 
    
         
            +
                'pulp' => %w[pulp_resource_manager pulp_workers pulp_celerybeat],
         
     | 
| 
      
 11 
     | 
    
         
            +
                'foreman_tasks' => %w[foreman-tasks]
         
     | 
| 
      
 12 
     | 
    
         
            +
              }.freeze
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def hammer_ping_cmd
         
     | 
| 
      
 15 
     | 
    
         
            +
                cmd_output = exec_hammer_cmd('--output json ping', true)
         
     | 
| 
      
 16 
     | 
    
         
            +
                return init_result_obj(false, cmd_output) if cmd_output.is_a?(String)
         
     | 
| 
      
 17 
     | 
    
         
            +
                resources_failed = find_resources_which_failed(cmd_output.first)
         
     | 
| 
      
 18 
     | 
    
         
            +
                return init_result_obj if resources_failed.empty?
         
     | 
| 
      
 19 
     | 
    
         
            +
                services = map_resources_with_services(resources_failed)
         
     | 
| 
      
 20 
     | 
    
         
            +
                msg_to_show = "#{resources_failed.join(', ')} resource(s) are failing."
         
     | 
| 
      
 21 
     | 
    
         
            +
                init_result_obj(false, msg_to_show, services)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def find_resources_which_failed(hammer_ping_output)
         
     | 
| 
      
 25 
     | 
    
         
            +
                resources_failed = []
         
     | 
| 
      
 26 
     | 
    
         
            +
                hammer_ping_output.each do |resource, resp_obj|
         
     | 
| 
      
 27 
     | 
    
         
            +
                  resources_failed << resource if /FAIL/ =~ resp_obj['Status']
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
                resources_failed
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              private
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def map_resources_with_services(resources)
         
     | 
| 
      
 35 
     | 
    
         
            +
                service_names = []
         
     | 
| 
      
 36 
     | 
    
         
            +
                resources.each do |resource|
         
     | 
| 
      
 37 
     | 
    
         
            +
                  service_names.concat(SERVICES_MAPPING[resource])
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
                service_names
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              def init_result_obj(success_val = true, message = '', data = [])
         
     | 
| 
      
 43 
     | 
    
         
            +
                {
         
     | 
| 
      
 44 
     | 
    
         
            +
                  :success => success_val,
         
     | 
| 
      
 45 
     | 
    
         
            +
                  :message => message,
         
     | 
| 
      
 46 
     | 
    
         
            +
                  :data => data
         
     | 
| 
      
 47 
     | 
    
         
            +
                }
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def exec_hammer_cmd(cmd, required_json = false)
         
     | 
| 
      
 51 
     | 
    
         
            +
                response = ForemanMaintain::Utils::Hammer.instance.run_command(cmd)
         
     | 
| 
      
 52 
     | 
    
         
            +
                json_str = parse_json(response) if required_json
         
     | 
| 
      
 53 
     | 
    
         
            +
                json_str ? json_str : response
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Features::Katello < ForemanMaintain::Feature
         
     | 
| 
      
 2 
     | 
    
         
            +
              metadata do
         
     | 
| 
      
 3 
     | 
    
         
            +
                label :katello
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                confine do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  find_package('katello')
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def data_dirs
         
     | 
| 
      
 11 
     | 
    
         
            +
                @dirs ||= ['/var/lib/pulp', '/var/lib/mongodb', '/var/lib/pgsql']
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def current_version
         
     | 
| 
      
 15 
     | 
    
         
            +
                @current_version ||= rpm_version('katello')
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -3,20 +3,22 @@ class Features::KatelloService < ForemanMaintain::Feature 
     | 
|
| 
       3 
3 
     | 
    
         
             
                label :katello_service
         
     | 
| 
       4 
4 
     | 
    
         
             
              end
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
      
 6 
     | 
    
         
            +
              RETRIES_FOR_SERVICES_RESTART = 5
         
     | 
| 
      
 7 
     | 
    
         
            +
              PING_RETRY_INTERVAL = 30
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       6 
9 
     | 
    
         
             
              def make_stop(spinner, options = {})
         
     | 
| 
       7 
10 
     | 
    
         
             
                services = find_services_for_only_filter(running_services, options)
         
     | 
| 
       8 
11 
     | 
    
         
             
                if services.empty?
         
     | 
| 
       9 
12 
     | 
    
         
             
                  spinner.update 'No katello service running'
         
     | 
| 
       10 
     | 
    
         
            -
                  yield
         
     | 
| 
      
 13 
     | 
    
         
            +
                  yield if block_given?
         
     | 
| 
       11 
14 
     | 
    
         
             
                else
         
     | 
| 
       12 
15 
     | 
    
         
             
                  begin
         
     | 
| 
       13 
16 
     | 
    
         
             
                    filters = "--only #{services.join(',')}"
         
     | 
| 
       14 
17 
     | 
    
         
             
                    spinner.update 'Stopping katello running services..'
         
     | 
| 
       15 
18 
     | 
    
         
             
                    execute!("katello-service stop #{filters}")
         
     | 
| 
       16 
     | 
    
         
            -
                    yield
         
     | 
| 
      
 19 
     | 
    
         
            +
                    yield if block_given?
         
     | 
| 
       17 
20 
     | 
    
         
             
                  ensure
         
     | 
| 
       18 
     | 
    
         
            -
                    spinner 
     | 
| 
       19 
     | 
    
         
            -
                    execute("katello-service start #{filters}")
         
     | 
| 
      
 21 
     | 
    
         
            +
                    start_stopped_services_using_filters(spinner, filters) if block_given?
         
     | 
| 
       20 
22 
     | 
    
         
             
                  end
         
     | 
| 
       21 
23 
     | 
    
         
             
                end
         
     | 
| 
       22 
24 
     | 
    
         
             
              end
         
     | 
| 
         @@ -27,13 +29,60 @@ class Features::KatelloService < ForemanMaintain::Feature 
     | 
|
| 
       27 
29 
     | 
    
         
             
                  spinner.update 'No katello service to start'
         
     | 
| 
       28 
30 
     | 
    
         
             
                else
         
     | 
| 
       29 
31 
     | 
    
         
             
                  filters = "--only #{services.join(',')}"
         
     | 
| 
       30 
     | 
    
         
            -
                  spinner.update 'Starting  
     | 
| 
      
 32 
     | 
    
         
            +
                  spinner.update 'Starting katello services..'
         
     | 
| 
       31 
33 
     | 
    
         
             
                  execute!("katello-service start #{filters}")
         
     | 
| 
       32 
34 
     | 
    
         
             
                end
         
     | 
| 
       33 
35 
     | 
    
         
             
              end
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
              def restart(options = {})
         
     | 
| 
      
 38 
     | 
    
         
            +
                if options[:only] || options[:exclude]
         
     | 
| 
      
 39 
     | 
    
         
            +
                  filters = construct_filters_for_restart(options)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  execute!("katello-service restart #{filters}")
         
     | 
| 
      
 41 
     | 
    
         
            +
                else
         
     | 
| 
      
 42 
     | 
    
         
            +
                  execute!('katello-service restart')
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              def hammer_ping_retry(spinner)
         
     | 
| 
      
 47 
     | 
    
         
            +
                RETRIES_FOR_SERVICES_RESTART.times do |retry_count|
         
     | 
| 
      
 48 
     | 
    
         
            +
                  msg = "Try #{retry_count + 1}/#{RETRIES_FOR_SERVICES_RESTART}: checking status by hammer ping"
         
     | 
| 
      
 49 
     | 
    
         
            +
                  spinner.update msg
         
     | 
| 
      
 50 
     | 
    
         
            +
                  result = feature(:hammer).hammer_ping_cmd
         
     | 
| 
      
 51 
     | 
    
         
            +
                  if result[:success]
         
     | 
| 
      
 52 
     | 
    
         
            +
                    spinner.update 'All services are running.'
         
     | 
| 
      
 53 
     | 
    
         
            +
                    break
         
     | 
| 
      
 54 
     | 
    
         
            +
                  elsif retry_count < (RETRIES_FOR_SERVICES_RESTART - 1)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    apply_sleep_before_retry(spinner, result)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              rescue StandardError => e
         
     | 
| 
      
 59 
     | 
    
         
            +
                logger.error e.message
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
       35 
62 
     | 
    
         
             
              private
         
     | 
| 
       36 
63 
     | 
    
         | 
| 
      
 64 
     | 
    
         
            +
              def apply_sleep_before_retry(spinner, result)
         
     | 
| 
      
 65 
     | 
    
         
            +
                puts "\n#{result[:message]}"
         
     | 
| 
      
 66 
     | 
    
         
            +
                spinner.update "Waiting #{PING_RETRY_INTERVAL} seconds before retry."
         
     | 
| 
      
 67 
     | 
    
         
            +
                sleep PING_RETRY_INTERVAL
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
              def construct_filters_for_restart(options)
         
     | 
| 
      
 71 
     | 
    
         
            +
                filters = ''
         
     | 
| 
      
 72 
     | 
    
         
            +
                if options[:only]
         
     | 
| 
      
 73 
     | 
    
         
            +
                  filters += "--only #{options[:only].join(',')}" unless options[:only].empty?
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
                if options[:exclude]
         
     | 
| 
      
 76 
     | 
    
         
            +
                  filters += "--exclude #{options[:exclude].join(',')}" unless options[:exclude].empty?
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
                filters
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              def start_stopped_services_using_filters(spinner, filters)
         
     | 
| 
      
 82 
     | 
    
         
            +
                spinner.update 'Starting katello services..'
         
     | 
| 
      
 83 
     | 
    
         
            +
                execute("katello-service start #{filters}")
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       37 
86 
     | 
    
         
             
              def find_services_for_only_filter(curr_services, options)
         
     | 
| 
       38 
87 
     | 
    
         
             
                defaults = { :only => [], :exclude => [] }
         
     | 
| 
       39 
88 
     | 
    
         
             
                options = defaults.merge(options)
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Procedures::ForemanTasks
         
     | 
| 
      
 2 
     | 
    
         
            +
              class FetchTasksStatus < ForemanMaintain::Procedure
         
     | 
| 
      
 3 
     | 
    
         
            +
                metadata do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  for_feature :foreman_tasks
         
     | 
| 
      
 5 
     | 
    
         
            +
                  description 'Fetch tasks status and wait till they finish'
         
     | 
| 
      
 6 
     | 
    
         
            +
                  param :state, :required => true
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def run
         
     | 
| 
      
 10 
     | 
    
         
            +
                  with_spinner("waiting for #{@state} tasks to finish") do |spinner|
         
     | 
| 
      
 11 
     | 
    
         
            +
                    feature(:foreman_tasks).fetch_tasks_status(@state, spinner)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -12,7 +12,7 @@ module Procedures::ForemanTasks 
     | 
|
| 
       12 
12 
     | 
    
         
             
                def run
         
     | 
| 
       13 
13 
     | 
    
         
             
                  ask(<<-MESSAGE.strip_heredoc)
         
     | 
| 
       14 
14 
     | 
    
         
             
                    Go to https://#{hostname}/foreman_tasks/tasks?search=#{CGI.escape(@search_query.to_s)}
         
     | 
| 
       15 
     | 
    
         
            -
                    press ENTER after the  
     | 
| 
      
 15 
     | 
    
         
            +
                    press ENTER after the tasks are resolved.
         
     | 
| 
       16 
16 
     | 
    
         
             
                  MESSAGE
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Procedures::KatelloService
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Restart < ForemanMaintain::Procedure
         
     | 
| 
      
 3 
     | 
    
         
            +
                metadata do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  description 'katello-service restart'
         
     | 
| 
      
 5 
     | 
    
         
            +
                  param :only, 'A comma-separated list of services to include', :array => true
         
     | 
| 
      
 6 
     | 
    
         
            +
                  param :exclude, 'A comma-separated list of services to skip', :array => true
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def run
         
     | 
| 
      
 10 
     | 
    
         
            +
                  with_spinner('restarting katello service(s)') do |spinner|
         
     | 
| 
      
 11 
     | 
    
         
            +
                    spinner.update('Restarting services')
         
     | 
| 
      
 12 
     | 
    
         
            +
                    feature(:katello_service).restart(:only => @only, :exclude => @exclude)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    feature(:katello_service).hammer_ping_retry(spinner)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def runtime_message
         
     | 
| 
      
 18 
     | 
    
         
            +
                  msg = 'katello-service restart'
         
     | 
| 
      
 19 
     | 
    
         
            +
                  msg += "--only #{@only.join(',')}" unless @only.empty?
         
     | 
| 
      
 20 
     | 
    
         
            +
                  msg += "--exclude #{@exclude.join(',')}" unless @exclude.empty?
         
     | 
| 
      
 21 
     | 
    
         
            +
                  msg
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Procedures::KatelloService
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Start < ForemanMaintain::Procedure
         
     | 
| 
      
 3 
     | 
    
         
            +
                metadata do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  description 'katello-service start'
         
     | 
| 
      
 5 
     | 
    
         
            +
                  param :only, 'A comma-separated list of services to include', :array => true
         
     | 
| 
      
 6 
     | 
    
         
            +
                  param :exclude, 'A comma-separated list of services to skip', :array => true
         
     | 
| 
      
 7 
     | 
    
         
            +
                  for_feature :katello_service
         
     | 
| 
      
 8 
     | 
    
         
            +
                  tags :katello_service_start
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def run
         
     | 
| 
      
 12 
     | 
    
         
            +
                  with_spinner('stopping katello service(s)') do |spinner|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    feature(:katello_service).make_start(
         
     | 
| 
      
 14 
     | 
    
         
            +
                      spinner, :only => @only, :exclude => @exclude
         
     | 
| 
      
 15 
     | 
    
         
            +
                    )
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Procedures::KatelloService
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Stop < ForemanMaintain::Procedure
         
     | 
| 
      
 3 
     | 
    
         
            +
                metadata do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  description 'katello-service stop'
         
     | 
| 
      
 5 
     | 
    
         
            +
                  param :only, 'A comma-separated list of services to include', :array => true
         
     | 
| 
      
 6 
     | 
    
         
            +
                  param :exclude, 'A comma-separated list of services to skip', :array => true
         
     | 
| 
      
 7 
     | 
    
         
            +
                  for_feature :katello_service
         
     | 
| 
      
 8 
     | 
    
         
            +
                  tags :katello_service_stop
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def run
         
     | 
| 
      
 12 
     | 
    
         
            +
                  with_spinner('stopping katello service(s)') do |spinner|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    feature(:katello_service).make_stop(spinner, :only => @only, :exclude => @exclude)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -32,6 +32,7 @@ module Scenarios::Satellite_6_2 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                def compose
         
     | 
| 
       34 
34 
     | 
    
         
             
                  add_steps(find_procedures(:pre_migrations))
         
     | 
| 
      
 35 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Stop.new)
         
     | 
| 
       35 
36 
     | 
    
         
             
                end
         
     | 
| 
       36 
37 
     | 
    
         
             
              end
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
         @@ -43,7 +44,7 @@ module Scenarios::Satellite_6_2 
     | 
|
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def compose
         
     | 
| 
       45 
46 
     | 
    
         
             
                  add_step(Procedures::Repositories::Setup.new(:version => '6.2'))
         
     | 
| 
       46 
     | 
    
         
            -
                  add_step(Procedures::Packages::Update.new(:assumeyes =>  
     | 
| 
      
 47 
     | 
    
         
            +
                  add_step(Procedures::Packages::Update.new(:assumeyes => true))
         
     | 
| 
       47 
48 
     | 
    
         
             
                  add_step(Procedures::Installer::Upgrade.new)
         
     | 
| 
       48 
49 
     | 
    
         
             
                end
         
     | 
| 
       49 
50 
     | 
    
         
             
              end
         
     | 
| 
         @@ -55,6 +56,7 @@ module Scenarios::Satellite_6_2 
     | 
|
| 
       55 
56 
     | 
    
         
             
                end
         
     | 
| 
       56 
57 
     | 
    
         | 
| 
       57 
58 
     | 
    
         
             
                def compose
         
     | 
| 
      
 59 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Start.new)
         
     | 
| 
       58 
60 
     | 
    
         
             
                  add_steps(find_procedures(:post_migrations))
         
     | 
| 
       59 
61 
     | 
    
         
             
                end
         
     | 
| 
       60 
62 
     | 
    
         
             
              end
         
     | 
| 
         @@ -32,6 +32,7 @@ module Scenarios::Satellite_6_2_z 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                def compose
         
     | 
| 
       34 
34 
     | 
    
         
             
                  add_steps(find_procedures(:pre_migrations))
         
     | 
| 
      
 35 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Stop.new)
         
     | 
| 
       35 
36 
     | 
    
         
             
                end
         
     | 
| 
       36 
37 
     | 
    
         
             
              end
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
         @@ -42,7 +43,7 @@ module Scenarios::Satellite_6_2_z 
     | 
|
| 
       42 
43 
     | 
    
         
             
                end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def compose
         
     | 
| 
       45 
     | 
    
         
            -
                  add_step(Procedures::Packages::Update.new(:assumeyes =>  
     | 
| 
      
 46 
     | 
    
         
            +
                  add_step(Procedures::Packages::Update.new(:assumeyes => true))
         
     | 
| 
       46 
47 
     | 
    
         
             
                  add_step(Procedures::Installer::Upgrade.new)
         
     | 
| 
       47 
48 
     | 
    
         
             
                end
         
     | 
| 
       48 
49 
     | 
    
         
             
              end
         
     | 
| 
         @@ -54,6 +55,7 @@ module Scenarios::Satellite_6_2_z 
     | 
|
| 
       54 
55 
     | 
    
         
             
                end
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
                def compose
         
     | 
| 
      
 58 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Start.new)
         
     | 
| 
       57 
59 
     | 
    
         
             
                  add_steps(find_procedures(:post_migrations))
         
     | 
| 
       58 
60 
     | 
    
         
             
                end
         
     | 
| 
       59 
61 
     | 
    
         
             
              end
         
     | 
| 
         @@ -32,6 +32,7 @@ module Scenarios::Satellite_6_3 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                def compose
         
     | 
| 
       34 
34 
     | 
    
         
             
                  add_steps(find_procedures(:pre_migrations))
         
     | 
| 
      
 35 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Stop.new)
         
     | 
| 
       35 
36 
     | 
    
         
             
                end
         
     | 
| 
       36 
37 
     | 
    
         
             
              end
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
         @@ -43,7 +44,7 @@ module Scenarios::Satellite_6_3 
     | 
|
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def compose
         
     | 
| 
       45 
46 
     | 
    
         
             
                  add_step(Procedures::Repositories::Setup.new(:version => '6.3'))
         
     | 
| 
       46 
     | 
    
         
            -
                  add_step(Procedures::Packages::Update.new(:assumeyes =>  
     | 
| 
      
 47 
     | 
    
         
            +
                  add_step(Procedures::Packages::Update.new(:assumeyes => true))
         
     | 
| 
       47 
48 
     | 
    
         
             
                  add_step(Procedures::Installer::Upgrade.new)
         
     | 
| 
       48 
49 
     | 
    
         
             
                end
         
     | 
| 
       49 
50 
     | 
    
         
             
              end
         
     | 
| 
         @@ -55,6 +56,7 @@ module Scenarios::Satellite_6_3 
     | 
|
| 
       55 
56 
     | 
    
         
             
                end
         
     | 
| 
       56 
57 
     | 
    
         | 
| 
       57 
58 
     | 
    
         
             
                def compose
         
     | 
| 
      
 59 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Start.new)
         
     | 
| 
       58 
60 
     | 
    
         
             
                  add_steps(find_procedures(:post_migrations))
         
     | 
| 
       59 
61 
     | 
    
         
             
                end
         
     | 
| 
       60 
62 
     | 
    
         
             
              end
         
     | 
| 
         @@ -32,6 +32,7 @@ module Scenarios::Satellite_6_3_z 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                def compose
         
     | 
| 
       34 
34 
     | 
    
         
             
                  add_steps(find_procedures(:pre_migrations))
         
     | 
| 
      
 35 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Stop.new)
         
     | 
| 
       35 
36 
     | 
    
         
             
                end
         
     | 
| 
       36 
37 
     | 
    
         
             
              end
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
         @@ -42,7 +43,7 @@ module Scenarios::Satellite_6_3_z 
     | 
|
| 
       42 
43 
     | 
    
         
             
                end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def compose
         
     | 
| 
       45 
     | 
    
         
            -
                  add_step(Procedures::Packages::Update.new(:assumeyes =>  
     | 
| 
      
 46 
     | 
    
         
            +
                  add_step(Procedures::Packages::Update.new(:assumeyes => true))
         
     | 
| 
       46 
47 
     | 
    
         
             
                  add_step(Procedures::Installer::Upgrade.new)
         
     | 
| 
       47 
48 
     | 
    
         
             
                end
         
     | 
| 
       48 
49 
     | 
    
         
             
              end
         
     | 
| 
         @@ -54,6 +55,7 @@ module Scenarios::Satellite_6_3_z 
     | 
|
| 
       54 
55 
     | 
    
         
             
                end
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
                def compose
         
     | 
| 
      
 58 
     | 
    
         
            +
                  add_step(Procedures::KatelloService::Start.new)
         
     | 
| 
       57 
59 
     | 
    
         
             
                  add_steps(find_procedures(:post_migrations))
         
     | 
| 
       58 
60 
     | 
    
         
             
                end
         
     | 
| 
       59 
61 
     | 
    
         
             
              end
         
     | 
| 
         @@ -4,7 +4,7 @@ module ForemanMaintain 
     | 
|
| 
       4 
4 
     | 
    
         
             
                  class AbstractByTagCommand < AbstractProcedureCommand
         
     | 
| 
       5 
5 
     | 
    
         
             
                    def self.tag_params_to_options(tag)
         
     | 
| 
       6 
6 
     | 
    
         
             
                      params = params_for_tag(tag)
         
     | 
| 
       7 
     | 
    
         
            -
                      params. 
     | 
| 
      
 7 
     | 
    
         
            +
                      params.each_value do |param|
         
     | 
| 
       8 
8 
     | 
    
         
             
                        mapping = param[:procedures]
         
     | 
| 
       9 
9 
     | 
    
         
             
                        instance = param[:instance]
         
     | 
| 
       10 
10 
     | 
    
         
             
                        param_to_option(instance, :description => instance.description + " #{mapping}")
         
     | 
| 
         @@ -14,7 +14,7 @@ module ForemanMaintain 
     | 
|
| 
       14 
14 
     | 
    
         
             
                    def self.params_for_tag(tag)
         
     | 
| 
       15 
15 
     | 
    
         
             
                      params = {}
         
     | 
| 
       16 
16 
     | 
    
         
             
                      ForemanMaintain.available_procedures(:tags => tag).each do |procedure|
         
     | 
| 
       17 
     | 
    
         
            -
                        procedure.params. 
     | 
| 
      
 17 
     | 
    
         
            +
                        procedure.params.each_value do |param|
         
     | 
| 
       18 
18 
     | 
    
         
             
                          unless params.key?(param.name)
         
     | 
| 
       19 
19 
     | 
    
         
             
                            params[param.name] = { :instance => param, :procedures => [] }
         
     | 
| 
       20 
20 
     | 
    
         
             
                          end
         
     | 
| 
         @@ -17,7 +17,7 @@ module ForemanMaintain 
     | 
|
| 
       17 
17 
     | 
    
         
             
                    def get_params_for(definition)
         
     | 
| 
       18 
18 
     | 
    
         
             
                      all_params = options_to_params
         
     | 
| 
       19 
19 
     | 
    
         
             
                      params = {}
         
     | 
| 
       20 
     | 
    
         
            -
                      definition.params. 
     | 
| 
      
 20 
     | 
    
         
            +
                      definition.params.each_value do |param|
         
     | 
| 
       21 
21 
     | 
    
         
             
                        params[param.name] = all_params[param.name]
         
     | 
| 
       22 
22 
     | 
    
         
             
                      end
         
     | 
| 
       23 
23 
     | 
    
         
             
                      params
         
     | 
| 
         @@ -37,7 +37,7 @@ module ForemanMaintain 
     | 
|
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                  module ParamsToOptions
         
     | 
| 
       39 
39 
     | 
    
         
             
                    def params_to_options(params)
         
     | 
| 
       40 
     | 
    
         
            -
                      params. 
     | 
| 
      
 40 
     | 
    
         
            +
                      params.each_value do |param|
         
     | 
| 
       41 
41 
     | 
    
         
             
                        param_to_option(param)
         
     | 
| 
       42 
42 
     | 
    
         
             
                      end
         
     | 
| 
       43 
43 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -66,7 +66,12 @@ module ForemanMaintain 
     | 
|
| 
       66 
66 
     | 
    
         
             
                  subcommand 'run', 'Run full upgrade to a specified version' do
         
     | 
| 
       67 
67 
     | 
    
         
             
                    target_version_option
         
     | 
| 
       68 
68 
     | 
    
         
             
                    interactive_option
         
     | 
| 
       69 
     | 
    
         
            -
                    option '--phase', 'phase', 'run only a specific phase', :required => false
         
     | 
| 
      
 69 
     | 
    
         
            +
                    option '--phase', 'phase', 'run only a specific phase', :required => false do |phase|
         
     | 
| 
      
 70 
     | 
    
         
            +
                      unless UpgradeRunner::PHASES.include?(phase.to_sym)
         
     | 
| 
      
 71 
     | 
    
         
            +
                        raise Error::UsageError, "Unknown phase #{phase}"
         
     | 
| 
      
 72 
     | 
    
         
            +
                      end
         
     | 
| 
      
 73 
     | 
    
         
            +
                      phase
         
     | 
| 
      
 74 
     | 
    
         
            +
                    end
         
     | 
| 
       70 
75 
     | 
    
         | 
| 
       71 
76 
     | 
    
         
             
                    def execute
         
     | 
| 
       72 
77 
     | 
    
         
             
                      if phase
         
     | 
| 
         @@ -26,16 +26,69 @@ module ForemanMaintain 
     | 
|
| 
       26 
26 
     | 
    
         
             
                    end
         
     | 
| 
       27 
27 
     | 
    
         
             
                  end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                  def  
     | 
| 
       30 
     | 
    
         
            -
                     
     | 
| 
      
 29 
     | 
    
         
            +
                  def check_min_version(name, minimal_version)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    current_version = package_version(name)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    if current_version
         
     | 
| 
      
 32 
     | 
    
         
            +
                      return current_version >= version(minimal_version)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def downstream_installation?
         
     | 
| 
      
 37 
     | 
    
         
            +
                    execute?('rpm -q satellite') ||
         
     | 
| 
      
 38 
     | 
    
         
            +
                      (execute('rpm -q foreman') =~ /sat.noarch/)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def execute?(command, input = nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    execute(command, :stdin => input)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    $CHILD_STATUS.success?
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  def execute!(command, options = {})
         
     | 
| 
      
 47 
     | 
    
         
            +
                    command_runner = Utils::CommandRunner.new(logger, command, options)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    execution.puts '' if command_runner.interactive? && respond_to?(:execution)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    command_runner.run
         
     | 
| 
      
 50 
     | 
    
         
            +
                    if command_runner.success?
         
     | 
| 
      
 51 
     | 
    
         
            +
                      command_runner.output
         
     | 
| 
      
 52 
     | 
    
         
            +
                    else
         
     | 
| 
      
 53 
     | 
    
         
            +
                      raise command_runner.execution_error
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def execute(command, options = {})
         
     | 
| 
      
 58 
     | 
    
         
            +
                    command_runner = Utils::CommandRunner.new(logger, command, options)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    execution.puts '' if command_runner.interactive? && respond_to?(:execution)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    command_runner.run
         
     | 
| 
      
 61 
     | 
    
         
            +
                    command_runner.output
         
     | 
| 
       31 
62 
     | 
    
         
             
                  end
         
     | 
| 
       32 
63 
     | 
    
         | 
| 
       33 
64 
     | 
    
         
             
                  def file_exists?(filename)
         
     | 
| 
       34 
65 
     | 
    
         
             
                    File.exist?(filename)
         
     | 
| 
       35 
66 
     | 
    
         
             
                  end
         
     | 
| 
       36 
67 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                  def  
     | 
| 
       38 
     | 
    
         
            -
                     
     | 
| 
      
 68 
     | 
    
         
            +
                  def find_package(name)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    result = execute(%(rpm -q '#{name}'))
         
     | 
| 
      
 70 
     | 
    
         
            +
                    if $CHILD_STATUS.success?
         
     | 
| 
      
 71 
     | 
    
         
            +
                      result
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  def hostname
         
     | 
| 
      
 76 
     | 
    
         
            +
                    execute('hostname -f')
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  def install_packages(packages, options = {})
         
     | 
| 
      
 80 
     | 
    
         
            +
                    options.validate_options!(:assumeyes)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    yum_options = []
         
     | 
| 
      
 82 
     | 
    
         
            +
                    yum_options << '-y' if options[:assumeyes]
         
     | 
| 
      
 83 
     | 
    
         
            +
                    execute!("yum #{yum_options.join(' ')} install #{packages.join(' ')}", :interactive => true)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  def server?
         
     | 
| 
      
 87 
     | 
    
         
            +
                    find_package('foreman')
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  def smart_proxy?
         
     | 
| 
      
 91 
     | 
    
         
            +
                    !server? && find_package('foreman-proxy')
         
     | 
| 
       39 
92 
     | 
    
         
             
                  end
         
     | 
| 
       40 
93 
     | 
    
         | 
| 
       41 
94 
     | 
    
         
             
                  def packages_action(action, packages, options = {})
         
     | 
| 
         @@ -50,30 +103,11 @@ module ForemanMaintain 
     | 
|
| 
       50 
103 
     | 
    
         
             
                             :interactive => true)
         
     | 
| 
       51 
104 
     | 
    
         
             
                  end
         
     | 
| 
       52 
105 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                  def check_min_version(name, minimal_version)
         
     | 
| 
       54 
     | 
    
         
            -
                    current_version = package_version(name)
         
     | 
| 
       55 
     | 
    
         
            -
                    if current_version
         
     | 
| 
       56 
     | 
    
         
            -
                      return current_version >= version(minimal_version)
         
     | 
| 
       57 
     | 
    
         
            -
                    end
         
     | 
| 
       58 
     | 
    
         
            -
                  end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                  def downstream_installation?
         
     | 
| 
       61 
     | 
    
         
            -
                    execute?('rpm -q satellite') ||
         
     | 
| 
       62 
     | 
    
         
            -
                      (execute('rpm -q foreman') =~ /sat.noarch/)
         
     | 
| 
       63 
     | 
    
         
            -
                  end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
106 
     | 
    
         
             
                  def package_version(name)
         
     | 
| 
       66 
107 
     | 
    
         
             
                    # space for extension to support non-rpm distributions
         
     | 
| 
       67 
108 
     | 
    
         
             
                    rpm_version(name)
         
     | 
| 
       68 
109 
     | 
    
         
             
                  end
         
     | 
| 
       69 
110 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                  def rpm_version(name, queryformat = 'VERSION')
         
     | 
| 
       71 
     | 
    
         
            -
                    rpm_version = execute(%(rpm -q '#{name}' --queryformat="%{#{queryformat}}"))
         
     | 
| 
       72 
     | 
    
         
            -
                    if $CHILD_STATUS.success?
         
     | 
| 
       73 
     | 
    
         
            -
                      version(rpm_version)
         
     | 
| 
       74 
     | 
    
         
            -
                    end
         
     | 
| 
       75 
     | 
    
         
            -
                  end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
111 
     | 
    
         
             
                  def parse_csv(data)
         
     | 
| 
       78 
112 
     | 
    
         
             
                    parsed_data = CSV.parse(data)
         
     | 
| 
       79 
113 
     | 
    
         
             
                    header = parsed_data.first
         
     | 
| 
         @@ -82,37 +116,25 @@ module ForemanMaintain 
     | 
|
| 
       82 
116 
     | 
    
         
             
                    end
         
     | 
| 
       83 
117 
     | 
    
         
             
                  end
         
     | 
| 
       84 
118 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                  def  
     | 
| 
       86 
     | 
    
         
            -
                     
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
      
 119 
     | 
    
         
            +
                  def parse_json(json_string)
         
     | 
| 
      
 120 
     | 
    
         
            +
                    JSON.parse(json_string)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  rescue StandardError
         
     | 
| 
      
 122 
     | 
    
         
            +
                    nil
         
     | 
| 
       88 
123 
     | 
    
         
             
                  end
         
     | 
| 
       89 
124 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
                  def  
     | 
| 
       91 
     | 
    
         
            -
                     
     | 
| 
       92 
     | 
    
         
            -
                     
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
                    if command_runner.success?
         
     | 
| 
       95 
     | 
    
         
            -
                      command_runner.output
         
     | 
| 
       96 
     | 
    
         
            -
                    else
         
     | 
| 
       97 
     | 
    
         
            -
                      raise command_runner.execution_error
         
     | 
| 
      
 125 
     | 
    
         
            +
                  def rpm_version(name)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    rpm_version = execute(%(rpm -q '#{name}' --queryformat="%{VERSION}"))
         
     | 
| 
      
 127 
     | 
    
         
            +
                    if $CHILD_STATUS.success?
         
     | 
| 
      
 128 
     | 
    
         
            +
                      version(rpm_version)
         
     | 
| 
       98 
129 
     | 
    
         
             
                    end
         
     | 
| 
       99 
130 
     | 
    
         
             
                  end
         
     | 
| 
       100 
131 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
                  def execute(command, options = {})
         
     | 
| 
       102 
     | 
    
         
            -
                    command_runner = Utils::CommandRunner.new(logger, command, options)
         
     | 
| 
       103 
     | 
    
         
            -
                    execution.puts '' if command_runner.interactive? && respond_to?(:execution)
         
     | 
| 
       104 
     | 
    
         
            -
                    command_runner.run
         
     | 
| 
       105 
     | 
    
         
            -
                    command_runner.output
         
     | 
| 
       106 
     | 
    
         
            -
                  end
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
132 
     | 
    
         
             
                  def shellescape(string)
         
     | 
| 
       109 
133 
     | 
    
         
             
                    Shellwords.escape(string)
         
     | 
| 
       110 
134 
     | 
    
         
             
                  end
         
     | 
| 
       111 
135 
     | 
    
         | 
| 
       112 
     | 
    
         
            -
                  def  
     | 
| 
       113 
     | 
    
         
            -
                     
     | 
| 
       114 
     | 
    
         
            -
                  rescue
         
     | 
| 
       115 
     | 
    
         
            -
                    nil
         
     | 
| 
      
 136 
     | 
    
         
            +
                  def version(value)
         
     | 
| 
      
 137 
     | 
    
         
            +
                    Version.new(value)
         
     | 
| 
       116 
138 
     | 
    
         
             
                  end
         
     | 
| 
       117 
139 
     | 
    
         
             
                end
         
     | 
| 
       118 
140 
     | 
    
         
             
              end
         
     | 
| 
         @@ -35,7 +35,7 @@ module ForemanMaintain 
     | 
|
| 
       35 
35 
     | 
    
         
             
                      "Config file #{config_file} not found, using default configuration"
         
     | 
| 
       36 
36 
     | 
    
         
             
                    {}
         
     | 
| 
       37 
37 
     | 
    
         
             
                  end
         
     | 
| 
       38 
     | 
    
         
            -
                rescue => e
         
     | 
| 
      
 38 
     | 
    
         
            +
                rescue StandardError => e
         
     | 
| 
       39 
39 
     | 
    
         
             
                  raise "Couldn't load configuration file. Error: #{e.message}"
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
         @@ -51,7 +51,7 @@ module ForemanMaintain 
     | 
|
| 
       51 
51 
     | 
    
         
             
                  dir_path = File.expand_path(dir_path_str)
         
     | 
| 
       52 
52 
     | 
    
         
             
                  begin
         
     | 
| 
       53 
53 
     | 
    
         
             
                    FileUtils.mkdir_p(dir_path, :mode => 0o750) unless File.exist?(dir_path)
         
     | 
| 
       54 
     | 
    
         
            -
                  rescue => e
         
     | 
| 
      
 54 
     | 
    
         
            +
                  rescue StandardError => e
         
     | 
| 
       55 
55 
     | 
    
         
             
                    $stderr.puts "No permissions to create dir #{dir_path_str}"
         
     | 
| 
       56 
56 
     | 
    
         
             
                    $stderr.puts e.message.inspect
         
     | 
| 
       57 
57 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -67,7 +67,7 @@ module ForemanMaintain 
     | 
|
| 
       67 
67 
     | 
    
         
             
                  return if @all_features_scanned
         
     | 
| 
       68 
68 
     | 
    
         
             
                  @available_features = []
         
     | 
| 
       69 
69 
     | 
    
         
             
                  @features_by_label = {}
         
     | 
| 
       70 
     | 
    
         
            -
                  autodetect_features. 
     | 
| 
      
 70 
     | 
    
         
            +
                  autodetect_features.each_key do |label|
         
     | 
| 
       71 
71 
     | 
    
         
             
                    detect_feature(label)
         
     | 
| 
       72 
72 
     | 
    
         
             
                  end
         
     | 
| 
       73 
73 
     | 
    
         
             
                  @all_features_scanned = true
         
     | 
| 
         @@ -8,8 +8,6 @@ module ForemanMaintain 
     | 
|
| 
       8 
8 
     | 
    
         
             
                               :assumeyes?, :whitelisted?,
         
     | 
| 
       9 
9 
     | 
    
         
             
                               :execution, :puts, :print, :with_spinner, :ask, :storage
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
                attr_accessor :associated_feature
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
11 
     | 
    
         
             
                def initialize(options = {})
         
     | 
| 
       14 
12 
     | 
    
         
             
                  @options = options.inject({}) { |h, (k, v)| h.update(k.to_s => v) }
         
     | 
| 
       15 
13 
     | 
    
         
             
                  @param_values = {}
         
     | 
| 
         @@ -33,7 +31,7 @@ module ForemanMaintain 
     | 
|
| 
       33 
31 
     | 
    
         
             
                # processes the params from provided options
         
     | 
| 
       34 
32 
     | 
    
         
             
                def setup_params
         
     | 
| 
       35 
33 
     | 
    
         
             
                  @options.validate_options!(params.values.map(&:name).map(&:to_s))
         
     | 
| 
       36 
     | 
    
         
            -
                  params. 
     | 
| 
      
 34 
     | 
    
         
            +
                  params.each_value do |param|
         
     | 
| 
       37 
35 
     | 
    
         
             
                    set_param_variable(param.name, param.process(@options[param.name.to_s]))
         
     | 
| 
       38 
36 
     | 
    
         
             
                  end
         
     | 
| 
       39 
37 
     | 
    
         
             
                end
         
     | 
    
        data/lib/foreman_maintain.rb
    CHANGED
    
    | 
         @@ -6,6 +6,7 @@ require 'forwardable' 
     | 
|
| 
       6 
6 
     | 
    
         
             
            require 'json'
         
     | 
| 
       7 
7 
     | 
    
         
             
            require 'logger'
         
     | 
| 
       8 
8 
     | 
    
         
             
            require 'yaml'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'timeout'
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
            module ForemanMaintain
         
     | 
| 
       11 
12 
     | 
    
         
             
              require 'foreman_maintain/core_ext'
         
     | 
| 
         @@ -110,7 +111,7 @@ module ForemanMaintain 
     | 
|
| 
       110 
111 
     | 
    
         | 
| 
       111 
112 
     | 
    
         
             
                def storage(label = :default)
         
     | 
| 
       112 
113 
     | 
    
         
             
                  ForemanMaintain::YamlStorage.load(label)
         
     | 
| 
       113 
     | 
    
         
            -
                rescue => e
         
     | 
| 
      
 114 
     | 
    
         
            +
                rescue StandardError => e
         
     | 
| 
       114 
115 
     | 
    
         
             
                  logger.error "Invalid Storage label i.e #{label}. Error - #{e.message}"
         
     | 
| 
       115 
116 
     | 
    
         
             
                end
         
     | 
| 
       116 
117 
     | 
    
         
             
              end
         
     | 
    
        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.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.10
         
     | 
| 
       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: 2017- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-10-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: clamp
         
     | 
| 
         @@ -116,21 +116,29 @@ files: 
     | 
|
| 
       116 
116 
     | 
    
         
             
            - definitions/checks/foreman_tasks/invalid/check_planning_state.rb
         
     | 
| 
       117 
117 
     | 
    
         
             
            - definitions/checks/foreman_tasks/not_paused.rb
         
     | 
| 
       118 
118 
     | 
    
         
             
            - definitions/checks/foreman_tasks/not_running.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
            - definitions/checks/hammer_ping.rb
         
     | 
| 
       119 
120 
     | 
    
         
             
            - definitions/checks/system_registration.rb
         
     | 
| 
       120 
121 
     | 
    
         
             
            - definitions/features/downstream.rb
         
     | 
| 
       121 
122 
     | 
    
         
             
            - definitions/features/foreman_1_11_x.rb
         
     | 
| 
       122 
123 
     | 
    
         
             
            - definitions/features/foreman_1_7_x.rb
         
     | 
| 
       123 
124 
     | 
    
         
             
            - definitions/features/foreman_database.rb
         
     | 
| 
       124 
125 
     | 
    
         
             
            - definitions/features/foreman_proxy.rb
         
     | 
| 
      
 126 
     | 
    
         
            +
            - definitions/features/foreman_server.rb
         
     | 
| 
       125 
127 
     | 
    
         
             
            - definitions/features/foreman_tasks.rb
         
     | 
| 
      
 128 
     | 
    
         
            +
            - definitions/features/hammer.rb
         
     | 
| 
      
 129 
     | 
    
         
            +
            - definitions/features/katello.rb
         
     | 
| 
       126 
130 
     | 
    
         
             
            - definitions/features/katello_service.rb
         
     | 
| 
       127 
131 
     | 
    
         
             
            - definitions/features/sync_plans.rb
         
     | 
| 
       128 
132 
     | 
    
         
             
            - definitions/features/upstream.rb
         
     | 
| 
       129 
133 
     | 
    
         
             
            - definitions/procedures/foreman_tasks/delete.rb
         
     | 
| 
      
 134 
     | 
    
         
            +
            - definitions/procedures/foreman_tasks/fetch_tasks_status.rb
         
     | 
| 
       130 
135 
     | 
    
         
             
            - definitions/procedures/foreman_tasks/resume.rb
         
     | 
| 
       131 
136 
     | 
    
         
             
            - definitions/procedures/foreman_tasks/ui_investigate.rb
         
     | 
| 
       132 
137 
     | 
    
         
             
            - definitions/procedures/hammer_setup.rb
         
     | 
| 
       133 
138 
     | 
    
         
             
            - definitions/procedures/installer/upgrade.rb
         
     | 
| 
      
 139 
     | 
    
         
            +
            - definitions/procedures/katello_service/restart.rb
         
     | 
| 
      
 140 
     | 
    
         
            +
            - definitions/procedures/katello_service/start.rb
         
     | 
| 
      
 141 
     | 
    
         
            +
            - definitions/procedures/katello_service/stop.rb
         
     | 
| 
       134 
142 
     | 
    
         
             
            - definitions/procedures/maintenance_mode/disable.rb
         
     | 
| 
       135 
143 
     | 
    
         
             
            - definitions/procedures/maintenance_mode/enable.rb
         
     | 
| 
       136 
144 
     | 
    
         
             
            - definitions/procedures/packages/install.rb
         
     | 
| 
         @@ -211,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       211 
219 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       212 
220 
     | 
    
         
             
            requirements: []
         
     | 
| 
       213 
221 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       214 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 222 
     | 
    
         
            +
            rubygems_version: 2.6.12
         
     | 
| 
       215 
223 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       216 
224 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       217 
225 
     | 
    
         
             
            summary: Foreman maintenance tool belt
         
     |