kanrisuru 0.5.1 → 0.7.1
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 +103 -0
- data/README.md +9 -0
- data/kanrisuru.gemspec +2 -1
- data/lib/kanrisuru/core/path.rb +3 -3
- data/lib/kanrisuru/core/system.rb +77 -0
- data/lib/kanrisuru/os_package.rb +31 -17
- 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/core/system_spec.rb +9 -3
- data/spec/functional/os_package_spec.rb +25 -1
- data/spec/spec_helper.rb +0 -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 +11 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93755393c0e2f4b2353bdd4bda27df54e4aceccf3ae7cd6d77f0e4cbc8c908c7
|
4
|
+
data.tar.gz: f28c287f77b9edcb505e319030d67fc51287b99dc23cc0903fcfcb7dcec8c52c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 493e8a9019139f5326e50b2ade2ef1f5c631bec796fc08655455e356b0718ce41f5e34d1b348cc88f8f6c1f6857a56ed36dff30c56f285866c525ed07500b342
|
7
|
+
data.tar.gz: 4b4a6141a7bbc4731c6693639071470291881876589ee8033195d3f9e32a13fd6bad444ccfd2cf8bf1f5d302c93b3a09d6cf2e32ecda42fef954c2d2a93595d6
|
@@ -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
@@ -0,0 +1,103 @@
|
|
1
|
+
## Kanrisuru 0.7.1 (August 8, 2021) ##
|
2
|
+
* Fix bug with `os_include` when caching namespace unbound methods, use the namespace in the
|
3
|
+
cache key to avoid any namespace collisions with the same method name, namely:
|
4
|
+
```ruby
|
5
|
+
"#{namespace}.#{method_name}"
|
6
|
+
```
|
7
|
+
|
8
|
+
## Kanrisuru 0.7.0 (August 8, 2021) ##
|
9
|
+
* Simplify `FileInfo` struct for return object of `ls` command.
|
10
|
+
* Rename `size` to `fsize` for the `OpenFile` struct to avoid method naming conflicts of the struct class.
|
11
|
+
* Allow `os_include` and `os_collection` to define multiple groupings of methods with the same namespace.
|
12
|
+
* Add `clear` method for remote env class, to remove any session based env variables.
|
13
|
+
* Add `to_s` method to result for quick analysis of string based return values.
|
14
|
+
* Remove duplicate `numeric` method in the utils module.
|
15
|
+
|
16
|
+
## Kanrisuru 0.6.0 (August 1, 2021) ##
|
17
|
+
* Add `lsof` implementation in system core module
|
18
|
+
* Fix changelog formatting
|
19
|
+
* Add changelog url to gemspec
|
20
|
+
|
21
|
+
## Kanrisuru 0.5.2 (July 30, 2021) ##
|
22
|
+
* Add changelog documentation
|
23
|
+
* Update documentation table with new tested core module
|
24
|
+
* Deprecating `cpu_info` with replacement of `lscpu`. `cpu_info` will be removed in the next major release.
|
25
|
+
|
26
|
+
## Kanrisuru 0.5.1 (July 29, 2021) ##
|
27
|
+
|
28
|
+
* Unit test cases for core module structs, constants and types.
|
29
|
+
|
30
|
+
## Kanrisuru 0.5.0 (July 29, 2021) ##
|
31
|
+
* Add `zypper` package manager core module
|
32
|
+
* Add `dmi` core module. Support for getting hardware information from virtual and physical machines.
|
33
|
+
* Add only options for test_hosts to filter on which hosts to use for function style test cases. This is used within a test case and takes priority over command line `HOSTS=` and `EXCLUDE=` env variables.
|
34
|
+
* Add additional bit conversion string handling in the util module, such as kib, mib, and gib.
|
35
|
+
* Remove redudant namespacing in struct names, such as
|
36
|
+
`Kanrisuru::Core::Yum::YumPackageOverview`, to `Kanrisuru::Core::Yum::PackageOverview`.
|
37
|
+
* Fix backups test case for `cp` command with the correct filename.
|
38
|
+
* Use 0755 as expected numeric mode for all OS functional tests in the `mkdir` test case.
|
39
|
+
* Fix bug with `lscpu` regex match on cpus with more than 9 cores, ie `/cpu\d/` to `/cpu\d+/`
|
40
|
+
|
41
|
+
|
42
|
+
## Kanrisuru 0.4.1 (July 26, 2021) ##
|
43
|
+
* Add `kernel_statistics` to system core module.
|
44
|
+
|
45
|
+
## Kanrisuru 0.4.0 (July 25, 2021) ##
|
46
|
+
* Update internal exit code of command from 0, to array of accpeted exit codes, with 0 being the default value.
|
47
|
+
* Add `append_exit_code` to command, allowing additional exit codes to be considered true for `success?` return value.
|
48
|
+
* Add `@port` to `Net::SSH.start` method
|
49
|
+
* Fix test case with `host.os` return value of `opensuse_leap`.
|
50
|
+
* Add `cpu_flags` method to `cpu` module
|
51
|
+
|
52
|
+
## Kanrisuru 0.3.2 (July 23, 2021) ##
|
53
|
+
* Fix typo from `key` to `signal` in hash fetch method.
|
54
|
+
|
55
|
+
## Kanrisuru 0.3.1 (July 22, 2021) ##
|
56
|
+
* Add additional methods to `cpu` pulling from `lscpu` struct.
|
57
|
+
* Fix `address_size` in `cpu` method call.
|
58
|
+
|
59
|
+
## Kanrisuru 0.3.0 (July 22, 2021) ##
|
60
|
+
* Add `lscpu` system core module
|
61
|
+
* Replace `cpu` module internal fetching of data from `cpu_info` to `lscpu` struct.
|
62
|
+
|
63
|
+
## Kanrisuru 0.2.9 (July 20, 2021) ##
|
64
|
+
|
65
|
+
* Fix fstab entry from `entry` to `entry[:entry]` in the `for_each`iteration.
|
66
|
+
|
67
|
+
## Kanrisuru 0.2.8 (July 20, 2021) ##
|
68
|
+
|
69
|
+
* Update gem development and runtime depedencies with stricter depencies.
|
70
|
+
|
71
|
+
## Kanrisuru 0.2.7 (July 18, 2021) ##
|
72
|
+
|
73
|
+
* Set opensuse upstream to sles (Suse Enterprise Linux) in `os_family`
|
74
|
+
|
75
|
+
## Kanrisuru 0.2.6 (July 17, 2021) ##
|
76
|
+
* Force "-" to "\_" from `os-release` release name in `host.os` module.
|
77
|
+
|
78
|
+
## Kanrisuru 0.2.5 (July 16, 2021) ##
|
79
|
+
* Update gem depedencies to non-zero values
|
80
|
+
* Change summary and description fields for `apt`
|
81
|
+
* Move `normalize_size` from `apt` core module, to
|
82
|
+
`Kanrisuru::Util::Bits` class.
|
83
|
+
* Add additional test cases for `apt` core module.
|
84
|
+
* Add `-hi` to `who` command to explicility print out ip address for user.
|
85
|
+
* Update `inode?` command to execute without shell user.
|
86
|
+
* Add `yum` package manager core module
|
87
|
+
|
88
|
+
## Kanrisuru 0.2.4 (July 10, 2021) ##
|
89
|
+
* Fix error in `ip_rule` and `ip_address` sub modules with command typo.
|
90
|
+
|
91
|
+
## Kanrisuru 0.2.3 (July 07, 2021) ##
|
92
|
+
* Add `apt` package manager core module
|
93
|
+
|
94
|
+
## Kanrisuru 0.2.2 (June 16, 2021) ##
|
95
|
+
* Fix `read_file_chunk` on checking bounds for start and end line values.
|
96
|
+
|
97
|
+
## Kanrisuru 0.2.1 (June 16, 2021) ##
|
98
|
+
* Add first working release on rubygems.org
|
99
|
+
|
100
|
+
## Kanrisuru 0.2.0 (June 16, 2021) [YANKED] ##
|
101
|
+
|
102
|
+
## Kanrisuru 0.1.0 (December 12, 2020) ##
|
103
|
+
* Initialize repository, start working on project.
|
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.
|
@@ -79,6 +83,10 @@ cluster.execute('uname') #=> {host: 'host1', result: 'Linux'}, {host: 'host2', r
|
|
79
83
|
|---------------------------------------|------------------|--------------------|--------|--------------------------------------|--------|--------|--------|--------|------|----------|------|
|
80
84
|
| **System** | | | | | | | | | | | |
|
81
85
|
| Get CPU Info | cpu_info | lscpu | core | https://linux.die.net/man/1/lscpu | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
86
|
+
| Get CPU architecture | lscpu | lscpu | core | https://linux.die.net/man/1/lscpu | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
87
|
+
| Get kernel stastics | kernel_statistics | cat /proc/stat | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
88
|
+
| Get hardware BIOS info | dmi | dmidecode | core | https://linux.die.net/man/8/dmidecode | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
89
|
+
| Get open file details for processes | lsof | lsof | core | https://linux.die.net/man/8/lsof | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
82
90
|
| Get Load Average | load_average | cat /proc/load_avg | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
83
91
|
| Get RAM Available | free | cat /proc/meminfo | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
84
92
|
| Get list of processes | ps | ps | core | https://linux.die.net/man/1/ps | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
@@ -149,6 +157,7 @@ cluster.execute('uname') #=> {host: 'host1', result: 'Linux'}, {host: 'host2', r
|
|
149
157
|
| **Packages** | | | | | | | | | | | |
|
150
158
|
| Apt | apt | apt | core | https://linux.die.net/man/1/apt | [x] | [x] | | | | | |
|
151
159
|
| Yum | yum | yum | core | https://linux.die.net/man/1/yum | | | [x] | [x] | [x] | | |
|
160
|
+
| Zypper | zypper | zypper | core | https://en.opensuse.org/SDB:Zypper_manual | | | | | | [x] | [x] |
|
152
161
|
|
153
162
|
## Development
|
154
163
|
|
data/kanrisuru.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
|
|
27
27
|
gem.require_paths = ['lib']
|
28
28
|
|
29
29
|
gem.metadata = {
|
30
|
-
'source_code_uri' => 'https://github.com/avamia/kanrisuru/'
|
30
|
+
'source_code_uri' => 'https://github.com/avamia/kanrisuru/',
|
31
|
+
'changelog_uri' => 'https://github.com/avamia/kanrisuru/blob/main/CHANGELOG.md'
|
31
32
|
}
|
32
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,
|
@@ -16,6 +16,9 @@ module Kanrisuru
|
|
16
16
|
os_define :linux, :kill
|
17
17
|
|
18
18
|
os_define :linux, :kernel_statistics
|
19
|
+
os_define :linux, :kstat
|
20
|
+
|
21
|
+
os_define :linux, :lsof
|
19
22
|
|
20
23
|
os_define :linux, :uptime
|
21
24
|
|
@@ -101,6 +104,18 @@ module Kanrisuru
|
|
101
104
|
|
102
105
|
UserLoggedIn = Struct.new(:user, :tty, :ip, :login, :idle, :jcpu, :pcpu, :command)
|
103
106
|
|
107
|
+
OpenFile = Struct.new(
|
108
|
+
:command,
|
109
|
+
:pid,
|
110
|
+
:uid,
|
111
|
+
:file_descriptor,
|
112
|
+
:type,
|
113
|
+
:device,
|
114
|
+
:fsize,
|
115
|
+
:inode,
|
116
|
+
:name
|
117
|
+
)
|
118
|
+
|
104
119
|
def load_env
|
105
120
|
command = Kanrisuru::Command.new('env')
|
106
121
|
execute_shell(command)
|
@@ -205,6 +220,10 @@ module Kanrisuru
|
|
205
220
|
end
|
206
221
|
|
207
222
|
def cpu_info(spec)
|
223
|
+
Kanrisuru.logger.info do
|
224
|
+
'DEPRECATION WARNING: cpu_info will be removed in the upcoming major release. Use lscpu instead.'
|
225
|
+
end
|
226
|
+
|
208
227
|
name =
|
209
228
|
case spec
|
210
229
|
when 'sockets'
|
@@ -301,6 +320,60 @@ module Kanrisuru
|
|
301
320
|
Kanrisuru::Result.new(command)
|
302
321
|
end
|
303
322
|
|
323
|
+
def lsof(_opts = {})
|
324
|
+
command = Kanrisuru::Command.new('lsof -F pcuftDsin')
|
325
|
+
|
326
|
+
execute_shell(command)
|
327
|
+
Kanrisuru::Result.new(command) do |cmd|
|
328
|
+
lines = cmd.to_a
|
329
|
+
|
330
|
+
current_row = nil
|
331
|
+
current_pid = nil
|
332
|
+
current_user = nil
|
333
|
+
current_command = nil
|
334
|
+
|
335
|
+
rows = []
|
336
|
+
|
337
|
+
lines.each do |line|
|
338
|
+
case line
|
339
|
+
when /^p/
|
340
|
+
current_pid = parse_lsof(line, 'p').to_i
|
341
|
+
when /^c/
|
342
|
+
current_command = parse_lsof(line, 'c')
|
343
|
+
when /^u/
|
344
|
+
current_user = parse_lsof(line, 'u').to_i
|
345
|
+
when /^f/
|
346
|
+
rows << current_row if current_row
|
347
|
+
|
348
|
+
current_row = OpenFile.new
|
349
|
+
current_row.pid = current_pid
|
350
|
+
current_row.command = current_command
|
351
|
+
current_row.uid = current_user
|
352
|
+
|
353
|
+
current_row.file_descriptor = parse_lsof(line, 'f')
|
354
|
+
when /^t/
|
355
|
+
current_row.type = parse_lsof(line, 't')
|
356
|
+
when /^D/
|
357
|
+
current_row.device = parse_lsof(line, 'D')
|
358
|
+
when /^s/
|
359
|
+
current_row.fsize = parse_lsof(line, 's').to_i
|
360
|
+
when /^i/
|
361
|
+
current_row.inode = parse_lsof(line, 'i').to_i
|
362
|
+
when /^n/
|
363
|
+
current_row.name = parse_lsof(line, 'n')
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
rows << current_row if current_row
|
368
|
+
|
369
|
+
rows
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def kstat
|
374
|
+
kernel_statistics
|
375
|
+
end
|
376
|
+
|
304
377
|
def kernel_statistics
|
305
378
|
command = Kanrisuru::Command.new('cat /proc/stat')
|
306
379
|
|
@@ -490,6 +563,10 @@ module Kanrisuru
|
|
490
563
|
|
491
564
|
private
|
492
565
|
|
566
|
+
def parse_lsof(line, char)
|
567
|
+
line.split(char, 2)[1]
|
568
|
+
end
|
569
|
+
|
493
570
|
def parse_policy_abbr(value)
|
494
571
|
case value
|
495
572
|
when '-'
|
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
|
@@ -154,8 +168,8 @@ module Kanrisuru
|
|
154
168
|
define_method method_name do |*args, &block|
|
155
169
|
unbound_method = nil
|
156
170
|
|
157
|
-
if os_method_cache.key?(method_name)
|
158
|
-
unbound_method = os_method_cache[method_name]
|
171
|
+
if os_method_cache.key?("#{namespace}.#{method_name}")
|
172
|
+
unbound_method = os_method_cache["#{namespace}.#{method_name}"]
|
159
173
|
else
|
160
174
|
host = namespace_instance.instance_variable_get(:@host)
|
161
175
|
|
@@ -171,7 +185,7 @@ module Kanrisuru
|
|
171
185
|
|
172
186
|
## Cache the unbound method on this host instance for faster resolution on
|
173
187
|
## the next invocation of this method
|
174
|
-
os_method_cache[method_name] = unbound_method
|
188
|
+
os_method_cache["#{namespace}.#{method_name}"] = unbound_method
|
175
189
|
end
|
176
190
|
|
177
191
|
## Bind the method to host instance and
|
data/lib/kanrisuru/remote/env.rb
CHANGED
data/lib/kanrisuru/result.rb
CHANGED
data/lib/kanrisuru/version.rb
CHANGED
@@ -26,14 +26,20 @@ RSpec.describe Kanrisuru::Core::System do
|
|
26
26
|
|
27
27
|
it 'gets environment variables' do
|
28
28
|
result = host.load_env
|
29
|
-
|
30
|
-
expect(result.success?).to be(true)
|
29
|
+
expect(result).to be_success
|
31
30
|
expect(result.data).to be_instance_of(Hash)
|
32
31
|
end
|
33
32
|
|
33
|
+
it 'gets open files' do
|
34
|
+
host.su('root')
|
35
|
+
result = host.lsof
|
36
|
+
expect(result).to be_success
|
37
|
+
expect(result.data).to be_instance_of(Array)
|
38
|
+
end
|
39
|
+
|
34
40
|
it 'gets uptime' do
|
35
41
|
result = host.uptime
|
36
|
-
expect(result
|
42
|
+
expect(result).to be_success
|
37
43
|
|
38
44
|
expect(result).to respond_to(
|
39
45
|
:boot_time, :uptime, :seconds,
|
@@ -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/spec_helper.rb
CHANGED
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',
|
@@ -75,5 +75,16 @@ RSpec.describe Kanrisuru::Core::System do
|
|
75
75
|
expect(Kanrisuru::Core::System::UserLoggedIn.new).to respond_to(
|
76
76
|
:user, :tty, :ip, :login, :idle, :jcpu, :pcpu, :command
|
77
77
|
)
|
78
|
+
expect(Kanrisuru::Core::System::OpenFile.new).to respond_to(
|
79
|
+
:command,
|
80
|
+
:pid,
|
81
|
+
:uid,
|
82
|
+
:file_descriptor,
|
83
|
+
:type,
|
84
|
+
:device,
|
85
|
+
:fsize,
|
86
|
+
:inode,
|
87
|
+
:name
|
88
|
+
)
|
78
89
|
end
|
79
90
|
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.7.1
|
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-
|
11
|
+
date: 2021-08-09 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"
|
@@ -226,6 +229,7 @@ licenses:
|
|
226
229
|
- MIT
|
227
230
|
metadata:
|
228
231
|
source_code_uri: https://github.com/avamia/kanrisuru/
|
232
|
+
changelog_uri: https://github.com/avamia/kanrisuru/blob/main/CHANGELOG.md
|
229
233
|
post_install_message:
|
230
234
|
rdoc_options: []
|
231
235
|
require_paths:
|