kanrisuru 0.6.0 → 0.7.3

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: 8235592e090d7f6466a0e78d0d7b4eff7d31a2c47649aadd7cf822df11847642
4
+ data.tar.gz: 20c8730f24d486687c1161f0da1dc330bf93ec7f273db14c258cd0a83ce766e8
5
5
  SHA512:
6
- metadata.gz: be886466d7bd57cf325d84dc5d254a7c7c638f3cbafe328b875426c95ceb81c6d2b38564a390d8a7f9f42831a514f9bdc5ec0c0d0201166776aed389bcab590f
7
- data.tar.gz: f72ecffd89742fd13df20362044f1618ef45618ba3eaf58c4d688a7b0fe31682b052effd28f60d5bc6e2dbd90dbe33394827d304e456b3ccba2608a9c8d5d17e
6
+ metadata.gz: f8d141bf32e49bd47acb9adc6d4307264be9b6ee30f83a581f2c033bb662205610d6cdbd495f56d195a91df8bcd5501a4f72bdf681db20bcaf5f5d23527e244a
7
+ data.tar.gz: 0a9b31637b3a15cd4928abbcb7e2edcfd925ec9c9f61b008a44e7ef80c39b083b1f16b103281c8b6ed81ea758144dc2ea3eb5b50223a8dbce121fcc868abf453
@@ -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,33 @@
1
+ ## Kanrisuru 0.7.3 (August 9, 2021) ##
2
+ * Fixed bug with zypper remove package, where the package names weren't being added to the linux command.
3
+ * Test case added to ensure package is removed.
4
+
5
+ ## Kanrisuru 0.7.2 (August 9, 2021) ##
6
+ * Fixed bug with the `os_method_cache` instance variable set in the namespaced instance of a host. This was causing collision issues inbetween host instances, where, hosts with the same aliased method name was getting overwritten (with a different OS), since the namespace instance variable existing on the host class definition wasn't getting reset inbetween host instantiations. Given that the `os_method_cache` is normally re-instantiated, this bug fix addresses this so that the `os_method_cache` is always defined on the host instance, ie:
7
+
8
+ ```ruby
9
+ host.instance_variable_get(:@os_method_cache)
10
+ host.instance_variable_set(:@os_method_cache, os_method_cache)
11
+ ```
12
+ This is done instead of being saved on the namespace module. With the previous bug fix of using namespaced keys, there's no way for a method to be overwritten otherwise with a global `os_method_cache`.
13
+
14
+ ## Kanrisuru 0.7.1 (August 8, 2021) ##
15
+ * Fix bug with `os_include` when caching namespace unbound methods, use the namespace in the
16
+ cache key to avoid any namespace collisions with the same method name, namely:
17
+ ```ruby
18
+ "#{namespace}.#{method_name}"
19
+ ```
20
+
21
+ ## Kanrisuru 0.7.0 (August 8, 2021) ##
22
+ * Simplify `FileInfo` struct for return object of `ls` command.
23
+ * Rename `size` to `fsize` for the `OpenFile` struct to avoid method naming conflicts of the struct class.
24
+ * Allow `os_include` and `os_collection` to define multiple groupings of methods with the same namespace.
25
+ * Add `clear` method for remote env class, to remove any session based env variables.
26
+ * Add `to_s` method to result for quick analysis of string based return values.
27
+ * Remove duplicate `numeric` method in the utils module.
28
+
1
29
  ## Kanrisuru 0.6.0 (August 1, 2021) ##
2
- * Add lsof implementation in system core module
30
+ * Add `lsof` implementation in system core module
3
31
  * Fix changelog formatting
4
32
  * Add changelog url to gemspec
5
33
 
@@ -42,7 +70,6 @@
42
70
  * Fix `address_size` in `cpu` method call.
43
71
 
44
72
  ## Kanrisuru 0.3.0 (July 22, 2021) ##
45
-
46
73
  * Add `lscpu` system core module
47
74
  * Replace `cpu` module internal fetching of data from `cpu_info` to `lscpu` struct.
48
75
 
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
@@ -713,6 +713,9 @@ module Kanrisuru
713
713
  zypper_repos_opt(command, opts)
714
714
  zypper_package_type_opt(command, opts)
715
715
  zypper_solver_opts(command, opts)
716
+
717
+ packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
718
+ command << packages
716
719
 
717
720
  execute_shell(command)
718
721
  Kanrisuru::Result.new(command)
@@ -8,7 +8,6 @@ module Kanrisuru
8
8
  def self.extended(base)
9
9
  base.instance_variable_set(:@os_method_properties, {})
10
10
  base.instance_variable_set(:@os_methods, Set.new)
11
- base.instance_variable_set(:@os_method_cache, {})
12
11
  end
13
12
 
14
13
  def os_define(os_name, method_name, options = {})
@@ -46,13 +45,19 @@ module Kanrisuru
46
45
  ## Define the namespace as an eigen class instance on the host.
47
46
  ## Namespaced instances will access core host methods
48
47
  ## 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
48
 
52
- class_eval do
53
- define_method namespace do
54
- namespace_instance.instance_variable_set(:@cluster, self)
55
- namespace_instance
49
+ if Kanrisuru::Remote::Cluster.instance_variable_defined?("@#{namespace}")
50
+ namespace_class = Kanrisuru::Remote::Cluster.const_get(Kanrisuru::Util.camelize(namespace))
51
+ namespace_instance = instance_variable_get("@#{namespace}")
52
+ else
53
+ namespace_class = Kanrisuru::Remote::Cluster.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
54
+ namespace_instance = Kanrisuru::Remote::Cluster.instance_variable_set("@#{namespace}", namespace_class.new)
55
+
56
+ class_eval do
57
+ define_method namespace do
58
+ namespace_instance.instance_variable_set(:@cluster, self)
59
+ namespace_instance
60
+ end
56
61
  end
57
62
  end
58
63
 
@@ -96,12 +101,6 @@ module Kanrisuru
96
101
  include_methods = (public_methods + protected_methods + private_methods).flatten
97
102
 
98
103
  include_method_bindings = proc do
99
- define_method 'os_method_cache' do
100
- @os_method_cache ||= {}
101
- end
102
-
103
- private :os_method_cache
104
-
105
104
  include_methods.each do |method_name|
106
105
  define_method method_name do |*args, &block|
107
106
  unbound_method = mod.instance_method(method_name)
@@ -132,17 +131,26 @@ module Kanrisuru
132
131
  ## Define the namespace as an eigen class instance within the host class.
133
132
  ## Namespaced instances will access core host methods
134
133
  ## 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
134
 
138
- namespace_class.class_eval(&include_method_bindings)
135
+ ## Check to see if the namespace was defined. If so, additional methods will be appended to the
136
+ ## existing namespace class definition, otherwise, a new namespace class and instance will be
137
+ ## defined with the methods added.
138
+ if Kanrisuru::Remote::Host.instance_variable_defined?("@#{namespace}")
139
+ namespace_class = Kanrisuru::Remote::Host.const_get(Kanrisuru::Util.camelize(namespace))
140
+ namespace_instance = Kanrisuru::Remote::Host.instance_variable_get("@#{namespace}")
141
+ else
142
+ namespace_class = Kanrisuru::Remote::Host.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
143
+ namespace_instance = Kanrisuru::Remote::Host.instance_variable_set("@#{namespace}", namespace_class.new)
139
144
 
140
- class_eval do
141
- define_method namespace do
142
- namespace_instance.instance_variable_set(:@host, self)
143
- namespace_instance
145
+ class_eval do
146
+ define_method namespace do
147
+ namespace_instance.instance_variable_set(:@host, self)
148
+ namespace_instance
149
+ end
144
150
  end
145
151
  end
152
+
153
+ namespace_class.class_eval(&include_method_bindings)
146
154
  else
147
155
  class_eval(&include_method_bindings)
148
156
  end
@@ -151,14 +159,16 @@ module Kanrisuru
151
159
  os_method_names.each do |method_name|
152
160
  if namespace
153
161
  namespace_class.class_eval do
162
+
154
163
  define_method method_name do |*args, &block|
155
164
  unbound_method = nil
156
165
 
