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 +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
|
[![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'
|
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"
|