kanrisuru 0.6.0 → 0.7.3
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 +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 +29 -2
- data/README.md +4 -0
- data/kanrisuru.gemspec +1 -1
- data/lib/kanrisuru/core/path.rb +3 -3
- data/lib/kanrisuru/core/system.rb +9 -13
- data/lib/kanrisuru/core/zypper.rb +3 -0
- data/lib/kanrisuru/os_package.rb +40 -27
- 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/zypper_spec.rb +6 -0
- data/spec/functional/os_package_spec.rb +119 -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 +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8235592e090d7f6466a0e78d0d7b4eff7d31a2c47649aadd7cf822df11847642
|
4
|
+
data.tar.gz: 20c8730f24d486687c1161f0da1dc330bf93ec7f273db14c258cd0a83ce766e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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
|
[](https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt)
|
3
3
|

|
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'
|
31
|
+
'changelog_uri' => 'https://github.com/avamia/kanrisuru/blob/main/CHANGELOG.md'
|
32
32
|
}
|
33
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,
|
@@ -111,7 +111,7 @@ module Kanrisuru
|
|
111
111
|
:file_descriptor,
|
112
112
|
:type,
|
113
113
|
:device,
|
114
|
-
:
|
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(
|
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.
|
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)
|
data/lib/kanrisuru/os_package.rb
CHANGED
@@ -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
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
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
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
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
|
-
|
158
|
-
|
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
|
data/lib/kanrisuru/remote/env.rb
CHANGED
data/lib/kanrisuru/result.rb
CHANGED
data/lib/kanrisuru/version.rb
CHANGED
@@ -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 :
|
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
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',
|
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.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-
|
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"
|