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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc51b70af722636189fb05ba719d22c08c1d75c1905d52c6e2991df39791aea3
4
- data.tar.gz: fd2aa46cc297aff5fd90e353341a6075f795569c853f0e318424b6e71cd70b4e
3
+ metadata.gz: 93755393c0e2f4b2353bdd4bda27df54e4aceccf3ae7cd6d77f0e4cbc8c908c7
4
+ data.tar.gz: f28c287f77b9edcb505e319030d67fc51287b99dc23cc0903fcfcb7dcec8c52c
5
5
  SHA512:
6
- metadata.gz: 45697cadc87c9a88a289994570631c68e211e85b655321cb2794f8be463b8eff44095c1e5590bee2676df88dfaa70ba7a419015e63c90407437cc0acce78f009
7
- data.tar.gz: 3721081463490e767b26950cf6cb2855887ecdf8c00f1dd33c7de5c24bc6583d5fa34df77dfe2028f103adbe162075153e44f51b02865d3361c0ef44dae7f222
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
@@ -20,6 +20,10 @@ Naming/InclusiveLanguage:
20
20
  - lib/kanrisuru/core/dmi.rb
21
21
  - spec/unit/core/dmi_spec.rb
22
22
 
23
+ Naming/MethodParameterName:
24
+ Exclude:
25
+ - spec/functional/os_package_spec.rb
26
+
23
27
  Metrics/AbcSize:
24
28
  Enabled: false
25
29
 
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
@@ -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
- FileInfoId.new(
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 '-'
@@ -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
- class_eval do
53
- define_method namespace do
54
- namespace_instance.instance_variable_set(:@cluster, self)
55
- namespace_instance
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
- class_eval do
141
- define_method namespace do
142
- namespace_instance.instance_variable_set(:@host, self)
143
- namespace_instance
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
@@ -11,6 +11,10 @@ module Kanrisuru
11
11
  @env
12
12
  end
13
13
 
14
+ def clear
15
+ @env = {}
16
+ end
17
+
14
18
  def to_s
15
19
  string = ''
16
20
  @env.each.with_index do |(key, value), index|
@@ -31,6 +31,10 @@ module Kanrisuru
31
31
  @data[prop]
32
32
  end
33
33
 
34
+ def to_s
35
+ @data.to_s
36
+ end
37
+
34
38
  def to_a
35
39
  @data.instance_of?(Array) ? @data : [@data]
36
40
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanrisuru
4
- VERSION = '0.5.1'
4
+ VERSION = '0.7.1'
5
5
  end
@@ -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.success?).to eq(true)
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 :unix_like, :tester
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
@@ -4,7 +4,6 @@ require 'simplecov'
4
4
  SimpleCov.start
5
5
 
6
6
  require 'kanrisuru'
7
-
8
7
  require_relative 'helper/test_hosts'
9
8
 
10
9
  Kanrisuru.logger.level = Logger::WARN
@@ -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,
@@ -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
- unicast unreachable blackhole prohibit local
14
- broadcast throw nat via anycast multicast
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.5.1
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-07-29 00:00:00.000000000 Z
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: