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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a02ab5fbc9ef38c054d2c336b630e9a48c209a393044056a2262dec3a00d373
4
- data.tar.gz: 80d925b3b5b3c884a9bea23b81423607130f021da7fc55ad2bc5f8bfbb8ab245
3
+ metadata.gz: bb8de477e2168c782b7cb082a6a6760fd56aa6925f1820ee80e45baff76a7b27
4
+ data.tar.gz: ad21e0b9787a2e42d8626a367f11b44ff97ec27f000a6ec8f7967d7b22da066d
5
5
  SHA512:
6
- metadata.gz: be886466d7bd57cf325d84dc5d254a7c7c638f3cbafe328b875426c95ceb81c6d2b38564a390d8a7f9f42831a514f9bdc5ec0c0d0201166776aed389bcab590f
7
- data.tar.gz: f72ecffd89742fd13df20362044f1618ef45618ba3eaf58c4d688a7b0fe31682b052effd28f60d5bc6e2dbd90dbe33394827d304e456b3ccba2608a9c8d5d17e
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
@@ -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
@@ -1,5 +1,13 @@
1
+ ## Kanrisuru 0.7.0 (August 8, 2021) ##
2
+ * Simplify `FileInfo` struct for return object of `ls` command.
3
+ * Rename `size` to `fsize` for the `OpenFile` struct to avoid method naming conflicts of the struct class.
4
+ * Allow `os_include` and `os_collection` to define multiple groupings of methods with the same namespace.
5
+ * Add `clear` method for remote env class, to remove any session based env variables.
6
+ * Add `to_s` method to result for quick analysis of string based return values.
7
+ * Remove duplicate `numeric` method in the utils module.
8
+
1
9
  ## Kanrisuru 0.6.0 (August 1, 2021) ##
2
- * Add lsof implementation in system core module
10
+ * Add `lsof` implementation in system core module
3
11
  * Fix changelog formatting
4
12
  * Add changelog url to gemspec
5
13
 
@@ -42,7 +50,6 @@
42
50
  * Fix `address_size` in `cpu` method call.
43
51
 
44
52
  ## Kanrisuru 0.3.0 (July 22, 2021) ##
45
-
46
53
  * Add `lscpu` system core module
47
54
  * Replace `cpu` module internal fetching of data from `cpu_info` to `lscpu` struct.
48
55
 
data/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
  [![Latest version](https://img.shields.io/github/license/avamia/kanrisuru)](https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt) 
3
3
  ![GitHub repo size](https://img.shields.io/github/repo-size/avamia/kanrisuru) 
4
4
 
5
+ <p align='center'>
6
+ <img src="https://s3.us-east-2.amazonaws.com/kanrisuru.com/kanrisuru-banner-02.png" width="600" />
7
+ </p>
8
+
5
9
  # Kanrisuru
6
10
 
7
11
  Kanrisuru (manage) helps you remotely control infrastructure using Ruby. This is done over SSH. I'm working on building up some basic functionality to help quickly provision, deploy and manage a single host or cluster of hosts.
data/kanrisuru.gemspec CHANGED
@@ -28,6 +28,6 @@ Gem::Specification.new do |gem|
28
28
 
29
29
  gem.metadata = {
30
30
  'source_code_uri' => 'https://github.com/avamia/kanrisuru/',
31
- 'changelog_uri' => 'https://github.com/avamia/kanrisuru/blob/main/CHANGELOG.md'
31
+ 'changelog_uri' => 'https://github.com/avamia/kanrisuru/blob/main/CHANGELOG.md'
32
32
  }
33
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,
@@ -111,7 +111,7 @@ module Kanrisuru
111
111
  :file_descriptor,
112
112
  :type,
113
113
  :device,
114
- :size,
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(opts = {})
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.size = parse_lsof(line, 's').to_i
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
@@ -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
@@ -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.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
@@ -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
 
@@ -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',
@@ -82,7 +82,7 @@ RSpec.describe Kanrisuru::Core::System do
82
82
  :file_descriptor,
83
83
  :type,
84
84
  :device,
85
- :size,
85
+ :fsize,
86
86
  :inode,
87
87
  :name
88
88
  )
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.6.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-02 00:00:00.000000000 Z
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"