kanrisuru 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +17 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +9 -2
- data/README.md +4 -0
- data/kanrisuru.gemspec +1 -1
- data/lib/kanrisuru/core/path.rb +3 -3
- data/lib/kanrisuru/core/system.rb +9 -13
- data/lib/kanrisuru/os_package.rb +28 -14
- data/lib/kanrisuru/remote/env.rb +4 -0
- data/lib/kanrisuru/result.rb +4 -0
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/os_package_spec.rb +25 -1
- data/spec/unit/core/apt_spec.rb +1 -1
- data/spec/unit/core/ip_spec.rb +3 -3
- data/spec/unit/core/socket_spec.rb +3 -3
- data/spec/unit/core/system_spec.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb8de477e2168c782b7cb082a6a6760fd56aa6925f1820ee80e45baff76a7b27
|
4
|
+
data.tar.gz: ad21e0b9787a2e42d8626a367f11b44ff97ec27f000a6ec8f7967d7b22da066d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cdeb2cda038612234429eb9ca172f294f60bb8bdcb0d5db2490231dfc4ab4205ae240b3f8ef8ebab41b5de6ef9d2599c7db76dd0ebe229b8b896e3a831c8805
|
7
|
+
data.tar.gz: b32d4fe02fe5897a8f56d827290516ceb393db63068f9cba3a4396b79e667dd62a332013fbb6fe674cd680ccd374faff877441f92f57048d5b782e244b23ec20
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# How to contribute
|
2
|
+
Thank you for your interest in contributing to the Kanrisuru project. We appreciate any volunteers that want to help improve, grow and sustain the Kanrisuru code base!
|
3
|
+
|
4
|
+
## Submitting a bug
|
5
|
+
* Do not open up a GitHub issue if the bug is a security vulnerability with the Kanrisuru project, instead send an email to engineeering@avamia.com for any security realted issues.
|
6
|
+
* Check if there's already an existing issue before submitting a [similar one](https://github.com/avamia/kanrisuru/issues).
|
7
|
+
* If you can't find a similar issue [open a new one](https://github.com/avamia/kanrisuru/issues/new?assignees=&labels=&template=bug_report.md). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
|
8
|
+
|
9
|
+
## Adding a core feature
|
10
|
+
* We always welcome improving the core Kanrisuru project. If we are missing a core command available on most linux distros, this would be a place to add that type of functionality.
|
11
|
+
* Other ideas like performance optimization, additional testing, and ease of use are great ways of improving the project.
|
12
|
+
* If you want to create something outside of the core project, see the next section.
|
13
|
+
|
14
|
+
## Adding a new module
|
15
|
+
* If you want to extent Kanrisuru beyond the underlying system code base or core module packages, the best way is to create a new gem, in the format of `kanrisuru-package`.
|
16
|
+
* This helps keep the core Kanrisuru package from too much bloat.
|
17
|
+
* See our developer module section to see how to build a new Kanrisuru module.
|
@@ -0,0 +1,33 @@
|
|
1
|
+
---
|
2
|
+
name: Bug report
|
3
|
+
about: Create a report to help us improve
|
4
|
+
title: ''
|
5
|
+
labels: ''
|
6
|
+
assignees: ''
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
**Describe the bug**
|
11
|
+
A clear and concise description of what the bug is.
|
12
|
+
|
13
|
+
**To Reproduce**
|
14
|
+
Steps to reproduce the behavior:
|
15
|
+
1. Go to '...'
|
16
|
+
2. Click on '....'
|
17
|
+
3. Scroll down to '....'
|
18
|
+
4. See error
|
19
|
+
|
20
|
+
**Expected behavior**
|
21
|
+
A clear and concise description of what you expected to happen.
|
22
|
+
|
23
|
+
**Screenshots**
|
24
|
+
If applicable, add screenshots to help explain your problem.
|
25
|
+
|
26
|
+
**Desktop (please complete the following information):**
|
27
|
+
- OS: [e.g. Ubuntu]
|
28
|
+
- Version [e.g. 22]
|
29
|
+
- Ruby version: [e.g 2.7.4]
|
30
|
+
|
31
|
+
|
32
|
+
**Additional context**
|
33
|
+
Add any other context about the problem here.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
name: Feature request
|
3
|
+
about: Suggest an idea for this project
|
4
|
+
title: ''
|
5
|
+
labels: ''
|
6
|
+
assignees: ''
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
**Is your feature request related to a problem? Please describe.**
|
11
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
12
|
+
|
13
|
+
**Describe the solution you'd like**
|
14
|
+
A clear and concise description of what you want to happen.
|
15
|
+
|
16
|
+
**Describe alternatives you've considered**
|
17
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
18
|
+
|
19
|
+
**Additional context**
|
20
|
+
Add any other context or screenshots about the feature request here.
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
+
## Kanrisuru 0.7.0 (August 8, 2021) ##
|
2
|
+
* Simplify `FileInfo` struct for return object of `ls` command.
|
3
|
+
* Rename `size` to `fsize` for the `OpenFile` struct to avoid method naming conflicts of the struct class.
|
4
|
+
* Allow `os_include` and `os_collection` to define multiple groupings of methods with the same namespace.
|
5
|
+
* Add `clear` method for remote env class, to remove any session based env variables.
|
6
|
+
* Add `to_s` method to result for quick analysis of string based return values.
|
7
|
+
* Remove duplicate `numeric` method in the utils module.
|
8
|
+
|
1
9
|
## Kanrisuru 0.6.0 (August 1, 2021) ##
|
2
|
-
* Add lsof implementation in system core module
|
10
|
+
* Add `lsof` implementation in system core module
|
3
11
|
* Fix changelog formatting
|
4
12
|
* Add changelog url to gemspec
|
5
13
|
|
@@ -42,7 +50,6 @@
|
|
42
50
|
* Fix `address_size` in `cpu` method call.
|
43
51
|
|
44
52
|
## Kanrisuru 0.3.0 (July 22, 2021) ##
|
45
|
-
|
46
53
|
* Add `lscpu` system core module
|
47
54
|
* Replace `cpu` module internal fetching of data from `cpu_info` to `lscpu` struct.
|
48
55
|
|
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
[![Latest version](https://img.shields.io/github/license/avamia/kanrisuru)](https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt)
|
3
3
|
![GitHub repo size](https://img.shields.io/github/repo-size/avamia/kanrisuru)
|
4
4
|
|
5
|
+
<p align='center'>
|
6
|
+
<img src="https://s3.us-east-2.amazonaws.com/kanrisuru.com/kanrisuru-banner-02.png" width="600" />
|
7
|
+
</p>
|
8
|
+
|
5
9
|
# Kanrisuru
|
6
10
|
|
7
11
|
Kanrisuru (manage) helps you remotely control infrastructure using Ruby. This is done over SSH. I'm working on building up some basic functionality to help quickly provision, deploy and manage a single host or cluster of hosts.
|
data/kanrisuru.gemspec
CHANGED
@@ -28,6 +28,6 @@ Gem::Specification.new do |gem|
|
|
28
28
|
|
29
29
|
gem.metadata = {
|
30
30
|
'source_code_uri' => 'https://github.com/avamia/kanrisuru/',
|
31
|
-
'changelog_uri'
|
31
|
+
'changelog_uri' => 'https://github.com/avamia/kanrisuru/blob/main/CHANGELOG.md'
|
32
32
|
}
|
33
33
|
end
|
data/lib/kanrisuru/core/path.rb
CHANGED
@@ -9,10 +9,10 @@ module Kanrisuru
|
|
9
9
|
|
10
10
|
os_define :linux, :ls
|
11
11
|
os_define :linux, :pwd
|
12
|
-
os_define :linux, :whoami
|
13
|
-
os_define :linux, :which
|
14
12
|
os_define :linux, :realpath
|
15
13
|
os_define :linux, :readlink
|
14
|
+
os_define :linux, :whoami
|
15
|
+
os_define :linux, :which
|
16
16
|
|
17
17
|
FilePath = Struct.new(:path)
|
18
18
|
FileInfoId = Struct.new(:inode, :mode, :memory_blocks, :uid, :gid, :fsize, :date, :path, :type)
|
@@ -46,7 +46,7 @@ module Kanrisuru
|
|
46
46
|
type = values[1].include?('d') ? 'directory' : 'file'
|
47
47
|
items <<
|
48
48
|
if id
|
49
|
-
|
49
|
+
FileInfo.new(
|
50
50
|
values[0].to_i,
|
51
51
|
Kanrisuru::Mode.new(values[1]),
|
52
52
|
values[2].to_i,
|
@@ -111,7 +111,7 @@ module Kanrisuru
|
|
111
111
|
:file_descriptor,
|
112
112
|
:type,
|
113
113
|
:device,
|
114
|
-
:
|
114
|
+
:fsize,
|
115
115
|
:inode,
|
116
116
|
:name
|
117
117
|
)
|
@@ -220,9 +220,9 @@ module Kanrisuru
|
|
220
220
|
end
|
221
221
|
|
222
222
|
def cpu_info(spec)
|
223
|
-
Kanrisuru.logger.info
|
223
|
+
Kanrisuru.logger.info do
|
224
224
|
'DEPRECATION WARNING: cpu_info will be removed in the upcoming major release. Use lscpu instead.'
|
225
|
-
|
225
|
+
end
|
226
226
|
|
227
227
|
name =
|
228
228
|
case spec
|
@@ -320,7 +320,7 @@ module Kanrisuru
|
|
320
320
|
Kanrisuru::Result.new(command)
|
321
321
|
end
|
322
322
|
|
323
|
-
def lsof(
|
323
|
+
def lsof(_opts = {})
|
324
324
|
command = Kanrisuru::Command.new('lsof -F pcuftDsin')
|
325
325
|
|
326
326
|
execute_shell(command)
|
@@ -331,7 +331,7 @@ module Kanrisuru
|
|
331
331
|
current_pid = nil
|
332
332
|
current_user = nil
|
333
333
|
current_command = nil
|
334
|
-
|
334
|
+
|
335
335
|
rows = []
|
336
336
|
|
337
337
|
lines.each do |line|
|
@@ -343,22 +343,20 @@ module Kanrisuru
|
|
343
343
|
when /^u/
|
344
344
|
current_user = parse_lsof(line, 'u').to_i
|
345
345
|
when /^f/
|
346
|
-
if current_row
|
347
|
-
rows << current_row
|
348
|
-
end
|
346
|
+
rows << current_row if current_row
|
349
347
|
|
350
348
|
current_row = OpenFile.new
|
351
349
|
current_row.pid = current_pid
|
352
350
|
current_row.command = current_command
|
353
351
|
current_row.uid = current_user
|
354
352
|
|
355
|
-
current_row.file_descriptor = parse_lsof(line, 'f')
|
353
|
+
current_row.file_descriptor = parse_lsof(line, 'f')
|
356
354
|
when /^t/
|
357
355
|
current_row.type = parse_lsof(line, 't')
|
358
356
|
when /^D/
|
359
357
|
current_row.device = parse_lsof(line, 'D')
|
360
358
|
when /^s/
|
361
|
-
current_row.
|
359
|
+
current_row.fsize = parse_lsof(line, 's').to_i
|
362
360
|
when /^i/
|
363
361
|
current_row.inode = parse_lsof(line, 'i').to_i
|
364
362
|
when /^n/
|
@@ -366,9 +364,7 @@ module Kanrisuru
|
|
366
364
|
end
|
367
365
|
end
|
368
366
|
|
369
|
-
if current_row
|
370
|
-
rows << current_row
|
371
|
-
end
|
367
|
+
rows << current_row if current_row
|
372
368
|
|
373
369
|
rows
|
374
370
|
end
|
data/lib/kanrisuru/os_package.rb
CHANGED
@@ -46,13 +46,19 @@ module Kanrisuru
|
|
46
46
|
## Define the namespace as an eigen class instance on the host.
|
47
47
|
## Namespaced instances will access core host methods
|
48
48
|
## with @host instance variable.
|
49
|
-
namespace_class = Kanrisuru::Remote::Cluster.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
|
50
|
-
namespace_instance = Kanrisuru::Remote::Cluster.instance_variable_set("@#{namespace}", namespace_class.new)
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
if Kanrisuru::Remote::Cluster.instance_variable_defined?("@#{namespace}")
|
51
|
+
namespace_class = Kanrisuru::Remote::Cluster.const_get(Kanrisuru::Util.camelize(namespace))
|
52
|
+
namespace_instance = instance_variable_get("@#{namespace}")
|
53
|
+
else
|
54
|
+
namespace_class = Kanrisuru::Remote::Cluster.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
|
55
|
+
namespace_instance = Kanrisuru::Remote::Cluster.instance_variable_set("@#{namespace}", namespace_class.new)
|
56
|
+
|
57
|
+
class_eval do
|
58
|
+
define_method namespace do
|
59
|
+
namespace_instance.instance_variable_set(:@cluster, self)
|
60
|
+
namespace_instance
|
61
|
+
end
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
@@ -132,17 +138,25 @@ module Kanrisuru
|
|
132
138
|
## Define the namespace as an eigen class instance within the host class.
|
133
139
|
## Namespaced instances will access core host methods
|
134
140
|
## with @host instance variable.
|
135
|
-
namespace_class = Kanrisuru::Remote::Host.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
|
136
|
-
namespace_instance = Kanrisuru::Remote::Host.instance_variable_set("@#{namespace}", namespace_class.new)
|
137
|
-
|
138
|
-
namespace_class.class_eval(&include_method_bindings)
|
139
141
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
142
|
+
## Check to see if the namespace was defined. If so, additional methods will be appended to the
|
143
|
+
## existing namespace class definition, otherwise, a new namespace class and instance will be
|
144
|
+
## defined with the methods added.
|
145
|
+
if Kanrisuru::Remote::Host.instance_variable_defined?("@#{namespace}")
|
146
|
+
namespace_class = Kanrisuru::Remote::Host.const_get(Kanrisuru::Util.camelize(namespace))
|
147
|
+
namespace_instance = instance_variable_get("@#{namespace}")
|
148
|
+
else
|
149
|
+
namespace_class = Kanrisuru::Remote::Host.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
|
150
|
+
namespace_instance = Kanrisuru::Remote::Host.instance_variable_set("@#{namespace}", namespace_class.new)
|
151
|
+
class_eval do
|
152
|
+
define_method namespace do
|
153
|
+
namespace_instance.instance_variable_set(:@host, self)
|
154
|
+
namespace_instance
|
155
|
+
end
|
144
156
|
end
|
145
157
|
end
|
158
|
+
|
159
|
+
namespace_class.class_eval(&include_method_bindings)
|
146
160
|
else
|
147
161
|
class_eval(&include_method_bindings)
|
148
162
|
end
|
data/lib/kanrisuru/remote/env.rb
CHANGED
data/lib/kanrisuru/result.rb
CHANGED
data/lib/kanrisuru/version.rb
CHANGED
@@ -16,7 +16,7 @@ module Kanrisuru
|
|
16
16
|
module TestNamespace
|
17
17
|
extend Kanrisuru::OsPackage::Define
|
18
18
|
|
19
|
-
os_define :
|
19
|
+
os_define :linux, :tester
|
20
20
|
os_define :centos, :test_not_correct
|
21
21
|
|
22
22
|
def tester
|
@@ -25,17 +25,34 @@ module Kanrisuru
|
|
25
25
|
|
26
26
|
def test_not_correct; end
|
27
27
|
end
|
28
|
+
|
29
|
+
module TestNamespaceAdditions
|
30
|
+
extend Kanrisuru::OsPackage::Define
|
31
|
+
|
32
|
+
os_define :linux, :add
|
33
|
+
os_define :linux, :minus
|
34
|
+
|
35
|
+
def add(a, b)
|
36
|
+
a + b
|
37
|
+
end
|
38
|
+
|
39
|
+
def minus(a, b)
|
40
|
+
a - b
|
41
|
+
end
|
42
|
+
end
|
28
43
|
end
|
29
44
|
|
30
45
|
module Kanrisuru
|
31
46
|
module Remote
|
32
47
|
class Host
|
33
48
|
os_include Kanrisuru::TestInclude
|
49
|
+
os_include Kanrisuru::TestNamespaceAdditions, namespace: :asdf
|
34
50
|
os_include Kanrisuru::TestNamespace, namespace: :asdf
|
35
51
|
end
|
36
52
|
|
37
53
|
class Cluster
|
38
54
|
os_collection Kanrisuru::TestInclude
|
55
|
+
os_collection Kanrisuru::TestNamespaceAdditions, namespace: :asdf
|
39
56
|
os_collection Kanrisuru::TestNamespace, namespace: :asdf
|
40
57
|
end
|
41
58
|
end
|
@@ -64,8 +81,15 @@ RSpec.describe Kanrisuru::OsPackage do
|
|
64
81
|
|
65
82
|
expect(host).to respond_to(:asdf)
|
66
83
|
expect(host.asdf).to respond_to(:tester)
|
84
|
+
expect(host.asdf).to respond_to(:add)
|
85
|
+
expect(host.asdf).to respond_to(:minus)
|
86
|
+
|
67
87
|
expect(host.asdf.tester).to eq 'hello namespace'
|
88
|
+
expect(host.asdf.add(1, 2)).to eq(3)
|
89
|
+
expect(host.asdf.minus(3, 2)).to eq(1)
|
90
|
+
|
68
91
|
expect(host.tester).to eq('hello ubuntu')
|
92
|
+
|
69
93
|
expect { host.asdf.test_not_correct }.to raise_error(NoMethodError)
|
70
94
|
expect(cluster.asdf.tester).to be_instance_of(Array)
|
71
95
|
|
data/spec/unit/core/apt_spec.rb
CHANGED
@@ -11,7 +11,7 @@ RSpec.describe Kanrisuru::Core::Apt do
|
|
11
11
|
expect(Kanrisuru::Core::Apt::PackageOverview.new).to respond_to(
|
12
12
|
:package, :version, :suites, :architecture, :installed, :upgradeable, :automatic
|
13
13
|
)
|
14
|
-
|
14
|
+
|
15
15
|
expect(Kanrisuru::Core::Apt::PackageDetail.new).to respond_to(
|
16
16
|
:package,
|
17
17
|
:version,
|
data/spec/unit/core/ip_spec.rb
CHANGED
@@ -10,9 +10,9 @@ RSpec.describe Kanrisuru::Core::IP do
|
|
10
10
|
|
11
11
|
expect(Kanrisuru::Core::IP::IP_ROUTE_TYPES).to(
|
12
12
|
eq(%w[
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
unicast unreachable blackhole prohibit local
|
14
|
+
broadcast throw nat via anycast multicast
|
15
|
+
])
|
16
16
|
)
|
17
17
|
|
18
18
|
expect(Kanrisuru::Core::IP::IPLinkProperty.new).to respond_to(
|
@@ -13,20 +13,20 @@ RSpec.describe Kanrisuru::Core::Socket do
|
|
13
13
|
:rmem_alloc, :rcv_buf, :wmem_alloc, :snd_buf,
|
14
14
|
:fwd_alloc, :wmem_queued, :ropt_mem, :back_log, :sock_drop
|
15
15
|
)
|
16
|
-
expect(Kanrisuru::Core::Socket::TCP_STATES).to eq(
|
16
|
+
expect(Kanrisuru::Core::Socket::TCP_STATES).to eq(
|
17
17
|
%w[
|
18
18
|
established syn-sent syn-recv
|
19
19
|
fin-wait-1 fin-wait-2 time-wait
|
20
20
|
closed close-wait last-ack listening closing
|
21
21
|
]
|
22
22
|
)
|
23
|
-
expect(Kanrisuru::Core::Socket::OTHER_STATES).to eq(
|
23
|
+
expect(Kanrisuru::Core::Socket::OTHER_STATES).to eq(
|
24
24
|
%w[
|
25
25
|
all connected synchronized bucket syn-recv
|
26
26
|
big
|
27
27
|
]
|
28
28
|
)
|
29
|
-
expect(Kanrisuru::Core::Socket::TCP_STATE_ABBR).to eq(
|
29
|
+
expect(Kanrisuru::Core::Socket::TCP_STATE_ABBR).to eq(
|
30
30
|
{
|
31
31
|
'ESTAB' => 'established', 'LISTEN' => 'listening', 'UNCONN' => 'unconnected',
|
32
32
|
'SYN-SENT' => 'syn-sent', 'SYN-RECV' => 'syn-recv', 'FIN-WAIT-1' => 'fin-wait-1',
|
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.7.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-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -114,6 +114,9 @@ executables: []
|
|
114
114
|
extensions: []
|
115
115
|
extra_rdoc_files: []
|
116
116
|
files:
|
117
|
+
- ".github/CONTRIBUTING.md"
|
118
|
+
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
119
|
+
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
117
120
|
- ".gitignore"
|
118
121
|
- ".rspec"
|
119
122
|
- ".rubocop.yml"
|