kanrisuru 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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"