kanrisuru 0.11.1 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/CHANGELOG.md +9 -0
- data/README.md +13 -88
- data/kanrisuru.gemspec +1 -0
- data/lib/kanrisuru/command.rb +7 -0
- data/lib/kanrisuru/core/archive.rb +11 -35
- data/lib/kanrisuru/core/file.rb +4 -11
- data/lib/kanrisuru/core/find.rb +2 -6
- data/lib/kanrisuru/core/mount.rb +14 -15
- data/lib/kanrisuru/core/stream.rb +1 -2
- data/lib/kanrisuru/core/zypper.rb +6 -23
- data/lib/kanrisuru/os_package/collection.rb +58 -0
- data/lib/kanrisuru/os_package/define.rb +34 -0
- data/lib/kanrisuru/os_package/include.rb +163 -0
- data/lib/kanrisuru/os_package.rb +3 -245
- data/lib/kanrisuru/remote/fstab.rb +1 -1
- data/lib/kanrisuru/result.rb +5 -4
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/archive_spec.rb +2 -1
- data/spec/functional/core/mount_spec.rb +121 -0
- data/spec/helper/stub_network.rb +1 -1
- data/spec/helper/test_hosts.rb +11 -1
- data/spec/integration/core/apt_spec.rb +2 -3
- data/spec/integration/core/archive_spec.rb +8 -13
- data/spec/integration/core/disk_spec.rb +2 -3
- data/spec/integration/core/dmi_spec.rb +2 -3
- data/spec/integration/core/file_spec.rb +4 -13
- data/spec/integration/core/find_spec.rb +2 -3
- data/spec/integration/core/group_spec.rb +2 -3
- data/spec/integration/core/ip_spec.rb +2 -3
- data/spec/integration/core/path_spec.rb +2 -3
- data/spec/integration/core/socket_spec.rb +2 -4
- data/spec/integration/core/stat_spec.rb +2 -3
- data/spec/integration/core/stream_spec.rb +6 -9
- data/spec/integration/core/system_spec.rb +2 -3
- data/spec/integration/core/transfer_spec.rb +4 -9
- data/spec/integration/core/user_spec.rb +2 -4
- data/spec/integration/core/yum_spec.rb +2 -3
- data/spec/integration/core/zypper_spec.rb +2 -3
- data/spec/integration/remote/cpu_spec.rb +2 -3
- data/spec/integration/remote/env_spec.rb +2 -3
- data/spec/integration/remote/fstab_spec.rb +2 -3
- data/spec/integration/remote/host_spec.rb +2 -3
- data/spec/integration/remote/memory_spec.rb +2 -2
- data/spec/integration/remote/os_spec.rb +2 -3
- data/spec/integration/remote/remote_file_spec.rb +9 -15
- data/spec/spec_helper.rb +12 -3
- data/spec/unit/command_spec.rb +18 -0
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1401e8534eead10f860fbe8c4bd90397571d391ff4581c74d8ae427e4c32afa
|
4
|
+
data.tar.gz: bbba84a50446bc323ff21980c65ef1a0ff14dc316b8f731da0ee55c914ea2160
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f89283777add5671cbb00d7294c204911aa8591a00582c11c560df1091be1cb459afe94450d468b2f85c17df3883805fb1776b2f49ef85846bbc2664c49a10e
|
7
|
+
data.tar.gz: 653788aa5d5f84a4290b7462437ce1cdc42be954b834c0c2398a7704ac8b3b0346718fbb0b423ad1770579960c8b3a371c6f6fc4b5688dabb75c175e55ea26d3
|
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## Kanrisuru 0.12.0 (December 05, 20201) ##
|
2
|
+
* Add functional test cases for `mount` command.
|
3
|
+
* Fix typos and command preperation for `mount` command.
|
4
|
+
* Refactor `os_package` module into smaller modules for `Kanrisuru::OsPackage::Collection`, `Kanrisuru::OsPackage::Define`, and `Kanrisuru::OsPackage::Include`.
|
5
|
+
* Add `append_array` to `command` class for easy string to array conversion for variable option passing.
|
6
|
+
* Cleanup bad coding styles.
|
7
|
+
* Add parallel testing support for long running integration tests on remote servers.
|
8
|
+
* Refactor specs to use variable spec_dir path for parallel testing on remote hosts with possible overwriting at the same time.
|
9
|
+
|
1
10
|
## Kanrisuru 0.11.1 (December 04, 2021) ##
|
2
11
|
* Cleanup self-assignment branches
|
3
12
|
* Fix linting issues.
|
data/README.md
CHANGED
@@ -1,13 +1,20 @@
|
|
1
|
-
[![Latest version](https://img.shields.io/gem/v/kanrisuru?style=flat-square)](https://rubygems.org/gems/kanrisuru)
|
2
|
-
[![Latest version](https://img.shields.io/github/license/avamia/kanrisuru)](https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt)
|
3
|
-
![GitHub repo size](https://img.shields.io/github/repo-size/avamia/kanrisuru)
|
4
|
-
![Codecov](https://img.shields.io/codecov/c/gh/avamia/kanrisuru?token=2Q1BE106B2)
|
5
|
-
![Codacy grade](https://img.shields.io/codacy/grade/9e839eb160bc445ea4e81b64cef22b27)
|
6
|
-
|
7
1
|
<p align='center'>
|
8
2
|
<img src="https://s3.us-east-2.amazonaws.com/kanrisuru.com/kanrisuru-banner-02.png" width="600" />
|
9
3
|
</p>
|
10
4
|
|
5
|
+
<p align="center">
|
6
|
+
<a href="https://rubygems.org/gems/kanrisuru">
|
7
|
+
<img src="https://img.shields.io/gem/v/kanrisuru?style=flat-square" alt="Latest version" />
|
8
|
+
</a>
|
9
|
+
<a href="https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt">
|
10
|
+
<img src="https://img.shields.io/github/license/avamia/kanrisuru" alt="Latest version" />
|
11
|
+
</a>
|
12
|
+
<img src="https://img.shields.io/github/repo-size/avamia/kanrisuru" alt="GitHub repo size" />
|
13
|
+
<img src="https://img.shields.io/codecov/c/gh/avamia/kanrisuru?token=2Q1BE106B2" alt="Codecov" />
|
14
|
+
<img src="https://img.shields.io/codacy/grade/9e839eb160bc445ea4e81b64cef22b27" alt="Codacy grade" />
|
15
|
+
<img src="https://img.shields.io/codeclimate/maintainability/avamia/kanrisuru" alt="Code Climate maintainability" />
|
16
|
+
</p>
|
17
|
+
|
11
18
|
# Kanrisuru
|
12
19
|
|
13
20
|
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.
|
@@ -82,88 +89,6 @@ cluster = Kanrisuru::Remote::Cluster.new(host, {host: 'host2', username: 'alice'
|
|
82
89
|
cluster.execute('uname') #=> {host: 'host1', result: 'Linux'}, {host: 'host2', result: 'Linux'}
|
83
90
|
```
|
84
91
|
|
85
|
-
## Methods and Testing
|
86
|
-
|
87
|
-
| Description | Ruby | Shell | Module | Man | Debian | Ubuntu | Fedora | Centos | RHEL | openSUSE | SLES |
|
88
|
-
|---------------------------------------|------------------|--------------------|--------|--------------------------------------|--------|--------|--------|--------|------|----------|------|
|
89
|
-
| **System** | | | | | | | | | | | |
|
90
|
-
| Get CPU Info | cpu_info | lscpu | core | https://linux.die.net/man/1/lscpu | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
91
|
-
| Get CPU architecture | lscpu | lscpu | core | https://linux.die.net/man/1/lscpu | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
92
|
-
| Get kernel stastics | kernel_statistics | cat /proc/stat | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
93
|
-
| Get hardware BIOS info | dmi | dmidecode | core | https://linux.die.net/man/8/dmidecode | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
94
|
-
| Get open file details for processes | lsof | lsof | core | https://linux.die.net/man/8/lsof | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
95
|
-
| Get Load Average | load_average | cat /proc/load_avg | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
96
|
-
| Get RAM Available | free | cat /proc/meminfo | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
97
|
-
| Get list of processes | ps | ps | core | https://linux.die.net/man/1/ps | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
98
|
-
| Get Env vars | load_env | env | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
99
|
-
| Kill process | kill | kill | core | https://linux.die.net/man/1/kill | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
100
|
-
| Get uptime of system | uptime | cat /proc/uptime | core | https://linux.die.net/man/1/uptime | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
101
|
-
| Get who's logged in | w | w | core | https://linux.die.net/man/1/w | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
102
|
-
| Reboot machine | reboot | shutdown | core | https://linux.die.net/man/8/reboot | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
103
|
-
| Poweroff machine | poweroff | shutdown | core | https://linux.die.net/man/8/shutdown | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
104
|
-
| **Disk** | | | | | | | | | | | |
|
105
|
-
| Get Disk Space | df | df | core | https://linux.die.net/man/1/df | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
106
|
-
| Get Disk Usage | du | du | core | https://linux.die.net/man/1/du | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
107
|
-
| List block devices | lsblk | lsblk | core | https://linux.die.net/man/8/lsblk | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
108
|
-
| Get block device attributes | blkid | blikd | core | https://linux.die.net/man/8/blkid | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
109
|
-
| **Mount** | | | | | | | | | | | |
|
110
|
-
| Mount a filesystem | mount | mount | core | https://linux.die.net/man/8/mount | | | | | | | |
|
111
|
-
| Unmount a filesystem | umount | umount | core | https://linux.die.net/man/8/umount | | | | | | | |
|
112
|
-
| **Group** | | | | | | | | | | | |
|
113
|
-
| Get Group Id | get_gid | getent group | core | https://linux.die.net/man/1/getent | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
114
|
-
| Get Group | get_group | grep /etc/group | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
115
|
-
| Create Group | create_group | groupadd | core | https://linux.die.net/man/8/groupadd | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
116
|
-
| Update Group | update_group | groupmod | core | https://linux.die.net/man/8/groupmod | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
117
|
-
| Delete Group | delete_group | groupdel | core | https://linux.die.net/man/8/groupdel | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
118
|
-
| **User** | | | | | | | | | | | |
|
119
|
-
| Get User Id | get_uid | id -u | core | https://linux.die.net/man/1/id | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
120
|
-
| Get User | get_user | id | core | https://linux.die.net/man/1/id | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
121
|
-
| Create User | create_user | useradd | core | https://linux.die.net/man/8/useradd | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
122
|
-
| Update User | update_user | usermod | core | https://linux.die.net/man/8/usermod | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
123
|
-
| Delete User | delete_user | userdel | core | https://linux.die.net/man/8/userdel | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
124
|
-
| **Path** | | | | | | | | | | | |
|
125
|
-
| List files and directories | ls | ls | core | https://linux.die.net/man/1/ls | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
126
|
-
| Get Current Dir | pwd | pwd | core | https://linux.die.net/man/1/pwd | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
127
|
-
| Get Current User | whoami | whoami | core | https://linux.die.net/man/1/whoami | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
128
|
-
| Get Full Path of Shell Command | which | which | core | https://linux.die.net/man/1/which | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
129
|
-
| Real Path | realpath | realpath | core | https://linux.die.net/man/1/realpath | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
130
|
-
| Read link | readlink | readlink | core | https://linux.die.net/man/1/readlink | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
131
|
-
| Change Dir | cd | cd | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
132
|
-
| **File** | | | | | | | | | | | |
|
133
|
-
| "Find file, dir, special file device" | find | find | core | https://linux.die.net/man/1/find | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
134
|
-
| Stat file info | stat | stat | core | https://linux.die.net/man/1/stat | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
135
|
-
| Change Permission of file / folder | chmod | chmod | core | https://linux.die.net/man/1/chmod | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
136
|
-
| Change Ownership of file / folder | chown | chown | core | https://linux.die.net/man/1/chown | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
137
|
-
| Hard Link File | ln | ln | core | https://linux.die.net/man/1/ln | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
138
|
-
| Soft Link File / Dir | ln_s | ln | core | https://linux.die.net/man/1/ln | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
139
|
-
| Create Directory | mkdir | mkdir | core | https://linux.die.net/man/1/mkdir | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
140
|
-
| Remove file / directory | rm | rm | core | https://linux.die.net/man/1/rm | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
141
|
-
| Remove Directory | rmdir | rm | core | https://linux.die.net/man/1/rm | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
142
|
-
| Touch File | touch | touch | core | https://linux.die.net/man/1/touch | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
143
|
-
| Copy file / directory | cp | cp | core | https://linux.die.net/man/1/cp | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
144
|
-
| Move file / directory | mv | mv | core | https://linux.die.net/man/1/mv | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
145
|
-
| "Get file line, word, and char count" | wc | wc | core | https://linux.die.net/man/1/wc | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
146
|
-
| **Stream** | | | | | | | | | | | |
|
147
|
-
| Get content from beginning of file | head | head | core | https://linux.die.net/man/1/head | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
148
|
-
| Get content from end of file | tail | tail | core | https://linux.die.net/man/1/tail | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
149
|
-
| Read a chunk from a file by lines | reach_file_chunk | tail and head | core | | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
150
|
-
| Echo to stdout or to file | echo | echo | core | https://linux.die.net/man/1/echo | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
151
|
-
| Get all content from a file | cat | cat | core | https://linux.die.net/man/1/cat | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
152
|
-
| Sed | sed | sed | core | https://linux.die.net/man/1/sed | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
153
|
-
| **Archive** | | | | | | | | | | | |
|
154
|
-
| Tar Files | tar | tar | core | https://linux.die.net/man/1/tar | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
155
|
-
| **Network** | | | | | | | | | | | |
|
156
|
-
| Manage network devices | ip | ip | core | https://linux.die.net/man/8/ip | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
157
|
-
| Get Socket Details | ss | ss | core | https://linux.die.net/man/8/ss | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
158
|
-
| **Transfer** | | | | | | | | | | | |
|
159
|
-
| Upload to remote server | upload | scp | core | https://linux.die.net/man/1/scp | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
160
|
-
| Download from remote server | download | scp | core | https://linux.die.net/man/1/scp | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
161
|
-
| Wget | wget | wget | core | https://linux.die.net/man/1/wget | [x] | [x] | [x] | [x] | [x] | [x] | [x] |
|
162
|
-
| **Packages** | | | | | | | | | | | |
|
163
|
-
| Apt | apt | apt | core | https://linux.die.net/man/1/apt | [x] | [x] | | | | | |
|
164
|
-
| Yum | yum | yum | core | https://linux.die.net/man/1/yum | | | [x] | [x] | [x] | | |
|
165
|
-
| Zypper | zypper | zypper | core | https://en.opensuse.org/SDB:Zypper_manual | | | | | | [x] | [x] |
|
166
|
-
|
167
92
|
## Development
|
168
93
|
|
169
94
|
After checking out the repo, run `bin/setup` to install dependencies.
|
data/kanrisuru.gemspec
CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
|
15
15
|
gem.required_ruby_version = '>= 2.5.0'
|
16
16
|
|
17
|
+
gem.add_development_dependency 'parallel_tests', '~> 3.7'
|
17
18
|
gem.add_development_dependency 'rspec', '~> 3.10'
|
18
19
|
gem.add_development_dependency 'rubocop', '~> 1.12'
|
19
20
|
gem.add_development_dependency 'rubocop-rspec', '~> 2.2'
|
data/lib/kanrisuru/command.rb
CHANGED
@@ -84,6 +84,13 @@ module Kanrisuru
|
|
84
84
|
append_value("| #{value}")
|
85
85
|
end
|
86
86
|
|
87
|
+
def append_array(value)
|
88
|
+
return unless Kanrisuru::Util.present?(value)
|
89
|
+
|
90
|
+
value = [value] if value.instance_of?(String)
|
91
|
+
append_value(value.join(' '))
|
92
|
+
end
|
93
|
+
|
87
94
|
def append_value(value)
|
88
95
|
@raw_command = "#{@raw_command} #{value}"
|
89
96
|
end
|
@@ -10,18 +10,16 @@ module Kanrisuru
|
|
10
10
|
FilePath = Struct.new(:path)
|
11
11
|
|
12
12
|
def tar(action, file, opts = {})
|
13
|
-
compress = opts[:compress]
|
14
13
|
paths = opts[:paths]
|
15
14
|
exclude = opts[:exclude]
|
16
|
-
directory = opts[:directory]
|
17
15
|
|
18
16
|
command = Kanrisuru::Command.new('tar --restrict')
|
19
17
|
|
20
|
-
directory = realpath(directory, strip: true).path
|
18
|
+
directory = opts[:directory] ? realpath(opts[:directory], strip: true).path : nil
|
21
19
|
command.append_arg('-C', directory)
|
22
20
|
command.append_arg('-f', file)
|
23
21
|
|
24
|
-
set_compression(command, compress) if compress
|
22
|
+
set_compression(command, opts[:compress]) if opts[:compress]
|
25
23
|
|
26
24
|
case action
|
27
25
|
when 'list', 't'
|
@@ -58,10 +56,7 @@ module Kanrisuru
|
|
58
56
|
command.append_flag('--unlink-first', opts[:unlink_first])
|
59
57
|
command.append_flag('--recursive-unlink', opts[:recursive_unlink])
|
60
58
|
|
61
|
-
|
62
|
-
paths = [paths] if paths.instance_of?(String)
|
63
|
-
command << paths.join(' ')
|
64
|
-
end
|
59
|
+
command.append_array(paths)
|
65
60
|
|
66
61
|
execute_shell(command)
|
67
62
|
Kanrisuru::Result.new(command)
|
@@ -70,46 +65,31 @@ module Kanrisuru
|
|
70
65
|
command.append_flag('--multi-volume', opts[:multi_volume])
|
71
66
|
|
72
67
|
if Kanrisuru::Util.present?(exclude)
|
73
|
-
|
74
|
-
|
75
|
-
command << "--exclude=#{
|
68
|
+
options = exclude.instance_of?(String) ? [exclude] : exclude
|
69
|
+
options.each do |option|
|
70
|
+
command << "--exclude=#{option}"
|
76
71
|
end
|
77
72
|
end
|
78
73
|
|
79
|
-
|
80
|
-
paths = paths.instance_of?(String) ? [paths] : paths
|
81
|
-
command << paths.join(' ')
|
82
|
-
end
|
74
|
+
command.append_array(paths)
|
83
75
|
|
84
76
|
execute_shell(command)
|
85
77
|
Kanrisuru::Result.new(command)
|
86
78
|
when 'append', 'r'
|
87
79
|
command.append_flag('-r')
|
88
|
-
|
89
|
-
if Kanrisuru::Util.present?(paths)
|
90
|
-
paths = paths.instance_of?(String) ? [paths] : paths
|
91
|
-
command << paths.join(' ')
|
92
|
-
end
|
80
|
+
command.append_array(paths)
|
93
81
|
|
94
82
|
execute_shell(command)
|
95
83
|
Kanrisuru::Result.new(command)
|
96
84
|
when 'catenate', 'concat', 'A'
|
97
85
|
command.append_flag('-A')
|
98
|
-
|
99
|
-
if Kanrisuru::Util.present?(paths)
|
100
|
-
paths = paths.instance_of?(String) ? [paths] : paths
|
101
|
-
command << paths.join(' ')
|
102
|
-
end
|
86
|
+
command.append_array(paths)
|
103
87
|
|
104
88
|
execute_shell(command)
|
105
89
|
Kanrisuru::Result.new(command)
|
106
90
|
when 'update', 'u'
|
107
91
|
command.append_flag('-u')
|
108
|
-
|
109
|
-
if Kanrisuru::Util.present?(paths)
|
110
|
-
paths = paths.instance_of?(String) ? [paths] : paths
|
111
|
-
command << paths.join(' ')
|
112
|
-
end
|
92
|
+
command.append_array(paths)
|
113
93
|
|
114
94
|
execute_shell(command)
|
115
95
|
Kanrisuru::Result.new(command)
|
@@ -122,11 +102,7 @@ module Kanrisuru
|
|
122
102
|
when 'delete'
|
123
103
|
command.append_flag('--delete')
|
124
104
|
command.append_arg('--occurrence', opts[:occurrence])
|
125
|
-
|
126
|
-
if Kanrisuru::Util.present?(paths)
|
127
|
-
paths = paths.instance_of?(String) ? [paths] : paths
|
128
|
-
command << paths.join(' ')
|
129
|
-
end
|
105
|
+
command.append_array(paths)
|
130
106
|
|
131
107
|
execute_shell(command)
|
132
108
|
Kanrisuru::Result.new(command)
|
data/lib/kanrisuru/core/file.rb
CHANGED
@@ -64,12 +64,9 @@ module Kanrisuru
|
|
64
64
|
command << dest
|
65
65
|
elsif opts[:target_directory]
|
66
66
|
command.append_arg('-t', dest)
|
67
|
-
|
68
|
-
source = [source] if source.instance_of?(String)
|
69
|
-
command << source.join(' ')
|
67
|
+
command.append_array(source)
|
70
68
|
else
|
71
|
-
|
72
|
-
command << source.join(' ')
|
69
|
+
command.append_array(source)
|
73
70
|
command << dest
|
74
71
|
end
|
75
72
|
|
@@ -108,13 +105,9 @@ module Kanrisuru
|
|
108
105
|
command << dest
|
109
106
|
elsif opts[:target_directory]
|
110
107
|
command.append_arg('-t', dest)
|
111
|
-
|
112
|
-
source = source.instance_of?(String) ? [source] : source
|
113
|
-
command << source.join(' ')
|
108
|
+
command.append_array(source)
|
114
109
|
else
|
115
|
-
|
116
|
-
|
117
|
-
command << source.join(' ')
|
110
|
+
command.append_array(source)
|
118
111
|
command << dest
|
119
112
|
end
|
120
113
|
|
data/lib/kanrisuru/core/find.rb
CHANGED
@@ -30,13 +30,9 @@ module Kanrisuru
|
|
30
30
|
end
|
31
31
|
|
32
32
|
if Kanrisuru::Util.present?(paths)
|
33
|
-
|
34
|
-
paths = paths.join(' ')
|
35
|
-
elsif paths.class != String
|
36
|
-
raise ArgumentError, 'Invalid paths type'
|
37
|
-
end
|
33
|
+
raise ArgumentError, 'Invalid paths type' unless [String, Array].include?(paths.class)
|
38
34
|
|
39
|
-
command
|
35
|
+
command.append_array(paths)
|
40
36
|
end
|
41
37
|
|
42
38
|
command.append_flag('-executable', opts[:executable])
|
data/lib/kanrisuru/core/mount.rb
CHANGED
@@ -10,9 +10,6 @@ module Kanrisuru
|
|
10
10
|
|
11
11
|
def mount(opts = {})
|
12
12
|
type = opts[:type]
|
13
|
-
all = opts[:all]
|
14
|
-
device = opts[:device]
|
15
|
-
directory = opts[:directory]
|
16
13
|
|
17
14
|
bind_old = opts[:bind_old]
|
18
15
|
bind_new = opts[:bind_new]
|
@@ -39,13 +36,12 @@ module Kanrisuru
|
|
39
36
|
else
|
40
37
|
command.append_arg('-L', opts[:label])
|
41
38
|
command.append_arg('-U', opts[:uuid])
|
42
|
-
command.append_flag('-n', opts[:no_mtab])
|
43
39
|
command.append_flag('-f', opts[:fake])
|
44
40
|
command.append_flag('-i', opts[:internal_only])
|
45
41
|
command.append_flag('-s', opts[:sloppy])
|
46
42
|
|
47
43
|
command.append_flag('--no-mtab', opts[:no_mtab])
|
48
|
-
command.append_flag('--no-
|
44
|
+
command.append_flag('--no-canonicalize', opts[:no_canonicalize])
|
49
45
|
|
50
46
|
fs_options = nil
|
51
47
|
if Kanrisuru::Util.present?(type)
|
@@ -55,14 +51,14 @@ module Kanrisuru
|
|
55
51
|
fs_options = Kanrisuru::Remote::Fstab::Options.new('common', fs_opts)
|
56
52
|
end
|
57
53
|
|
58
|
-
if Kanrisuru::Util.present?(all)
|
54
|
+
if Kanrisuru::Util.present?(opts[:all])
|
59
55
|
command.append_flag('-a')
|
60
56
|
add_test_opts(command, opts[:test_opts], type)
|
61
57
|
else
|
62
58
|
command.append_arg('-o', fs_options.to_s)
|
63
59
|
|
64
|
-
command << device if Kanrisuru::Util.present?(device)
|
65
|
-
command << directory if Kanrisuru::Util.present?(directory)
|
60
|
+
command << opts[:device] if Kanrisuru::Util.present?(opts[:device])
|
61
|
+
command << opts[:directory] if Kanrisuru::Util.present?(opts[:directory])
|
66
62
|
end
|
67
63
|
end
|
68
64
|
|
@@ -75,12 +71,6 @@ module Kanrisuru
|
|
75
71
|
type = opts[:type]
|
76
72
|
command = Kanrisuru::Command.new('umount')
|
77
73
|
|
78
|
-
if Kanrisuru::Util.present?(all)
|
79
|
-
command.append_flag('-a')
|
80
|
-
add_type(command, type)
|
81
|
-
add_test_opts(command, opts[:test_opts], type)
|
82
|
-
end
|
83
|
-
|
84
74
|
command.append_flag('--fake', opts[:fake])
|
85
75
|
command.append_flag('--no-canonicalize', opts[:no_canonicalize])
|
86
76
|
command.append_flag('-n', opts[:no_mtab])
|
@@ -90,6 +80,15 @@ module Kanrisuru
|
|
90
80
|
command.append_flag('-l', opts[:lazy])
|
91
81
|
command.append_flag('-f', opts[:force])
|
92
82
|
|
83
|
+
if Kanrisuru::Util.present?(all)
|
84
|
+
command.append_flag('-a')
|
85
|
+
add_type(command, type)
|
86
|
+
add_test_opts(command, opts[:test_opts], type)
|
87
|
+
else
|
88
|
+
command << opts[:device] if Kanrisuru::Util.present?(opts[:device])
|
89
|
+
command << opts[:directory] if Kanrisuru::Util.present?(opts[:directory])
|
90
|
+
end
|
91
|
+
|
93
92
|
execute_shell(command)
|
94
93
|
|
95
94
|
Kanrisuru::Result.new(command)
|
@@ -115,7 +114,7 @@ module Kanrisuru
|
|
115
114
|
|
116
115
|
test_types.each do |t|
|
117
116
|
device_opts = Kanrisuru::Util::FsMountOpts.get_device(t)
|
118
|
-
raise
|
117
|
+
raise ArgumentError, "Invalid fstype: #{t}" unless device_opts
|
119
118
|
end
|
120
119
|
|
121
120
|
command.append_arg('-t', type)
|
@@ -95,8 +95,7 @@ module Kanrisuru
|
|
95
95
|
command.append_flag('-b', opts[:number_nonblank])
|
96
96
|
command.append_flag('-A', opts[:show_all])
|
97
97
|
|
98
|
-
|
99
|
-
command << files.join(' ')
|
98
|
+
command.append_array(files)
|
100
99
|
|
101
100
|
append_file(command, opts)
|
102
101
|
execute_shell(command)
|
@@ -181,8 +181,7 @@ module Kanrisuru
|
|
181
181
|
command.append_flag('--metadata', opts[:metadata])
|
182
182
|
command.append_flag('--raw-metadata', opts[:raw_metadata])
|
183
183
|
command.append_flag('--all', opts[:all])
|
184
|
-
|
185
|
-
command << opts[:repos]
|
184
|
+
command.append_array(opts[:repos])
|
186
185
|
|
187
186
|
execute_shell(command)
|
188
187
|
|
@@ -276,11 +275,7 @@ module Kanrisuru
|
|
276
275
|
command.append_arg('--medium-type', opts[:medium_type])
|
277
276
|
end
|
278
277
|
|
279
|
-
|
280
|
-
if Kanrisuru::Util.present?(repos)
|
281
|
-
repos = [repos] if repos.instance_of?(String)
|
282
|
-
command << repos.join(' ')
|
283
|
-
end
|
278
|
+
command.append_array(opts[:repos])
|
284
279
|
|
285
280
|
execute_shell(command)
|
286
281
|
|
@@ -336,11 +331,7 @@ module Kanrisuru
|
|
336
331
|
command.append_arg('--media-type', opts[:media_type])
|
337
332
|
end
|
338
333
|
|
339
|
-
|
340
|
-
if Kanrisuru::Util.present?(repos)
|
341
|
-
repos = repos.instance_of?(String) ? [repos] : repos
|
342
|
-
command << repos.join(' ')
|
343
|
-
end
|
334
|
+
command.append_array(opts[:repos])
|
344
335
|
|
345
336
|
execute_shell(command)
|
346
337
|
|
@@ -372,11 +363,7 @@ module Kanrisuru
|
|
372
363
|
command.append_flag('--refresh', opts[:refresh])
|
373
364
|
command.append_flag('--no-refresh', opts[:no_refresh])
|
374
365
|
|
375
|
-
|
376
|
-
if Kanrisuru::Util.present?(services)
|
377
|
-
services = [services] if services.instance_of?(String)
|
378
|
-
command << services.join(' ')
|
379
|
-
end
|
366
|
+
command.append_array(opts[:services])
|
380
367
|
|
381
368
|
execute_shell(command)
|
382
369
|
|
@@ -386,15 +373,11 @@ module Kanrisuru
|
|
386
373
|
def zypper_remove_service(opts)
|
387
374
|
command = Kanrisuru::Command.new('zypper')
|
388
375
|
zypper_global_opts(command, opts)
|
376
|
+
|
389
377
|
command << 'removeservice'
|
390
378
|
command.append_flag('--loose-auth', opts[:loose_auth])
|
391
379
|
command.append_flag('--loose-query', opts[:loose_query])
|
392
|
-
|
393
|
-
services = opts[:services]
|
394
|
-
if Kanrisuru::Util.present?(services)
|
395
|
-
services = [services] if services.instance_of?(String)
|
396
|
-
command << services.join(' ')
|
397
|
-
end
|
380
|
+
command.append_array(opts[:services])
|
398
381
|
|
399
382
|
execute_shell(command)
|
400
383
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kanrisuru
|
4
|
+
module OsPackage
|
5
|
+
module Collection
|
6
|
+
def os_collection(mod, opts = {})
|
7
|
+
os_method_properties = mod.instance_variable_get(:@os_method_properties)
|
8
|
+
os_method_names = os_method_properties.keys
|
9
|
+
|
10
|
+
namespace = opts[:namespace]
|
11
|
+
namespace_instance = nil
|
12
|
+
|
13
|
+
if namespace
|
14
|
+
## Define the namespace as an eigen class instance on the host.
|
15
|
+
## Namespaced instances will access core host methods
|
16
|
+
## with @host instance variable.
|
17
|
+
|
18
|
+
if Kanrisuru::Remote::Cluster.instance_variable_defined?("@#{namespace}")
|
19
|
+
namespace_class = Kanrisuru::Remote::Cluster.const_get(Kanrisuru::Util.camelize(namespace))
|
20
|
+
namespace_instance = instance_variable_get("@#{namespace}")
|
21
|
+
else
|
22
|
+
namespace_class = Kanrisuru::Remote::Cluster.const_set(Kanrisuru::Util.camelize(namespace), Class.new)
|
23
|
+
namespace_instance = Kanrisuru::Remote::Cluster.instance_variable_set("@#{namespace}", namespace_class.new)
|
24
|
+
|
25
|
+
class_eval do
|
26
|
+
define_method namespace do
|
27
|
+
namespace_instance.instance_variable_set(:@cluster, self)
|
28
|
+
namespace_instance
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
namespace_class.class_eval do
|
34
|
+
os_method_names.each do |method_name|
|
35
|
+
define_method method_name do |*args, &block|
|
36
|
+
cluster = namespace_instance.instance_variable_get(:@cluster)
|
37
|
+
hosts = cluster.instance_variable_get(:@hosts)
|
38
|
+
hosts.map do |host_addr, host|
|
39
|
+
{ host: host_addr, result: host.send(namespace).send(method_name, *args, &block) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
else
|
45
|
+
class_eval do
|
46
|
+
os_method_names.each do |method_name|
|
47
|
+
define_method method_name do |*args, &block|
|
48
|
+
@hosts.map do |host_addr, host|
|
49
|
+
{ host: host_addr, result: host.send(method_name, *args, &block) }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kanrisuru
|
4
|
+
module OsPackage
|
5
|
+
module Define
|
6
|
+
def self.extended(base)
|
7
|
+
base.instance_variable_set(:@os_method_properties, {})
|
8
|
+
base.instance_variable_set(:@os_methods, Set.new)
|
9
|
+
end
|
10
|
+
|
11
|
+
def os_define(os_name, method_name, options = {})
|
12
|
+
unique_method_name = options[:alias] || method_name
|
13
|
+
|
14
|
+
@os_methods.add(method_name)
|
15
|
+
|
16
|
+
if @os_method_properties.key?(unique_method_name)
|
17
|
+
params = {
|
18
|
+
os_name: os_name.to_s,
|
19
|
+
method_name: method_name,
|
20
|
+
options: options
|
21
|
+
}
|
22
|
+
|
23
|
+
@os_method_properties[unique_method_name].prepend(params)
|
24
|
+
else
|
25
|
+
@os_method_properties[unique_method_name] = [{
|
26
|
+
os_name: os_name.to_s,
|
27
|
+
method_name: method_name,
|
28
|
+
options: options
|
29
|
+
}]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|