157
- if os_method_cache.key?(method_name)
158
- unbound_method = os_method_cache[method_name]
159
- else
160
- host = namespace_instance.instance_variable_get(:@host)
166
+ host = namespace_instance.instance_variable_get(:@host)
167
+ os_method_cache = host.instance_variable_get(:@os_method_cache) || {}
161
168
 
169
+ if os_method_cache.key?("#{namespace}.#{method_name}")
170
+ unbound_method = os_method_cache["#{namespace}.#{method_name}"]
171
+ else
162
172
  ## Find the correct method to resolve based on the OS for the remote host.
163
173
  defined_method_name = host.resolve_os_method_name(os_method_properties, method_name)
164
174
  unless defined_method_name
@@ -171,7 +181,8 @@ module Kanrisuru
171
181
 
172
182
  ## Cache the unbound method on this host instance for faster resolution on
173
183
  ## the next invocation of this method
174
- os_method_cache[method_name] = unbound_method
184
+ os_method_cache["#{namespace}.#{method_name}"] = unbound_method
185
+ host.instance_variable_set(:@os_method_cache, os_method_cache)
175
186
  end
176
187
 
177
188
  ## Bind the method to host instance and
@@ -182,12 +193,13 @@ module Kanrisuru
182
193
  else
183
194
  define_method method_name do |*args, &block|
184
195
  unbound_method = nil
196
+
197
+ host = self
198
+ os_method_cache = host.instance_variable_get(:@os_method_cache) || {}
185
199
 
186
200
  if os_method_cache.key?(method_name)
187
201
  unbound_method = os_method_cache[method_name]
188
202
  else
189
- host = self
190
-
191
203
  ## Find the correct method to resolve based on the OS for the remote host.
192
204
  defined_method_name = host.resolve_os_method_name(os_method_properties, method_name)
193
205
  raise NoMethodError, "undefined method `#{method_name}' for #{self.class}" unless defined_method_name
@@ -199,6 +211,7 @@ module Kanrisuru
199
211
  ## Cache the unbound method on this host instance for faster resolution on
200
212
  ## the next invocation of this method
201
213
  os_method_cache[method_name] = unbound_method
214
+ host.instance_variable_set(:@os_method_cache, os_method_cache)
202
215
  end
203
216
 
204
217
  ## 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.6.0'
4
+ VERSION = '0.7.3'
5
5
  end
@@ -40,6 +40,12 @@ RSpec.describe Kanrisuru::Core::Zypper do
40
40
  expect(result).to be_success
41
41
  end
42
42
 
43
+ it 'removes a package' do
44
+ host.su('root')
45
+ result = host.zypper('remove', packages: ['ffmpeg'])
46
+ expect(result).to be_success
47
+ end
48
+
43
49
  it 'lists updates' do
44
50
  result = host.zypper('list-updates')
45
51
  expect(result).to be_success
@@ -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,82 @@ 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
43
+
44
+ module TestAliasNames
45
+ extend Kanrisuru::OsPackage::Define
46
+
47
+ os_define :fedora, :output_fedora, alias: :output
48
+ os_define :debian, :output_debian, alias: :output
49
+ os_define :sles, :output_sles, alias: :output
50
+
51
+ def output_debian
52
+ 'debian'
53
+ end
54
+
55
+ def output_fedora
56
+ 'fedora'
57
+ end
58
+
59
+ def output_sles
60
+ 'sles'
61
+ end
62
+ end
63
+
64
+ module TestAliasNamesNamespace
65
+ extend Kanrisuru::OsPackage::Define
66
+
67
+ os_define :fedora, :output_fedora, alias: :output
68
+ os_define :debian, :output_debian, alias: :output
69
+ os_define :sles, :output_sles, alias: :output
70
+
71
+ def output_debian
72
+ 'debian'
73
+ end
74
+
75
+ def output_fedora
76
+ 'fedora'
77
+ end
78
+
79
+ def output_sles
80
+ 'sles'
81
+ end
82
+ end
28
83
  end
29
84
 
30
85
  module Kanrisuru
31
86
  module Remote
32
87
  class Host
33
88
  os_include Kanrisuru::TestInclude
