kanrisuru 0.7.2 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/kanrisuru/core/disk.rb +5 -5
- data/lib/kanrisuru/core/system.rb +87 -0
- data/lib/kanrisuru/core/zypper.rb +3 -0
- data/lib/kanrisuru/os_package.rb +1 -2
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/system_spec.rb +15 -0
- data/spec/functional/core/zypper_spec.rb +6 -0
- data/spec/functional/os_package_spec.rb +8 -8
- data/spec/unit/core/system_spec.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce41108c8201af2a48ac2453f8dc3fb993869e9264a8754d603a11d09ffe1cb5
|
4
|
+
data.tar.gz: 542d34622a949d0eb5ddddc1d7403f13e9e37dfb39cb88b589c7655a2a34a3e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aea2688091ff8449f21eb11cd2fdcb51d71563538fd9c9e38a484770adb8745663a3132314b0001d9e6206dbd57533fe2626af1c59e2ada6d0ea394e2fdd113
|
7
|
+
data.tar.gz: 054a8612edecb94b79bd6b7488096ae12d4fee790d17cf295d4a04f397282ae2c9f5e4a977a37145bd4fc37bf0896a2a9bbd43098762ff65496de29804aa6a0b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## Kanrisuru 0.8.2 (August 19, 2021) ##
|
2
|
+
* Convert `major` and `minor` device field values to an `integer` in lsblk system module.
|
3
|
+
|
4
|
+
## Kanrisuru 0.8.1 (August 19, 2021) ##
|
5
|
+
* Fix `nodeps` flag value for `lsblk` command in disk module.
|
6
|
+
|
7
|
+
## Kanrisuru 0.8.0 (August 18, 2021) ##
|
8
|
+
* Add last / lastb implementation in system core module.
|
9
|
+
|
10
|
+
## Kanrisuru 0.7.3 (August 9, 2021) ##
|
11
|
+
* Fixed bug with zypper remove package, where the package names weren't being added to the linux command.
|
12
|
+
* Test case added to ensure package is removed.
|
13
|
+
|
1
14
|
## Kanrisuru 0.7.2 (August 9, 2021) ##
|
2
15
|
* Fixed bug with the `os_method_cache` instance variable set in the namespaced instance of a host. This was causing collision issues inbetween host instances, where, hosts with the same aliased method name was getting overwritten (with a different OS), since the namespace instance variable existing on the host class definition wasn't getting reset inbetween host instantiations. Given that the `os_method_cache` is normally re-instantiated, this bug fix addresses this so that the `os_method_cache` is always defined on the host instance, ie:
|
3
16
|
|
data/lib/kanrisuru/core/disk.rb
CHANGED
@@ -144,7 +144,7 @@ module Kanrisuru
|
|
144
144
|
|
145
145
|
command.append_flag('-a', all)
|
146
146
|
command.append_flag('-p', paths)
|
147
|
-
command.append_flag('-
|
147
|
+
command.append_flag('-d', nodeps)
|
148
148
|
|
149
149
|
command.append_arg('-o', 'NAME,FSTYPE,MAJ:MIN,MOUNTPOINT,SIZE,UUID,RO,RM,OWNER,GROUP,MODE,TYPE')
|
150
150
|
execute(command)
|
@@ -244,8 +244,8 @@ module Kanrisuru
|
|
244
244
|
current_device.fs_type = value
|
245
245
|
when 'MAJ:MIN'
|
246
246
|
maj, min = value.split(':')
|
247
|
-
current_device.maj_dev = maj
|
248
|
-
current_device.min_dev = min
|
247
|
+
current_device.maj_dev = maj ? maj.to_i : nil
|
248
|
+
current_device.min_dev = min ? min.to_i : nil
|
249
249
|
when 'MOUNTPOINT'
|
250
250
|
current_device.mount_point = value
|
251
251
|
when 'SIZE'
|
@@ -281,8 +281,8 @@ module Kanrisuru
|
|
281
281
|
|
282
282
|
LsblkDevice.new(
|
283
283
|
device['name'],
|
284
|
-
maj_min ? maj_min.split(':')[0] : nil,
|
285
|
-
maj_min ? maj_min.split(':')[1] : nil,
|
284
|
+
maj_min ? maj_min.split(':')[0].to_i : nil,
|
285
|
+
maj_min ? maj_min.split(':')[1].to_i : nil,
|
286
286
|
device['rm'],
|
287
287
|
device['ro'],
|
288
288
|
device['owner'],
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'date'
|
4
|
+
require 'ipaddr'
|
4
5
|
|
5
6
|
module Kanrisuru
|
6
7
|
module Core
|
@@ -19,6 +20,7 @@ module Kanrisuru
|
|
19
20
|
os_define :linux, :kstat
|
20
21
|
|
21
22
|
os_define :linux, :lsof
|
23
|
+
os_define :linux, :last
|
22
24
|
|
23
25
|
os_define :linux, :uptime
|
24
26
|
|
@@ -116,6 +118,19 @@ module Kanrisuru
|
|
116
118
|
:name
|
117
119
|
)
|
118
120
|
|
121
|
+
SessionDetail = Struct.new(
|
122
|
+
:tty,
|
123
|
+
:login_at,
|
124
|
+
:logout_at,
|
125
|
+
:ip_address,
|
126
|
+
:success
|
127
|
+
)
|
128
|
+
|
129
|
+
LoginUser = Struct.new(
|
130
|
+
:user,
|
131
|
+
:sessions
|
132
|
+
)
|
133
|
+
|
119
134
|
def load_env
|
120
135
|
command = Kanrisuru::Command.new('env')
|
121
136
|
execute_shell(command)
|
@@ -271,6 +286,65 @@ module Kanrisuru
|
|
271
286
|
Kanrisuru::Result.new(command, &:to_i)
|
272
287
|
end
|
273
288
|
|
289
|
+
def last(opts = {})
|
290
|
+
command =
|
291
|
+
if opts[:failed_attempts]
|
292
|
+
Kanrisuru::Command.new('lastb')
|
293
|
+
else
|
294
|
+
Kanrisuru::Command.new('last')
|
295
|
+
end
|
296
|
+
|
297
|
+
command.append_flag('-i')
|
298
|
+
command.append_flag('-F')
|
299
|
+
command.append_arg('-f', opts[:file])
|
300
|
+
|
301
|
+
## Some systems only use 1 space between user and TTY field
|
302
|
+
## Add an additional space in output formatting for simple parsing
|
303
|
+
## logic.
|
304
|
+
command | "sed 's/ / /'"
|
305
|
+
|
306
|
+
execute_shell(command)
|
307
|
+
|
308
|
+
Kanrisuru::Result.new(command) do |cmd|
|
309
|
+
lines = cmd.to_a
|
310
|
+
|
311
|
+
mapping = {}
|
312
|
+
|
313
|
+
lines.each do |line|
|
314
|
+
next if Kanrisuru::Util.blank?(line)
|
315
|
+
next if line.include?('wtmp') || line.include?('btmp')
|
316
|
+
|
317
|
+
line = line.gsub(' still logged in', '- still logged in') if line.include?('still logged in')
|
318
|
+
|
319
|
+
values = line.split(/\s{2,}/, 4)
|
320
|
+
user = values[0]
|
321
|
+
tty = values[1]
|
322
|
+
ip = IPAddr.new(values[2])
|
323
|
+
|
324
|
+
date_range = values[3]
|
325
|
+
login, logout = date_range.split(' - ')
|
326
|
+
|
327
|
+
login = parse_last_date(login) if login
|
328
|
+
|
329
|
+
logout = parse_last_date(logout) if logout
|
330
|
+
|
331
|
+
detail = SessionDetail.new
|
332
|
+
detail.tty = tty
|
333
|
+
detail.ip_address = ip
|
334
|
+
detail.login_at = login
|
335
|
+
detail.logout_at = logout
|
336
|
+
|
337
|
+
detail.success = !Kanrisuru::Util.present?(opts[:failed_attemps])
|
338
|
+
|
339
|
+
mapping[user] = LoginUser.new(user, []) unless mapping.key?(user)
|
340
|
+
|
341
|
+
mapping[user].sessions << detail
|
342
|
+
end
|
343
|
+
|
344
|
+
mapping.values
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
274
348
|
def ps(opts = {})
|
275
349
|
group = opts[:group]
|
276
350
|
user = opts[:user]
|
@@ -567,6 +641,19 @@ module Kanrisuru
|
|
567
641
|
line.split(char, 2)[1]
|
568
642
|
end
|
569
643
|
|
644
|
+
def parse_last_date(string)
|
645
|
+
tokens = string.split
|
646
|
+
|
647
|
+
return if tokens.length < 4
|
648
|
+
|
649
|
+
month_abbr = tokens[1]
|
650
|
+
day = tokens[2]
|
651
|
+
timestamp = tokens[3]
|
652
|
+
year = tokens[4]
|
653
|
+
|
654
|
+
DateTime.parse("#{day} #{month_abbr} #{year} #{timestamp}")
|
655
|
+
end
|
656
|
+
|
570
657
|
def parse_policy_abbr(value)
|
571
658
|
case value
|
572
659
|
when '-'
|
@@ -714,6 +714,9 @@ module Kanrisuru
|
|
714
714
|
zypper_package_type_opt(command, opts)
|
715
715
|
zypper_solver_opts(command, opts)
|
716
716
|
|
717
|
+
packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
|
718
|
+
command << packages
|
719
|
+
|
717
720
|
execute_shell(command)
|
718
721
|
Kanrisuru::Result.new(command)
|
719
722
|
end
|
data/lib/kanrisuru/os_package.rb
CHANGED
@@ -159,7 +159,6 @@ module Kanrisuru
|
|
159
159
|
os_method_names.each do |method_name|
|
160
160
|
if namespace
|
161
161
|
namespace_class.class_eval do
|
162
|
-
|
163
162
|
define_method method_name do |*args, &block|
|
164
163
|
unbound_method = nil
|
165
164
|
|
@@ -193,7 +192,7 @@ module Kanrisuru
|
|
193
192
|
else
|
194
193
|
define_method method_name do |*args, &block|
|
195
194
|
unbound_method = nil
|
196
|
-
|
195
|
+
|
197
196
|
host = self
|
198
197
|
os_method_cache = host.instance_variable_get(:@os_method_cache) || {}
|
199
198
|
|
data/lib/kanrisuru/version.rb
CHANGED
@@ -96,6 +96,21 @@ RSpec.describe Kanrisuru::Core::System do
|
|
96
96
|
expect(result.cpus.length).to eq(host.cpu.cores)
|
97
97
|
end
|
98
98
|
|
99
|
+
it 'gets login details' do
|
100
|
+
host.su('root')
|
101
|
+
|
102
|
+
result = host.last
|
103
|
+
expect(result).to be_success
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'gets failed login attempts' do
|
107
|
+
host.su('root')
|
108
|
+
|
109
|
+
result = host.last(failed_attempts: true)
|
110
|
+
puts result.data
|
111
|
+
expect(result).to be_success
|
112
|
+
end
|
113
|
+
|
99
114
|
it 'gets process details' do
|
100
115
|
result = host.ps
|
101
116
|
|
@@ -40,6 +40,12 @@ RSpec.describe Kanrisuru::Core::Zypper do
|
|
40
40
|
expect(result).to be_success
|
41
41
|
end
|
42
42
|
|
43
|
+
it 'removes a package' do
|
44
|
+
host.su('root')
|
45
|
+
result = host.zypper('remove', packages: ['ffmpeg'])
|
46
|
+
expect(result).to be_success
|
47
|
+
end
|
48
|
+
|
43
49
|
it 'lists updates' do
|
44
50
|
result = host.zypper('list-updates')
|
45
51
|
expect(result).to be_success
|
@@ -162,10 +162,10 @@ RSpec.describe Kanrisuru::OsPackage do
|
|
162
162
|
|
163
163
|
expect(cluster).to respond_to(:output)
|
164
164
|
expect(cluster.output).to eq([
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
165
|
+
{ host: 'ubuntu-host', result: 'debian' },
|
166
|
+
{ host: 'centos-host', result: 'fedora' },
|
167
|
+
{ host: 'opensuse-host', result: 'sles' }
|
168
|
+
])
|
169
169
|
|
170
170
|
expect(host1).to respond_to(:alias)
|
171
171
|
expect(host2).to respond_to(:alias)
|
@@ -180,10 +180,10 @@ RSpec.describe Kanrisuru::OsPackage do
|
|
180
180
|
expect(cluster).to respond_to(:alias)
|
181
181
|
expect(cluster.alias).to respond_to(:output)
|
182
182
|
expect(cluster.alias.output).to eq([
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
183
|
+
{ host: 'ubuntu-host', result: 'debian' },
|
184
|
+
{ host: 'centos-host', result: 'fedora' },
|
185
|
+
{ host: 'opensuse-host', result: 'sles' }
|
186
|
+
])
|
187
187
|
|
188
188
|
host1.disconnect
|
189
189
|
host2.disconnect
|
@@ -86,5 +86,17 @@ RSpec.describe Kanrisuru::Core::System do
|
|
86
86
|
:inode,
|
87
87
|
:name
|
88
88
|
)
|
89
|
+
expect(Kanrisuru::Core::System::SessionDetail.new).to respond_to(
|
90
|
+
:tty,
|
91
|
+
:login_at,
|
92
|
+
:logout_at,
|
93
|
+
:ip_address,
|
94
|
+
:success
|
95
|
+
)
|
96
|
+
|
97
|
+
expect(Kanrisuru::Core::System::LoginUser.new).to respond_to(
|
98
|
+
:user,
|
99
|
+
:sessions
|
100
|
+
)
|
89
101
|
end
|
90
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kanrisuru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Mammina
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|