kanrisuru 0.2.2 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,8 +50,7 @@ module Kanrisuru
50
50
  def inode?(path)
51
51
  command = Kanrisuru::Command.new("stat #{path}")
52
52
  command.append_arg('-c', '%i')
53
-
54
- execute_shell(command)
53
+ execute(command)
55
54
  command.success?
56
55
  end
57
56
 
@@ -15,6 +15,7 @@ module Kanrisuru
15
15
  os_define :linux, :kill
16
16
 
17
17
  os_define :linux, :uptime
18
+
18
19
  os_define :linux, :w
19
20
  os_define :linux, :who
20
21
 
@@ -184,7 +185,7 @@ module Kanrisuru
184
185
 
185
186
  def w(opts = {})
186
187
  users = opts[:users]
187
- command = Kanrisuru::Command.new('w -h')
188
+ command = Kanrisuru::Command.new('w -hi')
188
189
 
189
190
  command << users if Kanrisuru::Util.present?(users)
190
191
 
@@ -0,0 +1,386 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+
5
+ module Kanrisuru
6
+ module Core
7
+ module Yum
8
+ extend OsPackage::Define
9
+
10
+ os_define :fedora, :yum
11
+
12
+ YumPackageOverview = Struct.new(:package, :architecture, :version, :installed)
13
+ YumPackageSearchResult = Struct.new(:package, :architecture, :summary)
14
+ YumPackageDetail = Struct.new(
15
+ :package,
16
+ :version,
17
+ :release,
18
+ :architecture,
19
+ :install_size,
20
+ :source,
21
+ :yum_id,
22
+ :repository,
23
+ :summary,
24
+ :url,
25
+ :license,
26
+ :description
27
+ )
28
+
29
+ YumRepolist = Struct.new(
30
+ :id,
31
+ :name,
32
+ :status,
33
+ :revision,
34
+ :packages,
35
+ :available_packages,
36
+ :repo_size,
37
+ :mirrors,
38
+ :metalink,
39
+ :updated,
40
+ :baseurl,
41
+ :expire,
42
+ :filters,
43
+ :filename
44
+ )
45
+
46
+ def yum(action, opts = {})
47
+ case action
48
+ when 'install'
49
+ yum_install(opts)
50
+ when 'localinstall'
51
+ yum_localinstall(opts)
52
+ when 'list'
53
+ yum_list(opts)
54
+ when 'search'
55
+ yum_search(opts)
56
+ when 'info'
57
+ yum_info(opts)
58
+ when 'repolist'
59
+ yum_repolist(opts)
60
+ when 'clean'
61
+ yum_clean(opts)
62
+ when 'remove'
63
+ yum_remove(opts)
64
+ when 'autoremove'
65
+ yum_autoremove(opts)
66
+ when 'erase'
67
+ yum_erase(opts)
68
+ when 'update'
69
+ yum_update(opts)
70
+ when 'upgrade'
71
+ yum_upgrade(opts)
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def yum_install(opts)
78
+ command = Kanrisuru::Command.new('yum install')
79
+ command.append_flag('-y')
80
+
81
+ packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
82
+ command << packages
83
+
84
+ execute_shell(command)
85
+ Kanrisuru::Result.new(command)
86
+ end
87
+
88
+ def yum_localinstall(opts)
89
+ command = Kanrisuru::Command.new('yum localinstall')
90
+ yum_disable_repo(command, opts[:disable_repo])
91
+ command.append_flag('-y')
92
+
93
+ if Kanrisuru::Util.present?(opts[:repos])
94
+ repos = Kanrisuru::Util.string_join_array(opts[:repos], ' ')
95
+ command << repos
96
+ end
97
+
98
+ execute_shell(command)
99
+
100
+ Kanrisuru::Result.new(command)
101
+ end
102
+
103
+ def yum_list(opts)
104
+ command = Kanrisuru::Command.new('yum list')
105
+
106
+ yum_disable_repo(command, opts[:disable_repo])
107
+
108
+ command.append_flag('all', opts[:all])
109
+ command.append_flag('available', opts[:available])
110
+ command.append_flag('updates', opts[:updates])
111
+ command.append_flag('installed', opts[:installed])
112
+ command.append_flag('extras', opts[:extras])
113
+ command.append_flag('obsoletes', opts[:obsoletes])
114
+
115
+ command << opts[:query] if Kanrisuru::Util.present?(opts[:query])
116
+
117
+ pipe_output_newline(command)
118
+
119
+ execute_shell(command)
120
+
121
+ Kanrisuru::Result.new(command) do |cmd|
122
+ lines = cmd.to_a
123
+ result = []
124
+ lines.each do |line|
125
+ item = parse_yum_line(line)
126
+ next unless item
127
+
128
+ result << item
129
+ end
130
+
131
+ result
132
+ end
133
+ end
134
+
135
+ def yum_remove(opts)
136
+ command = Kanrisuru::Command.new('yum remove')
137
+ command.append_flag('-y')
138
+
139
+ packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
140
+ raise ArugmentError, "can't remove yum" if packages.include?('yum')
141
+
142
+ command << packages
143
+
144
+ execute_shell(command)
145
+ Kanrisuru::Result.new(command)
146
+ end
147
+
148
+ def yum_clean(opts)
149
+ command = Kanrisuru::Command.new('yum clean')
150
+
151
+ command.append_flag('dbcache', opts[:dbcache])
152
+ command.append_flag('expire-cache', opts[:expire_cache])
153
+ command.append_flag('metadata', opts[:metadata])
154
+ command.append_flag('packages', opts[:packages])
155
+ command.append_flag('headers', opts[:headers])
156
+ command.append_flag('rpmdb', opts[:rpmdb])
157
+ command.append_flag('all', opts[:all])
158
+
159
+ execute_shell(command)
160
+
161
+ Kanrisuru::Result.new(command)
162
+ end
163
+
164
+ def yum_autoremove(_opts)
165
+ command = Kanrisuru::Command.new('yum autoremove')
166
+ command.append_flag('-y')
167
+ execute_shell(command)
168
+ Kanrisuru::Result.new(command)
169
+ end
170
+
171
+ def yum_erase(opts)
172
+ command = Kanrisuru::Command.new('yum erase')
173
+ command.append_flag('-y')
174
+
175
+ packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
176
+ raise ArugmentError, "can't erase yum" if packages.include?('yum')
177
+
178
+ command << packages
179
+
180
+ execute_shell(command)
181
+ Kanrisuru::Result.new(command)
182
+ end
183
+
184
+ def yum_update(_opts)
185
+ command = Kanrisuru::Command.new('yum update')
186
+ command.append_flag('-y')
187
+ execute_shell(command)
188
+ Kanrisuru::Result.new(command)
189
+ end
190
+
191
+ def yum_upgrade(_opts)
192
+ command = Kanrisuru::Command.new('yum upgrade')
193
+ command.append_flag('-y')
194
+ execute_shell(command)
195
+ Kanrisuru::Result.new(command)
196
+ end
197
+
198
+ def yum_search(opts)
199
+ command = Kanrisuru::Command.new('yum search')
200
+ command.append_flag('all', opts[:all])
201
+ command << Kanrisuru::Util.string_join_array(opts[:packages], ' ')
202
+
203
+ pipe_output_newline(command)
204
+
205
+ execute_shell(command)
206
+
207
+ Kanrisuru::Result.new(command) do |cmd|
208
+ lines = cmd.to_a
209
+
210
+ result = []
211
+ lines.each do |line|
212
+ line = line.gsub(/\s{2}/, '')
213
+ values = line.split(' : ')
214
+ next if values.length != 2
215
+
216
+ full_name = values[0]
217
+ name, architecture = full_name.split('.')
218
+ summary = values[1]
219
+
220
+ result << YumPackageSearchResult.new(name, architecture, summary)
221
+ end
222
+
223
+ result
224
+ end
225
+ end
226
+
227
+ def yum_repolist(opts)
228
+ command = Kanrisuru::Command.new('yum repolist')
229
+ command.append_flag('--verbose')
230
+
231
+ command << Kanrisuru::Util.string_join_array(opts[:repos], ' ') if opts[:repos]
232
+
233
+ execute_shell(command)
234
+
235
+ Kanrisuru::Result.new(command) do |cmd|
236
+ lines = cmd.to_a
237
+
238
+ rows = []
239
+ current_row = nil
240
+
241
+ lines.each do |line|
242
+ case line
243
+ when /^Repo-id/
244
+ if current_row
245
+ rows << current_row
246
+ current_row = nil
247
+ end
248
+
249
+ current_row = YumRepolist.new
250
+ current_row.id = extract_single_yum_line(line)
251
+ when /^Repo-name/
252
+ current_row.name = extract_single_yum_line(line)
253
+ when /^Repo-revision/
254
+ current_row.revision = extract_single_yum_line(line).to_i
255
+ when /^Repo-updated/, /^Updated/
256
+ text = extract_single_yum_line(line)
257
+ current_row.updated = DateTime.parse(text)
258
+ when /^Repo-pkgs/
259
+ current_row.packages = extract_single_yum_line(line).to_i
260
+ when /^Repo-size/
261
+ size = Kanrisuru::Util::Bits.normalize_size(extract_single_yum_line(line))
262
+ current_row.repo_size = size
263
+ when /^Repo-mirrors/
264
+ current_row.mirrors = extract_single_yum_line(line)
265
+ when /^Repo-metalink/
266
+ current_row.metalink = extract_single_yum_line(line)
267
+ when /^Repo-baseurl/
268
+ current_row.baseurl = extract_single_yum_line(line).split[0]
269
+ when /^Repo-expire/
270
+ current_row.expire = extract_single_yum_line(line)
271
+ when /^Repo-filename/
272
+ current_row.filename = extract_single_yum_line(line)
273
+ when /^Repo-available-pkgs/
274
+ current_row.available_packages = extract_single_yum_line(line).to_i
275
+ when /^Filter/
276
+ current_row.filters = extract_single_yum_line(line)
277
+ end
278
+ end
279
+
280
+ rows << current_row
281
+ rows
282
+ end
283
+ end
284
+
285
+ def yum_info(opts)
286
+ command = Kanrisuru::Command.new('yum info')
287
+ command.append_flag('--quiet')
288
+ command.append_flag('installed', opts[:installed])
289
+
290
+ command << Kanrisuru::Util.string_join_array(opts[:packages], ' ') if opts[:packages]
291
+
292
+ execute_shell(command)
293
+
294
+ Kanrisuru::Result.new(command) do |cmd|
295
+ lines = cmd.to_a
296
+
297
+ rows = []
298
+ current_row = nil
299
+ description = ''
300
+
301
+ lines.each do |line|
302
+ next unless line.include?(': ')
303
+
304
+ case line
305
+ when /^Name/
306
+ unless current_row.nil?
307
+ current_row.description = description.strip
308
+ description = ''
309
+ rows << current_row
310
+ end
311
+
312
+ current_row = YumPackageDetail.new
313
+ current_row.package = extract_single_yum_line(line)
314
+ when /^Arch/, /^Architecture/
315
+ current_row.architecture = extract_single_yum_line(line)
316
+ when /^Version/
317
+ current_row.version = extract_single_yum_line(line)
318
+ when /^Release/
319
+ current_row.release = extract_single_yum_line(line)
320
+ when /^Source/
321
+ current_row.source = extract_single_yum_line(line)
322
+ when /^Repository/
323
+ current_row.repository = extract_single_yum_line(line)
324
+ when /^Summary/
325
+ current_row.summary = extract_single_yum_line(line)
326
+ when /^URL/, /^Url/
327
+ current_row.url = extract_single_yum_line(line)
328
+ when /^License/
329
+ current_row.license = extract_single_yum_line(line)
330
+ when /^From repo/
331
+ current_row.yum_id = extract_single_yum_line(line)
332
+ when /^Size/
333
+ size = Kanrisuru::Util::Bits.normalize_size(extract_single_yum_line(line))
334
+ current_row.install_size = size
335
+ when /^Description/
336
+ description = extract_single_yum_line(line)
337
+ else
338
+ next if line == ''
339
+
340
+ description += " #{extract_single_yum_line(line).strip}"
341
+ end
342
+ end
343
+
344
+ current_row.description = description.strip
345
+ rows << current_row
346
+ rows
347
+ end
348
+ end
349
+
350
+ def extract_single_yum_line(line)
351
+ values = line.split(': ', 2)
352
+ values.length == 2 ? values[1] : ''
353
+ end
354
+
355
+ def parse_yum_line(line)
356
+ values = line.split
357
+ return if values.length != 3
358
+ return unless /^\w+\.\w+$/i.match(values[0])
359
+
360
+ full_name = values[0]
361
+ version = values[1]
362
+
363
+ name, architecture = full_name.split('.')
364
+
365
+ YumPackageOverview.new(name, architecture, version)
366
+ end
367
+
368
+ ## Bug reported on the output of the yum command
369
+ ## https://bugzilla.redhat.com/show_bug.cgi?id=584525
370
+ ## that autowraps text when used in a script beyond 80 chars wide.
371
+ ## Work-around with formatting by
372
+ ## piping through trimming extra newline chars.
373
+ def pipe_output_newline(command)
374
+ command | "tr '\\n' '#'"
375
+ command | "sed -e 's/# / /g'"
376
+ command | "tr '#' '\\n'"
377
+ end
378
+
379
+ def yum_disable_repo(command, repo)
380
+ return unless Kanrisuru::Util.present?(repo)
381
+
382
+ command.append_flag("--disablerepo=#{repo}")
383
+ end
384
+ end
385
+ end
386
+ end
@@ -72,7 +72,9 @@ module Kanrisuru
72
72
  result = @host.execute(command)
