kanrisuru 0.5.1 → 0.7.1
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 +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
|
[![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.
|
@@ -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:
|