kanrisuru 0.2.2 → 0.2.6
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 -0
- data/kanrisuru.gemspec +8 -8
- data/lib/kanrisuru/core.rb +9 -0
- data/lib/kanrisuru/core/apt.rb +324 -0
- data/lib/kanrisuru/core/file.rb +1 -1
- data/lib/kanrisuru/core/ip.rb +7 -7
- data/lib/kanrisuru/core/path.rb +0 -1
- data/lib/kanrisuru/core/stat.rb +1 -2
- data/lib/kanrisuru/core/system.rb +2 -1
- data/lib/kanrisuru/core/yum.rb +386 -0
- data/lib/kanrisuru/remote/os.rb +3 -1
- data/lib/kanrisuru/util.rb +4 -4
- data/lib/kanrisuru/util/bits.rb +19 -0
- data/lib/kanrisuru/util/os_family.rb +6 -1
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/apt_spec.rb +181 -0
- data/spec/functional/core/stream_spec.rb +1 -1
- data/spec/functional/core/yum_spec.rb +160 -0
- data/spec/unit/template_spec.rb +0 -2
- metadata +21 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8442dfb50e30ac79aacd58ed1dd80ac17858571c3d84790eed8d8efcad7e6f29
|
4
|
+
data.tar.gz: bab46330d7f3aca3dee667501d2a59a001f813665a071be8362b8a9a6b9e2a18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 852303708004d232098e85ad7ea762caa69bb65b450d4b9cda0eb208c573e85d47f46981a3a281de35cbd84830ca9a52f71126486848962ad980acbb6940d48b
|
7
|
+
data.tar.gz: a9c234d9e6c112ce682fb444b3c77eaa76619fbc46b3d64ab86914beebead28268e460fb5305a5642c9f662c318d22836e8b2b1b7c11891b531b9615c5f2a5e4
|
data/README.md
CHANGED
@@ -146,6 +146,9 @@ cluster.execute('uname') #=> {host: 'host1', result: 'Linux'}, {host: 'host2', r
|
|
146
146
|
| Upload to remote server | upload | scp | core | https://linux.die.net/man/1/scp | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
147
147
|
| Download from remote server | download | scp | core | https://linux.die.net/man/1/scp | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
148
148
|
| Wget | wget | wget | core | https://linux.die.net/man/1/wget | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
149
|
+
| **Packages** | | | | | | | | | | | |
|
150
|
+
| Apt | apt | apt | core | https://linux.die.net/man/1/apt | [x] | [x] | | | | | |
|
151
|
+
| Yum | yum | yum | core | https://linux.die.net/man/1/yum | | | [x] | [x] | [x] | | |
|
149
152
|
|
150
153
|
## Development
|
151
154
|
|
data/kanrisuru.gemspec
CHANGED
@@ -8,20 +8,20 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.author = 'Ryan Mammina'
|
9
9
|
gem.email = 'ryan@avamia.com'
|
10
10
|
gem.license = 'MIT'
|
11
|
-
gem.summary = 'Manage remote servers with ruby.'
|
11
|
+
gem.summary = 'Manage remote servers over ssh with ruby.'
|
12
12
|
gem.homepage = 'https://github.com/avamia/kanrisuru'
|
13
13
|
|
14
14
|
gem.required_ruby_version = '>= 2.5.0'
|
15
15
|
gem.required_rubygems_version = '>= 1.8.11'
|
16
16
|
|
17
|
-
gem.add_development_dependency 'rspec'
|
18
|
-
gem.add_development_dependency 'rubocop'
|
19
|
-
gem.add_development_dependency 'rubocop-rspec'
|
20
|
-
gem.add_development_dependency 'simplecov'
|
17
|
+
gem.add_development_dependency 'rspec', '>= 3.10.0'
|
18
|
+
gem.add_development_dependency 'rubocop', '>= 1.12.1'
|
19
|
+
gem.add_development_dependency 'rubocop-rspec', '>= 2.2.0'
|
20
|
+
gem.add_development_dependency 'simplecov', '>= 0.21.2'
|
21
21
|
|
22
|
-
gem.add_runtime_dependency 'net-ping'
|
23
|
-
gem.add_runtime_dependency 'net-scp'
|
24
|
-
gem.add_runtime_dependency 'net-ssh'
|
22
|
+
gem.add_runtime_dependency 'net-ping', '>= 2.0.8'
|
23
|
+
gem.add_runtime_dependency 'net-scp', '>= 3.0.0'
|
24
|
+
gem.add_runtime_dependency 'net-ssh', '>= 6.1.0'
|
25
25
|
|
26
26
|
gem.files = `git ls-files`.split("\n")
|
27
27
|
gem.require_paths = ['lib']
|
data/lib/kanrisuru/core.rb
CHANGED
@@ -14,6 +14,9 @@ require_relative 'core/stream'
|
|
14
14
|
require_relative 'core/transfer'
|
15
15
|
require_relative 'core/ip'
|
16
16
|
require_relative 'core/socket'
|
17
|
+
require_relative 'core/apt'
|
18
|
+
require_relative 'core/yum'
|
19
|
+
require_relative 'core/zypper'
|
17
20
|
|
18
21
|
module Kanrisuru
|
19
22
|
module Remote
|
@@ -32,6 +35,9 @@ module Kanrisuru
|
|
32
35
|
os_include Kanrisuru::Core::Transfer
|
33
36
|
os_include Kanrisuru::Core::IP
|
34
37
|
os_include Kanrisuru::Core::Socket
|
38
|
+
os_include Kanrisuru::Core::Apt
|
39
|
+
os_include Kanrisuru::Core::Yum
|
40
|
+
os_include Kanrisuru::Core::Zypper
|
35
41
|
end
|
36
42
|
|
37
43
|
class Cluster
|
@@ -48,6 +54,9 @@ module Kanrisuru
|
|
48
54
|
os_collection Kanrisuru::Core::Transfer
|
49
55
|
os_collection Kanrisuru::Core::IP
|
50
56
|
os_collection Kanrisuru::Core::Socket
|
57
|
+
os_collection Kanrisuru::Core::Apt
|
58
|
+
os_collection Kanrisuru::Core::Yum
|
59
|
+
os_collection Kanrisuru::Core::Zypper
|
51
60
|
end
|
52
61
|
end
|
53
62
|
end
|
@@ -0,0 +1,324 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kanrisuru
|
4
|
+
module Core
|
5
|
+
module Apt
|
6
|
+
extend OsPackage::Define
|
7
|
+
|
8
|
+
os_define :debian, :apt
|
9
|
+
|
10
|
+
AptSource = Struct.new(:url, :dist, :architecture)
|
11
|
+
AptPackageOverview = Struct.new(:package, :version, :suites, :architecture, :installed, :upgradeable, :automatic)
|
12
|
+
AptPackageDetail = Struct.new(
|
13
|
+
:package,
|
14
|
+
:version,
|
15
|
+
:priority,
|
16
|
+
:section,
|
17
|
+
:origin,
|
18
|
+
:maintainer,
|
19
|
+
:original_maintainer,
|
20
|
+
:bugs,
|
21
|
+
:install_size,
|
22
|
+
:dependencies,
|
23
|
+
:recommends,
|
24
|
+
:provides,
|
25
|
+
:suggests,
|
26
|
+
:breaks,
|
27
|
+
:conflicts,
|
28
|
+
:replaces,
|
29
|
+
:homepage,
|
30
|
+
:task,
|
31
|
+
:supported,
|
32
|
+
:download_size,
|
33
|
+
:apt_manual_installed,
|
34
|
+
:apt_sources,
|
35
|
+
:description,
|
36
|
+
:summary
|
37
|
+
)
|
38
|
+
|
39
|
+
def apt(action, opts = {})
|
40
|
+
case action
|
41
|
+
when 'list'
|
42
|
+
apt_list(opts)
|
43
|
+
when 'update'
|
44
|
+
apt_update(opts)
|
45
|
+
when 'upgrade'
|
46
|
+
apt_upgrade(opts)
|
47
|
+
when 'full-upgrade', 'full_upgrade'
|
48
|
+
apt_full_upgrade(opts)
|
49
|
+
when 'install'
|
50
|
+
apt_install(opts)
|
51
|
+
when 'remove'
|
52
|
+
apt_remove(opts)
|
53
|
+
when 'purge'
|
54
|
+
apt_purge(opts)
|
55
|
+
when 'autoremove'
|
56
|
+
apt_autoremove(opts)
|
57
|
+
when 'search'
|
58
|
+
apt_search(opts)
|
59
|
+
when 'show'
|
60
|
+
apt_show(opts)
|
61
|
+
when 'clean'
|
62
|
+
apt_clean(opts)
|
63
|
+
when 'autoclean'
|
64
|
+
apt_autoclean(opts)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def apt_autoclean(_opts)
|
71
|
+
command = Kanrisuru::Command.new('apt-get autoclean')
|
72
|
+
execute_shell(command)
|
73
|
+
Kanrisuru::Result.new(command)
|
74
|
+
end
|
75
|
+
|
76
|
+
def apt_clean(_opts)
|
77
|
+
command = Kanrisuru::Command.new('apt-get clean')
|
78
|
+
execute_shell(command)
|
79
|
+
Kanrisuru::Result.new(command)
|
80
|
+
end
|
81
|
+
|
82
|
+
def apt_search(opts)
|
83
|
+
command = Kanrisuru::Command.new('apt search')
|
84
|
+
command << opts[:query]
|
85
|
+
|
86
|
+
execute_shell(command)
|
87
|
+
|
88
|
+
Kanrisuru::Result.new(command) do |cmd|
|
89
|
+
lines = cmd.to_a
|
90
|
+
lines.shift
|
91
|
+
lines.shift
|
92
|
+
|
93
|
+
result = []
|
94
|
+
|
95
|
+
lines.each do |line|
|
96
|
+
next unless line.include?('/')
|
97
|
+
|
98
|
+
item = parse_apt_line(line)
|
99
|
+
next unless item
|
100
|
+
|
101
|
+
result << item
|
102
|
+
end
|
103
|
+
|
104
|
+
result
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def apt_list(opts)
|
109
|
+
command = Kanrisuru::Command.new('apt list')
|
110
|
+
command.append_flag('--installed', opts[:installed])
|
111
|
+
command.append_flag('--upgradeable', opts[:upgradeable])
|
112
|
+
command.append_flag('--all-versions', opts[:all_versions])
|
113
|
+
command.append_arg('-a', opts[:package_name])
|
114
|
+
|
115
|
+
execute_shell(command)
|
116
|
+
|
117
|
+
Kanrisuru::Result.new(command) do |cmd|
|
118
|
+
lines = cmd.to_a
|
119
|
+
lines.shift
|
120
|
+
|
121
|
+
result = []
|
122
|
+
lines.each do |line|
|
123
|
+
item = parse_apt_line(line)
|
124
|
+
next unless item
|
125
|
+
|
126
|
+
result << item
|
127
|
+
end
|
128
|
+
|
129
|
+
result
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def apt_autoremove(_opts)
|
134
|
+
command = Kanrisuru::Command.new('apt-get autoremove')
|
135
|
+
command.append_flag('-y')
|
136
|
+
|
137
|
+
execute_shell(command)
|
138
|
+
Kanrisuru::Result.new(command)
|
139
|
+
end
|
140
|
+
|
141
|
+
def apt_purge(opts)
|
142
|
+
command = Kanrisuru::Command.new('apt-get purge')
|
143
|
+
command.append_flag('-y')
|
144
|
+
|
145
|
+
packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
|
146
|
+
command << packages
|
147
|
+
|
148
|
+
execute_shell(command)
|
149
|
+
Kanrisuru::Result.new(command)
|
150
|
+
end
|
151
|
+
|
152
|
+
def apt_remove(opts)
|
153
|
+
command = Kanrisuru::Command.new('apt-get remove')
|
154
|
+
command.append_flag('-y')
|
155
|
+
|
156
|
+
packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
|
157
|
+
command << packages
|
158
|
+
|
159
|
+
execute_shell(command)
|
160
|
+
Kanrisuru::Result.new(command)
|
161
|
+
end
|
162
|
+
|
163
|
+
def apt_install(opts)
|
164
|
+
command = Kanrisuru::Command.new('apt-get install')
|
165
|
+
command.append_flag('-y')
|
166
|
+
|
167
|
+
command.append_flag('--no-upgrade', opts[:no_upgrade])
|
168
|
+
command.append_flag('--only-upgrade', opts[:only_upgrade])
|
169
|
+
command.append_flag('--reinstall', opts[:reinstall])
|
170
|
+
|
171
|
+
packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
|
172
|
+
command << packages
|
173
|
+
|
174
|
+
execute_shell(command)
|
175
|
+
Kanrisuru::Result.new(command)
|
176
|
+
end
|
177
|
+
|
178
|
+
def apt_full_upgrade(_opts)
|
179
|
+
command = Kanrisuru::Command.new('apt full-upgrade')
|
180
|
+
command.append_flag('-y')
|
181
|
+
execute_shell(command)
|
182
|
+
Kanrisuru::Result.new(command)
|
183
|
+
end
|
184
|
+
|
185
|
+
def apt_upgrade(_opts)
|
186
|
+
command = Kanrisuru::Command.new('apt-get upgrade')
|
187
|
+
command.append_flag('-y')
|
188
|
+
execute_shell(command)
|
189
|
+
Kanrisuru::Result.new(command)
|
190
|
+
end
|
191
|
+
|
192
|
+
def apt_update(_opts)
|
193
|
+
command = Kanrisuru::Command.new('apt-get update')
|
194
|
+
command.append_flag('-y')
|
195
|
+
execute_shell(command)
|
196
|
+
Kanrisuru::Result.new(command)
|
197
|
+
end
|
198
|
+
|
199
|
+
def apt_show(opts)
|
200
|
+
command = Kanrisuru::Command.new('apt show')
|
201
|
+
command.append_flag('-a')
|
202
|
+
|
203
|
+
packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
|
204
|
+
command << packages
|
205
|
+
|
206
|
+
execute_shell(command)
|
207
|
+
|
208
|
+
Kanrisuru::Result.new(command) do |cmd|
|
209
|
+
lines = cmd.to_a
|
210
|
+
rows = []
|
211
|
+
|
212
|
+
current_row = nil
|
213
|
+
description = ''
|
214
|
+
|
215
|
+
lines.each do |line|
|
216
|
+
next if line == 'WARNING: apt does not have a stable CLI interface. Use with caution in scripts.'
|
217
|
+
next if ['', nil, '.'].include?(line)
|
218
|
+
|
219
|
+
case line
|
220
|
+
when /^Package:/
|
221
|
+
unless current_row.nil?
|
222
|
+
current_row.description = description.strip
|
223
|
+
description = ''
|
224
|
+
rows << current_row
|
225
|
+
end
|
226
|
+
|
227
|
+
current_row = AptPackageDetail.new
|
228
|
+
current_row.package = extract_single_line(line)
|
229
|
+
when /^Version:/
|
230
|
+
current_row.version = extract_single_line(line)
|
231
|
+
when /^Priority:/
|
232
|
+
current_row.priority = extract_single_line(line)
|
233
|
+
when /^Section:/
|
234
|
+
current_row.section = extract_single_line(line)
|
235
|
+
when /^Origin:/
|
236
|
+
current_row.origin = extract_single_line(line)
|
237
|
+
when /^Maintainer:/
|
238
|
+
current_row.maintainer = extract_single_line(line)
|
239
|
+
when /^Original-Maintainer:/
|
240
|
+
current_row.original_maintainer = extract_single_line(line)
|
241
|
+
when /^Bugs:/
|
242
|
+
current_row.bugs = extract_single_line(line)
|
243
|
+
when /^Installed-Size:/
|
244
|
+
size = Kanrisuru::Util::Bits.normalize_size(extract_single_line(line))
|
245
|
+
current_row.install_size = size
|
246
|
+
when /^Download-Size:/
|
247
|
+
size = Kanrisuru::Util::Bits.normalize_size(extract_single_line(line))
|
248
|
+
current_row.download_size = size
|
249
|
+
when /^Depends:/
|
250
|
+
current_row.dependencies = parse_comma_values(extract_single_line(line))
|
251
|
+
when /^Provides:/
|
252
|
+
current_row.provides = parse_comma_values(extract_single_line(line))
|
253
|
+
when /^Recommends:/
|
254
|
+
current_row.recommends = parse_comma_values(extract_single_line(line))
|
255
|
+
when /^Suggests:/
|
256
|
+
current_row.suggests = parse_comma_values(extract_single_line(line))
|
257
|
+
when /^Breaks:/
|
258
|
+
current_row.breaks = parse_comma_values(extract_single_line(line))
|
259
|
+
when /^Conflicts:/
|
260
|
+
current_row.conflicts = parse_comma_values(extract_single_line(line))
|
261
|
+
when /^Replaces:/
|
262
|
+
current_row.replaces = parse_comma_values(extract_single_line(line))
|
263
|
+
when /^Homepage:/
|
264
|
+
current_row.homepage = extract_single_line(line)
|
265
|
+
when /^Task:/
|
266
|
+
current_row.task = parse_comma_values(extract_single_line(line))
|
267
|
+
when /^Supported:/
|
268
|
+
current_row.supported = extract_single_line(line)
|
269
|
+
when /^APT-Sources:/
|
270
|
+
current_row.apt_sources = parse_apt_sources(extract_single_line(line))
|
271
|
+
when /^APT-Manual-Installed:/
|
272
|
+
current_row.apt_manual_installed = extract_single_line(line) == 'yes'
|
273
|
+
when /^Description:/
|
274
|
+
current_row.summary = extract_single_line(line)
|
275
|
+
else
|
276
|
+
description += " #{line.strip}"
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
current_row.description = description.strip
|
281
|
+
rows << current_row
|
282
|
+
rows
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
def extract_single_line(line)
|
287
|
+
line.split(': ')[1]
|
288
|
+
end
|
289
|
+
|
290
|
+
def parse_comma_values(string)
|
291
|
+
string.split(', ')
|
292
|
+
end
|
293
|
+
|
294
|
+
def parse_apt_sources(string)
|
295
|
+
url, dist, architecture, = string.split
|
296
|
+
AptSource.new(url, dist, architecture)
|
297
|
+
end
|
298
|
+
|
299
|
+
def parse_apt_line(line)
|
300
|
+
values = line.split('/')
|
301
|
+
return if values.length < 2
|
302
|
+
|
303
|
+
package = values[0]
|
304
|
+
|
305
|
+
values = values[1].split
|
306
|
+
suites = values[0].split(',')
|
307
|
+
version = values[1]
|
308
|
+
architecture = values[2]
|
309
|
+
|
310
|
+
installed = false
|
311
|
+
upgradeable = false
|
312
|
+
automatic = false
|
313
|
+
|
314
|
+
if values.length > 3
|
315
|
+
installed = values[3].include?('installed')
|
316
|
+
upgradeable = values[3].include?('upgradeable')
|
317
|
+
automatic = values[3].include?('automatic')
|
318
|
+
end
|
319
|
+
|
320
|
+
AptPackageOverview.new(package, version, suites, architecture, installed, upgradeable, automatic)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
data/lib/kanrisuru/core/file.rb
CHANGED
data/lib/kanrisuru/core/ip.rb
CHANGED
@@ -211,7 +211,7 @@ module Kanrisuru
|
|
211
211
|
|
212
212
|
command.append_arg('dev', opts[:dev])
|
213
213
|
command.append_arg('scope', opts[:scope])
|
214
|
-
|
214
|
+
command.append_arg('to', opts[:prefix])
|
215
215
|
command.append_arg('label', opts[:label])
|
216
216
|
|
217
217
|
command.append_flag('dynamic', opts[:dynamic])
|
@@ -415,14 +415,14 @@ module Kanrisuru
|
|
415
415
|
|
416
416
|
command.append_arg('type', opts[:type])
|
417
417
|
command.append_arg('from', opts[:from])
|
418
|
-
|
418
|
+
command.append_arg('to', opts[:to])
|
419
419
|
command.append_arg('iif', opts[:iif])
|
420
|
-
|
420
|
+
command.append_arg('tos', opts[:tos])
|
421
421
|
command.append_arg('dsfield', opts[:dsfield])
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
422
|
+
command.append_arg('fwmark', opts[:fwmark])
|
423
|
+
command.append_arg('priority', opts[:priority])
|
424
|
+
command.append_arg('table', opts[:table])
|
425
|
+
command.append_arg('realms', opts[:realms])
|
426
426
|
command.append_arg('nat', opts[:nat])
|
427
427
|
end
|
428
428
|
|