Module: ForemanMaintain::Concerns::SystemHelpers
- Includes:
- Finders, Logger, OsFacts
- Included in:
- ForemanMaintain::Check, ForemanMaintain::Cli::PrebuildBashCompletionCommand, Feature, Procedure, RepositoryManager::El, Scenario, Utils::Backup, Utils::Disk::Device, Utils::Disk::IODevice, Utils::MongoCoreInstalled, Utils::SystemHelpers
- Defined in:
- lib/foreman_maintain/concerns/system_helpers.rb
Defined Under Namespace
Classes: Version
Constant Summary
Constants included
from OsFacts
OsFacts::FALLBACK_OS_RELEASE_FILE, OsFacts::OS_RELEASE_FILE
Class Method Summary
collapse
Instance Method Summary
collapse
-
#check_max_version(name, maximal_version) ⇒ Object
-
#check_min_version(name, minimal_version) ⇒ Object
-
#command_present?(command_name) ⇒ Boolean
-
#create_lv_snapshot(name, block_size, path) ⇒ Object
-
#directory_empty?(dir) ⇒ Boolean
-
#execute(command, options = {}) ⇒ Object
-
#execute!(command, options = {}) ⇒ Object
-
#execute?(command, options = {}) ⇒ Boolean
-
#execute_runner(command, options = {}) ⇒ Object
-
#execute_with_status(command, options = {}) ⇒ Object
-
#file_exists?(filename) ⇒ Boolean
-
#file_nonzero?(filename) ⇒ Boolean
-
#find_dir_containing_file(directory, target) ⇒ Object
-
#find_package(name) ⇒ Object
-
#find_symlinks(dir_path) ⇒ Object
-
#foreman_plugin_name(plugin) ⇒ Object
-
#format_shell_args(options = {}) ⇒ Object
-
#get_lv_info(dir) ⇒ Object
-
#get_lv_path(lv_name) ⇒ Object
-
#hammer_package ⇒ Object
-
#hammer_plugin_name(plugin) ⇒ Object
-
#hostname ⇒ Object
-
#package_manager ⇒ Object
-
#package_version(name) ⇒ Object
-
#packages_action(action, packages, options = {}) ⇒ Object
-
#parse_csv(data) ⇒ Object
-
#parse_json(json_string) ⇒ Object
-
#proxy_plugin_name(plugin) ⇒ Object
-
#repository_manager ⇒ Object
-
#ruby_prefix(scl = true) ⇒ Object
-
#server? ⇒ Boolean
-
#shellescape(string) ⇒ Object
-
#systemd_installed? ⇒ Boolean
-
#version(value) ⇒ Object
Methods included from OsFacts
#centos?, #cpu_cores, #deb_major_version, #debian?, #debian_or_ubuntu?, #el7?, #el8?, #el?, #el_major_version, #el_short_name, #facts, #memory, #os_id, #os_id_like_list, #os_name, #os_release_file, #os_version, #os_version_codename, #os_version_id, #rhel?, #ubuntu?, #ubuntu_major_version
Methods included from Finders
#check, #detector, #feature, #find_all_scenarios, #find_checks, #find_procedures, #find_scenarios, #procedure
Methods included from Logger
#logger
Class Method Details
.included(klass) ⇒ Object
13
14
15
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 13
def self.included(klass)
klass.extend(self)
end
|
Instance Method Details
#check_max_version(name, maximal_version) ⇒ Object
42
43
44
45
46
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 42
def check_max_version(name, maximal_version)
check_version(name) do |current_version|
version(maximal_version) >= current_version
end
end
|
#check_min_version(name, minimal_version) ⇒ Object
36
37
38
39
40
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 36
def check_min_version(name, minimal_version)
check_version(name) do |current_version|
current_version >= version(minimal_version)
end
end
|
#command_present?(command_name) ⇒ Boolean
53
54
55
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 53
def command_present?(command_name)
execute?("command -v #{command_name}")
end
|
#create_lv_snapshot(name, block_size, path) ⇒ Object
170
171
172
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 170
def create_lv_snapshot(name, block_size, path)
execute!("lvcreate -n#{name} -L#{block_size} -s #{path}")
end
|
#directory_empty?(dir) ⇒ Boolean
162
163
164
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 162
def directory_empty?(dir)
Dir.entries(dir).size <= 2
end
|
#execute(command, options = {}) ⇒ Object
73
74
75
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 73
def execute(command, options = {})
execute_runner(command, options).output
end
|
#execute!(command, options = {}) ⇒ Object
64
65
66
67
68
69
70
71
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 64
def execute!(command, options = {})
command_runner = execute_runner(command, options)
if command_runner.success?
command_runner.output
else
raise command_runner.execution_error
end
end
|
#execute?(command, options = {}) ⇒ Boolean
48
49
50
51
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 48
def execute?(command, options = {})
execute(command, options)
$CHILD_STATUS.success?
end
|
#execute_runner(command, options = {}) ⇒ Object
57
58
59
60
61
62
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 57
def execute_runner(command, options = {})
command_runner = Utils::CommandRunner.new(logger, command, options)
execution.puts '' if command_runner.interactive? && respond_to?(:execution)
command_runner.run
command_runner
end
|
#execute_with_status(command, options = {}) ⇒ Object
77
78
79
80
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 77
def execute_with_status(command, options = {})
command_runner = execute_runner(command, options)
[command_runner.exit_status, command_runner.output]
end
|
#file_exists?(filename) ⇒ Boolean
82
83
84
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 82
def file_exists?(filename)
File.exist?(filename)
end
|
#file_nonzero?(filename) ⇒ Boolean
86
87
88
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 86
def file_nonzero?(filename)
File.exist?(filename) && !File.zero?(filename)
end
|
#find_dir_containing_file(directory, target) ⇒ Object
178
179
180
181
182
183
184
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 178
def find_dir_containing_file(directory, target)
result = nil
Find.find(directory) do |path|
result = File.dirname(path) if File.basename(path) == target
end
result
end
|
#find_package(name) ⇒ Object
90
91
92
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 90
def find_package(name)
package_manager.find_installed_package(name)
end
|
#find_symlinks(dir_path) ⇒ Object
156
157
158
159
160
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 156
def find_symlinks(dir_path)
cmd = "find '#{dir_path}' -maxdepth 1 -type l"
result = execute(cmd).strip
result.split(/\n/)
end
|
#foreman_plugin_name(plugin) ⇒ Object
204
205
206
207
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 204
def foreman_plugin_name(plugin)
plugin = plugin.tr('_', '-') if debian_or_ubuntu?
ruby_prefix + plugin
end
|
152
153
154
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 152
def format_shell_args(options = {})
options.map { |shell_optn, val| " #{shell_optn} #{shellescape(val)}" }.join
end
|
#get_lv_info(dir) ⇒ Object
166
167
168
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 166
def get_lv_info(dir)
execute("findmnt -n --target #{dir} -o SOURCE,FSTYPE").split
end
|
#get_lv_path(lv_name) ⇒ Object
174
175
176
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 174
def get_lv_path(lv_name)
execute("lvs --noheadings -o lv_path -S lv_name=#{lv_name}").strip
end
|
#hammer_package ⇒ Object
225
226
227
228
229
230
231
232
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 225
def hammer_package
hammer_prefix = if debian_or_ubuntu?
'hammer-cli'
else
'hammer_cli'
end
ruby_prefix + hammer_prefix
end
|
#hammer_plugin_name(plugin) ⇒ Object
220
221
222
223
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 220
def hammer_plugin_name(plugin)
plugin = plugin.tr('_', '-') if debian_or_ubuntu?
[hammer_package, plugin].join(debian_or_ubuntu? ? '-' : '_')
end
|
#hostname ⇒ Object
94
95
96
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 94
def hostname
execute('hostname -f')
end
|
#package_manager ⇒ Object
#package_version(name) ⇒ Object
117
118
119
120
121
122
123
124
125
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 117
def package_version(name)
ver = if el?
'%{VERSION}'
elsif debian_or_ubuntu?
'${VERSION}'
end
pkg = package_manager.find_installed_package(name, ver)
version(pkg) unless pkg.nil?
end
|
#packages_action(action, packages, options = {}) ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 102
def packages_action(action, packages, options = {})
options.validate_options!(:assumeyes, :yum_options)
case action
when :install
package_manager.install(packages, :assumeyes => options[:assumeyes])
when :update
package_manager.update(packages, :assumeyes => options[:assumeyes],
:yum_options => options[:yum_options])
when :remove
package_manager.remove(packages, :assumeyes => options[:assumeyes])
else
raise ArgumentError, "Unexpected action #{action} expected #{expected_actions.inspect}"
end
end
|
#parse_csv(data) ⇒ Object
127
128
129
130
131
132
133
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 127
def parse_csv(data)
parsed_data = CSV.parse(data)
= parsed_data.first
parsed_data[1..-1].map do |row|
Hash[*.zip(row).flatten(1)]
end
end
|
#parse_json(json_string) ⇒ Object
135
136
137
138
139
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 135
def parse_json(json_string)
JSON.parse(json_string)
rescue StandardError
nil
end
|
#proxy_plugin_name(plugin) ⇒ Object
209
210
211
212
213
214
215
216
217
218
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 209
def proxy_plugin_name(plugin)
if debian_or_ubuntu?
plugin = plugin.tr('_', '-')
proxy_plugin_prefix = 'smart-proxy-'
else
proxy_plugin_prefix = 'smart_proxy_'
end
scl = check_min_version('foreman-proxy', '2.0')
ruby_prefix(scl) + proxy_plugin_prefix + plugin
end
|
#repository_manager ⇒ Object
#ruby_prefix(scl = true) ⇒ Object
194
195
196
197
198
199
200
201
202
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 194
def ruby_prefix(scl = true)
if debian_or_ubuntu?
'ruby-'
elsif el7? && scl
'tfm-rubygem-'
else
'rubygem-'
end
end
|
#server? ⇒ Boolean
98
99
100
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 98
def server?
find_package('foreman')
end
|
#shellescape(string) ⇒ Object
141
142
143
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 141
def shellescape(string)
Shellwords.escape(string)
end
|
#systemd_installed? ⇒ Boolean
32
33
34
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 32
def systemd_installed?
File.exist?('/usr/bin/systemctl')
end
|
#version(value) ⇒ Object
145
146
147
148
149
150
|
# File 'lib/foreman_maintain/concerns/system_helpers.rb', line 145
def version(value)
value.gsub!(/[+~]/, '-')
Version.new(value)
end
|