kanrisuru 0.6.0 → 0.7.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/.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
|
[](https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt)
|
3
3
|

|
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"
|