89
+
90
+ os_include Kanrisuru::TestAliasNames
91
+ os_include Kanrisuru::TestAliasNamesNamespace, namespace: :alias
92
+
93
+ os_include Kanrisuru::TestNamespaceAdditions, namespace: :asdf
34
94
  os_include Kanrisuru::TestNamespace, namespace: :asdf
35
95
  end
36
96
 
37
97
  class Cluster
38
98
  os_collection Kanrisuru::TestInclude
99
+
100
+ os_collection Kanrisuru::TestAliasNames
101
+ os_collection Kanrisuru::TestAliasNamesNamespace, namespace: :alias
102
+
103
+ os_collection Kanrisuru::TestNamespaceAdditions, namespace: :asdf
39
104
  os_collection Kanrisuru::TestNamespace, namespace: :asdf
40
105
  end
41
106
  end
@@ -64,12 +129,65 @@ RSpec.describe Kanrisuru::OsPackage do
64
129
 
65
130
  expect(host).to respond_to(:asdf)
66
131
  expect(host.asdf).to respond_to(:tester)
132
+ expect(host.asdf).to respond_to(:add)
133
+ expect(host.asdf).to respond_to(:minus)
134
+
67
135
  expect(host.asdf.tester).to eq 'hello namespace'
136
+ expect(host.asdf.add(1, 2)).to eq(3)
137
+ expect(host.asdf.minus(3, 2)).to eq(1)
138
+
68
139
  expect(host.tester).to eq('hello ubuntu')
140
+
69
141
  expect { host.asdf.test_not_correct }.to raise_error(NoMethodError)
70
142
  expect(cluster.asdf.tester).to be_instance_of(Array)
71
143
 
72
144
  host.disconnect
145
+ host2.disconnect
146
+ cluster.disconnect
147
+ end
148
+
149
+ it 'includes the correct alias named method' do
150
+ host1 = Kanrisuru::Remote::Host.new(host: 'ubuntu-host', username: 'ubuntu', keys: ['~/.ssh/id_rsa'])
151
+ host2 = Kanrisuru::Remote::Host.new(host: 'centos-host', username: 'centos', keys: ['~/.ssh/id_rsa'])
152
+ host3 = Kanrisuru::Remote::Host.new(host: 'opensuse-host', username: 'opensuse', keys: ['~/.ssh/id_rsa'])
153
+
154
+ cluster = Kanrisuru::Remote::Cluster.new([host1, host2, host3])
155
+
156
+ expect(host1).to respond_to(:output)
157
+ expect(host2).to respond_to(:output)
158
+ expect(host3).to respond_to(:output)
159
+ expect(host1.output).to eq('debian')
160
+ expect(host2.output).to eq('fedora')
161
+ expect(host3.output).to eq('sles')
162
+
163
+ expect(cluster).to respond_to(:output)
164
+ expect(cluster.output).to eq([
165
+ {:host=>"ubuntu-host", :result=>"debian"},
166
+ {:host=>"centos-host", :result=>"fedora"},
167
+ {:host=>"opensuse-host", :result=>"sles"}
168
+ ])
169
+
170
+ expect(host1).to respond_to(:alias)
171
+ expect(host2).to respond_to(:alias)
172
+ expect(host3).to respond_to(:alias)
173
+ expect(host1.alias).to respond_to(:output)
174
+ expect(host2.alias).to respond_to(:output)
175
+ expect(host3.alias).to respond_to(:output)
176
+ expect(host1.alias.output).to eq('debian')
177
+ expect(host2.alias.output).to eq('fedora')
178
+ expect(host3.alias.output).to eq('sles')
179
+
180
+ expect(cluster).to respond_to(:alias)
181
+ expect(cluster.alias).to respond_to(:output)
182
+ expect(cluster.alias.output).to eq([
183
+ {:host=>"ubuntu-host", :result=>"debian"},
184
+ {:host=>"centos-host", :result=>"fedora"},
185
+ {:host=>"opensuse-host", :result=>"sles"}
186
+ ])
187
+
188
+ host1.disconnect
189
+ host2.disconnect
190
+ host3.disconnect
73
191
  cluster.disconnect
74
192
  end
75
193
  end
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',
@@ -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.3
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-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"