kanrisuru 0.7.3 → 0.8.0
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/CHANGELOG.md +3 -0
- data/lib/kanrisuru/core/system.rb +87 -0
- data/lib/kanrisuru/core/zypper.rb +1 -1
- 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/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: 4f5fe692ff53ac4de87ca38181765a63cf88f0beab4e44145c780ba9af934ede
|
|
4
|
+
data.tar.gz: 58acc02d34aff916670ab26c9659f7e40205d31492ec5f043ea51487df33cb62
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e2b8134ef2351a86f88286a7ed50a1f768510c75f65ecbf9d9684f376606b46ea023f1b78723ae550183c7606e230d7152614d263b19f1a31c6bf6fe0cfa2cc3
|
|
7
|
+
data.tar.gz: f7382ab716a20185ec071f96b6793afa7fcc1e11d32a0dd3174455cb7a5ba19d3fb61aa0fbb7d5574f26af36d983b3fae4ee9ec5757f16ef2a21edc43d5d83cd
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
## Kanrisuru 0.8.0 (August 18, 2021) ##
|
|
2
|
+
* Add last / lastb implementation in system core module.
|
|
3
|
+
|
|
1
4
|
## Kanrisuru 0.7.3 (August 9, 2021) ##
|
|
2
5
|
* Fixed bug with zypper remove package, where the package names weren't being added to the linux command.
|
|
3
6
|
* Test case added to ensure package is removed.
|
|
@@ -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 '-'
|
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
|
|
|
@@ -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.0
|
|
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-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|