73
73
  raise 'Invalid os release' if result.failure?
74
74
 
75
- result.to_s.gsub(/"/, '')
75
+ value = result.to_s
76
+ value = value.gsub(/"/, '')
77
+ value.gsub('-', '_')
76
78
  end
77
79
 
78
80
  def parse_os_version
@@ -15,13 +15,13 @@ module Kanrisuru
15
15
  !Kanrisuru::Util.blank?(value)
16
16
  end
17
17
 
18
- def self.array_join_string(arg)
19
- arg.instance_of?(Array) ? arg.join(',') : arg
18
+ def self.array_join_string(arg, field = ',')
19
+ arg.instance_of?(Array) ? arg.join(field) : arg
20
20
  end
21
21
 
22
- def self.string_join_array(arg)
22
+ def self.string_join_array(arg, field = ',')
23
23
  array = arg.instance_of?(String) ? [arg] : arg
24
- array.join(',')
24
+ array.join(field)
25
25
  end
26
26
 
27
27
  def self.numeric?(value)
@@ -3,6 +3,25 @@
3
3
  module Kanrisuru
4
4
  class Util
5
5
  class Bits
6
+ def self.normalize_size(string)
7
+ size, unit = string.split
8
+ size = size.to_f
9
+ unit ||= 'b'
10
+
11
+ return 0 if size.zero?
12
+
13
+ case unit.downcase
14
+ when 'b'
15
+ Kanrisuru::Util::Bits.convert_bytes(size, :byte, :kilobyte)
16
+ when 'kb', 'k'
17
+ size
18
+ when 'mb', 'm'
19
+ Kanrisuru::Util::Bits.convert_from_mb(size, :kilobyte).to_i
20
+ when 'gb', 'g'
21
+ Kanrisuru::Util::Bits.convert_from_gb(size, :kilobyte).to_i
22
+ end
23
+ end
24
+
6
25
  def self.convert_from_kb(value, metric)
7
26
  convert_bytes(value, :kilobyte, metric)
8
27
  end