rbcli 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/Gemfile.lock +7 -2
- data/README.md +43 -3
- data/bin/console +1 -1
- data/bin/setup +1 -1
- data/docs/404.html +12 -0
- data/docs/advanced/automatic_updates/index.html +12 -0
- data/docs/advanced/command_types/index.html +13 -1
- data/docs/advanced/distributed_state_locking/index.html +14 -2
- data/docs/advanced/hooks/index.html +12 -0
- data/docs/advanced/remote_execution/index.html +822 -0
- data/docs/advanced/state_storage/index.html +12 -0
- data/docs/advanced/user_config_files/index.html +12 -0
- data/docs/development/code_of_conduct/index.html +12 -0
- data/docs/development/contributing/index.html +15 -3
- data/docs/development/license/index.html +12 -0
- data/docs/imported/changelog/index.html +82 -7
- data/docs/imported/quick_reference/index.html +40 -1
- data/docs/index.html +15 -0
- data/docs/search/search_index.json +52 -12
- data/docs/sitemap.xml +23 -18
- data/docs/tutorial/10-getting_started/index.html +12 -0
- data/docs/tutorial/20-project_layout/index.html +12 -0
- data/docs/tutorial/30-your_first_command/index.html +12 -0
- data/docs/tutorial/40-options_parameters_and_arguments/index.html +12 -0
- data/docs/tutorial/50-publishing/index.html +12 -0
- data/docs/whoami/index.html +12 -0
- data/docs-src/docs/advanced/command_types.md +1 -1
- data/docs-src/docs/advanced/remote_execution.md +56 -0
- data/docs-src/docs/development/contributing.md +1 -1
- data/docs-src/docs/imported/changelog.md +12 -1
- data/docs-src/docs/imported/quick_reference.md +23 -1
- data/docs-src/docs/index.md +2 -0
- data/docs-src/mkdocs.yml +1 -0
- data/exe/rbcli +1 -1
- data/lib/rbcli/autoupdate/autoupdate.rb +1 -1
- data/lib/rbcli/autoupdate/gem_updater.rb +1 -1
- data/lib/rbcli/autoupdate/github_updater.rb +1 -1
- data/lib/rbcli/configuration/config.rb +1 -1
- data/lib/rbcli/configuration/configurate.rb +7 -2
- data/lib/rbcli/engine/command.rb +25 -3
- data/lib/rbcli/engine/load_project.rb +1 -1
- data/lib/rbcli/engine/parser.rb +10 -2
- data/lib/rbcli/logging/logging.rb +1 -1
- data/lib/rbcli/remote_exec/remote_exec.rb +187 -0
- data/lib/rbcli/scriptwrapping/scriptwrapper.rb +25 -5
- data/lib/rbcli/stateful_systems/configuratestorage.rb +1 -1
- data/lib/rbcli/stateful_systems/state_storage.rb +1 -1
- data/lib/rbcli/stateful_systems/storagetypes/localstate.rb +1 -1
- data/lib/rbcli/stateful_systems/storagetypes/remote_state_connectors/dynamodb.rb +1 -1
- data/lib/rbcli/stateful_systems/storagetypes/remotestate_dynamodb.rb +1 -1
- data/lib/rbcli/util/hash_deep_symbolize.rb +1 -1
- data/lib/rbcli/util/string_colorize.rb +1 -1
- data/lib/rbcli/version.rb +2 -2
- data/lib/rbcli-tool/generators.rb +1 -1
- data/lib/rbcli-tool/mdless_fix.rb +1 -1
- data/lib/rbcli-tool/project.rb +1 -1
- data/lib/rbcli-tool/util.rb +1 -1
- data/lib/rbcli-tool.rb +1 -1
- data/lib/rbcli.rb +5 -1
- data/lib-sh/lib-rbcli.sh +18 -9
- data/rbcli.gemspec +5 -2
- data/skeletons/project/application/commands/command.erb +1 -1
- data/skeletons/project/application/commands/script.erb +11 -7
- data/skeletons/project/application/options.rb +0 -5
- data/skeletons/project/config/general.rb +17 -0
- metadata +35 -3
data/docs/sitemap.xml
CHANGED
@@ -2,92 +2,97 @@
|
|
2
2
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
3
3
|
<url>
|
4
4
|
<loc>/</loc>
|
5
|
-
<lastmod>2018-08-
|
5
|
+
<lastmod>2018-08-08</lastmod>
|
6
6
|
<changefreq>daily</changefreq>
|
7
7
|
</url>
|
8
8
|
<url>
|
9
9
|
<loc>/imported/quick_reference/</loc>
|
10
|
-
<lastmod>2018-08-
|
10
|
+
<lastmod>2018-08-08</lastmod>
|
11
11
|
<changefreq>daily</changefreq>
|
12
12
|
</url>
|
13
13
|
<url>
|
14
14
|
<loc>/tutorial/10-getting_started/</loc>
|
15
|
-
<lastmod>2018-08-
|
15
|
+
<lastmod>2018-08-08</lastmod>
|
16
16
|
<changefreq>daily</changefreq>
|
17
17
|
</url>
|
18
18
|
<url>
|
19
19
|
<loc>/tutorial/20-project_layout/</loc>
|
20
|
-
<lastmod>2018-08-
|
20
|
+
<lastmod>2018-08-08</lastmod>
|
21
21
|
<changefreq>daily</changefreq>
|
22
22
|
</url>
|
23
23
|
<url>
|
24
24
|
<loc>/tutorial/30-your_first_command/</loc>
|
25
|
-
<lastmod>2018-08-
|
25
|
+
<lastmod>2018-08-08</lastmod>
|
26
26
|
<changefreq>daily</changefreq>
|
27
27
|
</url>
|
28
28
|
<url>
|
29
29
|
<loc>/tutorial/40-options_parameters_and_arguments/</loc>
|
30
|
-
<lastmod>2018-08-
|
30
|
+
<lastmod>2018-08-08</lastmod>
|
31
31
|
<changefreq>daily</changefreq>
|
32
32
|
</url>
|
33
33
|
<url>
|
34
34
|
<loc>/tutorial/50-publishing/</loc>
|
35
|
-
<lastmod>2018-08-
|
35
|
+
<lastmod>2018-08-08</lastmod>
|
36
36
|
<changefreq>daily</changefreq>
|
37
37
|
</url>
|
38
38
|
<url>
|
39
39
|
<loc>/advanced/command_types/</loc>
|
40
|
-
<lastmod>2018-08-
|
40
|
+
<lastmod>2018-08-08</lastmod>
|
41
41
|
<changefreq>daily</changefreq>
|
42
42
|
</url>
|
43
43
|
<url>
|
44
44
|
<loc>/advanced/user_config_files/</loc>
|
45
|
-
<lastmod>2018-08-
|
45
|
+
<lastmod>2018-08-08</lastmod>
|
46
46
|
<changefreq>daily</changefreq>
|
47
47
|
</url>
|
48
48
|
<url>
|
49
49
|
<loc>/advanced/hooks/</loc>
|
50
|
-
<lastmod>2018-08-
|
50
|
+
<lastmod>2018-08-08</lastmod>
|
51
51
|
<changefreq>daily</changefreq>
|
52
52
|
</url>
|
53
53
|
<url>
|
54
54
|
<loc>/advanced/automatic_updates/</loc>
|
55
|
-
<lastmod>2018-08-
|
55
|
+
<lastmod>2018-08-08</lastmod>
|
56
56
|
<changefreq>daily</changefreq>
|
57
57
|
</url>
|
58
58
|
<url>
|
59
59
|
<loc>/advanced/state_storage/</loc>
|
60
|
-
<lastmod>2018-08-
|
60
|
+
<lastmod>2018-08-08</lastmod>
|
61
61
|
<changefreq>daily</changefreq>
|
62
62
|
</url>
|
63
63
|
<url>
|
64
64
|
<loc>/advanced/distributed_state_locking/</loc>
|
65
|
-
<lastmod>2018-08-
|
65
|
+
<lastmod>2018-08-08</lastmod>
|
66
|
+
<changefreq>daily</changefreq>
|
67
|
+
</url>
|
68
|
+
<url>
|
69
|
+
<loc>/advanced/remote_execution/</loc>
|
70
|
+
<lastmod>2018-08-08</lastmod>
|
66
71
|
<changefreq>daily</changefreq>
|
67
72
|
</url>
|
68
73
|
<url>
|
69
74
|
<loc>/development/contributing/</loc>
|
70
|
-
<lastmod>2018-08-
|
75
|
+
<lastmod>2018-08-08</lastmod>
|
71
76
|
<changefreq>daily</changefreq>
|
72
77
|
</url>
|
73
78
|
<url>
|
74
79
|
<loc>/development/license/</loc>
|
75
|
-
<lastmod>2018-08-
|
80
|
+
<lastmod>2018-08-08</lastmod>
|
76
81
|
<changefreq>daily</changefreq>
|
77
82
|
</url>
|
78
83
|
<url>
|
79
84
|
<loc>/development/code_of_conduct/</loc>
|
80
|
-
<lastmod>2018-08-
|
85
|
+
<lastmod>2018-08-08</lastmod>
|
81
86
|
<changefreq>daily</changefreq>
|
82
87
|
</url>
|
83
88
|
<url>
|
84
89
|
<loc>/imported/changelog/</loc>
|
85
|
-
<lastmod>2018-08-
|
90
|
+
<lastmod>2018-08-08</lastmod>
|
86
91
|
<changefreq>daily</changefreq>
|
87
92
|
</url>
|
88
93
|
<url>
|
89
94
|
<loc>/whoami/</loc>
|
90
|
-
<lastmod>2018-08-
|
95
|
+
<lastmod>2018-08-08</lastmod>
|
91
96
|
<changefreq>daily</changefreq>
|
92
97
|
</url>
|
93
98
|
</urlset>
|
@@ -549,6 +549,18 @@
|
|
549
549
|
</li>
|
550
550
|
|
551
551
|
|
552
|
+
|
553
|
+
|
554
|
+
|
555
|
+
|
556
|
+
|
557
|
+
<li class="md-nav__item">
|
558
|
+
<a href="../../advanced/remote_execution/" title="Remote Execution" class="md-nav__link">
|
559
|
+
Remote Execution
|
560
|
+
</a>
|
561
|
+
</li>
|
562
|
+
|
563
|
+
|
552
564
|
</ul>
|
553
565
|
</nav>
|
554
566
|
</li>
|
@@ -583,6 +583,18 @@
|
|
583
583
|
</li>
|
584
584
|
|
585
585
|
|
586
|
+
|
587
|
+
|
588
|
+
|
589
|
+
|
590
|
+
|
591
|
+
<li class="md-nav__item">
|
592
|
+
<a href="../../advanced/remote_execution/" title="Remote Execution" class="md-nav__link">
|
593
|
+
Remote Execution
|
594
|
+
</a>
|
595
|
+
</li>
|
596
|
+
|
597
|
+
|
586
598
|
</ul>
|
587
599
|
</nav>
|
588
600
|
</li>
|
@@ -556,6 +556,18 @@
|
|
556
556
|
</li>
|
557
557
|
|
558
558
|
|
559
|
+
|
560
|
+
|
561
|
+
|
562
|
+
|
563
|
+
|
564
|
+
<li class="md-nav__item">
|
565
|
+
<a href="../../advanced/remote_execution/" title="Remote Execution" class="md-nav__link">
|
566
|
+
Remote Execution
|
567
|
+
</a>
|
568
|
+
</li>
|
569
|
+
|
570
|
+
|
559
571
|
</ul>
|
560
572
|
</nav>
|
561
573
|
</li>
|
@@ -570,6 +570,18 @@
|
|
570
570
|
</li>
|
571
571
|
|
572
572
|
|
573
|
+
|
574
|
+
|
575
|
+
|
576
|
+
|
577
|
+
|
578
|
+
<li class="md-nav__item">
|
579
|
+
<a href="../../advanced/remote_execution/" title="Remote Execution" class="md-nav__link">
|
580
|
+
Remote Execution
|
581
|
+
</a>
|
582
|
+
</li>
|
583
|
+
|
584
|
+
|
573
585
|
</ul>
|
574
586
|
</nav>
|
575
587
|
</li>
|
@@ -563,6 +563,18 @@
|
|
563
563
|
</li>
|
564
564
|
|
565
565
|
|
566
|
+
|
567
|
+
|
568
|
+
|
569
|
+
|
570
|
+
|
571
|
+
<li class="md-nav__item">
|
572
|
+
<a href="../../advanced/remote_execution/" title="Remote Execution" class="md-nav__link">
|
573
|
+
Remote Execution
|
574
|
+
</a>
|
575
|
+
</li>
|
576
|
+
|
577
|
+
|
566
578
|
</ul>
|
567
579
|
</nav>
|
568
580
|
</li>
|
data/docs/whoami/index.html
CHANGED
@@ -493,6 +493,18 @@
|
|
493
493
|
</li>
|
494
494
|
|
495
495
|
|
496
|
+
|
497
|
+
|
498
|
+
|
499
|
+
|
500
|
+
|
501
|
+
<li class="md-nav__item">
|
502
|
+
<a href="../advanced/remote_execution/" title="Remote Execution" class="md-nav__link">
|
503
|
+
Remote Execution
|
504
|
+
</a>
|
505
|
+
</li>
|
506
|
+
|
507
|
+
|
496
508
|
</ul>
|
497
509
|
</nav>
|
498
510
|
</li>
|
@@ -73,7 +73,7 @@ You can tell a command is a script by the line:
|
|
73
73
|
|
74
74
|
```ruby
|
75
75
|
class List < Rbcli::Command
|
76
|
-
|
76
|
+
script
|
77
77
|
end
|
78
78
|
```
|
79
79
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Remote Execution
|
2
|
+
|
3
|
+
RBCli can be configured to execute commands on a remote machine via SSH instead of locally.
|
4
|
+
|
5
|
+
Currently, only `script` and `extern` commands are supported.
|
6
|
+
|
7
|
+
## Configuration
|
8
|
+
|
9
|
+
To allow remote execution, go to `config/general.rb` and change the following line to `true`:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
remote_execution permitted: false
|
13
|
+
```
|
14
|
+
|
15
|
+
Then, for each command that you would like to enable remote execution for, add the following directive to the command class declaration:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
remote_permitted
|
19
|
+
```
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
Your end users can now execute a command remotely by specifying the connection string and credentials on the command line as follows:
|
24
|
+
|
25
|
+
```bash
|
26
|
+
mytool --remote-exec [user@]host[:port] --identity (/path/to/private/ssh/key or password) <command>
|
27
|
+
# or
|
28
|
+
mytool -r [user@]host[:port] -i (/path/to/private/ssh/key or password) <command>
|
29
|
+
```
|
30
|
+
|
31
|
+
Some valid examples are:
|
32
|
+
|
33
|
+
```bash
|
34
|
+
mytool -r example.com -i myPassword showuserfiles -u MyUser
|
35
|
+
mytool -r root@server.local -i ~/.ssh/id_rsa update
|
36
|
+
mytool -r admin@172.16.0.1:2202 -i ~/.ssh/mykey cleartemp
|
37
|
+
```
|
38
|
+
|
39
|
+
If the end user is unsure of which commands can or can not be executed remotely, they can check by running `mytool -h`. Commands that have remote execution enabled will have an asterisk (*) by their name:
|
40
|
+
|
41
|
+
```bash
|
42
|
+
$ mytool -h
|
43
|
+
A simple command line tool.
|
44
|
+
For more information on individual commands, run `mytool <command> -h`.
|
45
|
+
|
46
|
+
Usage:
|
47
|
+
foo [options] command [parameters]
|
48
|
+
|
49
|
+
Commands:
|
50
|
+
bar TODO: Description goes here
|
51
|
+
* baz TODO: Description goes here
|
52
|
+
|
53
|
+
...
|
54
|
+
```
|
55
|
+
|
56
|
+
In this example, the command `baz` is available for remote execution
|
@@ -45,5 +45,5 @@ To release a new version, follow theese steps:
|
|
45
45
|
1. Update the version number in `version.rb`
|
46
46
|
2. Run `bundle exec rake install`, which will update `gemfile.lock` with the correct version and all dependency changes
|
47
47
|
3. Run `docs-src/makesite.sh`, which re-compiles the documentation and pulls in the changelog and quick reference automatically
|
48
|
-
4. Commit the above changes to master, but do not push
|
48
|
+
4. Commit the above changes to master with a commit message of "vX.X.X" (where X.X.X is the version number), but do not push
|
49
49
|
5. Run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
@@ -1,9 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.2.1 (Aug 8, 2018)
|
4
|
+
|
5
|
+
### Features
|
6
|
+
|
7
|
+
* Remote Execution added for Script and External commands
|
8
|
+
|
9
|
+
### Bugfixes
|
10
|
+
|
11
|
+
* Fixed a bug that caused RBCli to crash if a direct path mode script's environment variables were declared as symbols
|
12
|
+
|
13
|
+
|
3
14
|
## 0.2.0 (Aug 5, 2018)
|
4
15
|
|
5
16
|
### Features
|
6
17
|
|
18
|
+
* CLI tool Autoupdate Enabled; when an upgrade to RBCli is detected, the RBCli CLI tool will notify the developer.
|
7
19
|
* Official documentation created and hosted with Github Pages
|
8
20
|
* RBCli released under GPLv3
|
9
21
|
* Copyright/License notice displayed via RBCli tool with `rbcli license` in accordance with GPLv3 guidelines
|
@@ -17,7 +29,6 @@
|
|
17
29
|
### Improvements
|
18
30
|
|
19
31
|
* A quick reference guide can now be found in README.md
|
20
|
-
* CLI tool Autoupdate Enabled; when an upgrade to RBCli is detected, the RBCli CLI tool will notify the developer.
|
21
32
|
* Autoupdate feature now allows supplying a custom message
|
22
33
|
* Direct Path Mode for External Commands now
|
23
34
|
* Added support for a `lib` folder in projects, as a place for custom code, which is automatically added to `$LOAD_PATH` for developers
|
@@ -132,13 +132,34 @@ RBCli can automatically notify users when an update is available. Two sources ar
|
|
132
132
|
You can configure automatic updates in `config/autoupdate.rb` in your project.
|
133
133
|
|
134
134
|
|
135
|
+
## Remote Execution
|
136
|
+
|
137
|
+
RBCli can automatically execute script and extern commands on remote machines via SSH. Enable this feature in `config/general.rb` by changing the following line to `true`:
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
remote_execution permitted: false
|
141
|
+
```
|
142
|
+
|
143
|
+
Then for each command you want to enable remote execution for, add the following directive:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
remote_permitted
|
147
|
+
```
|
148
|
+
|
149
|
+
Users can then execute commands remotly by specifying the connection string and credentials on the command line:
|
150
|
+
|
151
|
+
```bash
|
152
|
+
mytool --remote-exec [user@]host[:port] --identity (/path/to/private/ssh/key or password) <command> ...
|
153
|
+
```
|
154
|
+
|
155
|
+
|
135
156
|
## Development and Contributing
|
136
157
|
|
137
158
|
For more information about development and contributing, please see the [Official Development Documentation][documentation_development]
|
138
159
|
|
139
160
|
## License
|
140
161
|
|
141
|
-
The gem is available as open source under the terms of the [GPLv3]
|
162
|
+
The gem is available as open source under the terms of the [GPLv3][license_text].
|
142
163
|
|
143
164
|
## Full Documentation
|
144
165
|
|
@@ -148,3 +169,4 @@ The gem is available as open source under the terms of the [GPLv3](https://githu
|
|
148
169
|
[documentation_home]: https://akhoury6.github.com/rbcli
|
149
170
|
[documentation_development]: https://akhoury6.github.com/rbcli/development/contributing/
|
150
171
|
[license_text]: https://github.com/akhoury6/rbcli/blob/master/LICENSE.txt
|
172
|
+
[changelog]: https://github.com/akhoury6/rbcli/blob/master/CHANGELOG.md
|
data/docs-src/docs/index.md
CHANGED
@@ -30,6 +30,8 @@ Some of its key features include:
|
|
30
30
|
|
31
31
|
* __Project Structure and Generators__: Create a well-defined project directory structure which organizes your code and allows you to package and distribute your application as a Gem. Generators can also help speed up the process of creating new commands, scripts, and hooks!
|
32
32
|
|
33
|
+
* __Remote Execution__: Automatically execute commands on remote machines via SSH
|
34
|
+
|
33
35
|
|
34
36
|
If you're just getting started with RBCli, take a look at the [Tutorial][tutorial]. Or take a look at the [Advanced] menu above to look through RBCli's additional featureset.
|
35
37
|
|
data/docs-src/mkdocs.yml
CHANGED
@@ -21,6 +21,7 @@ pages:
|
|
21
21
|
- Automatic Updates: advanced/automatic_updates.md
|
22
22
|
- State Storage: advanced/state_storage.md
|
23
23
|
- Distributed State Locking: advanced/distributed_state_locking.md
|
24
|
+
- Remote Execution: advanced/remote_execution.md
|
24
25
|
- Development:
|
25
26
|
- Contribution Guide: development/contributing.md
|
26
27
|
- License Info: development/license.md
|
data/exe/rbcli
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# You should have received a copy of the GNU General Public License #
|
17
17
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
18
18
|
# #
|
19
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
19
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
20
20
|
##################################################################################
|
21
21
|
|
22
22
|
require "#{File.dirname(__FILE__)}/../lib/rbcli.rb"
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
module Rbcli::Configurate
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
require 'net/http'
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
require 'octokit'
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
####
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
|
@@ -32,7 +32,8 @@ module Rbcli::Configurate
|
|
32
32
|
pre_hook: nil,
|
33
33
|
post_hook: nil,
|
34
34
|
first_run: nil,
|
35
|
-
halt_after_first_run: false
|
35
|
+
halt_after_first_run: false,
|
36
|
+
remote_execution: false
|
36
37
|
}
|
37
38
|
|
38
39
|
def self.me &block
|
@@ -113,6 +114,10 @@ module Rbcli::Configurate
|
|
113
114
|
@data[:first_run] = block
|
114
115
|
end
|
115
116
|
|
117
|
+
def self.remote_execution permitted: true
|
118
|
+
@data[:remote_execution] = permitted
|
119
|
+
end
|
120
|
+
|
116
121
|
##
|
117
122
|
# Data Retrieval
|
118
123
|
##
|
data/lib/rbcli/engine/command.rb
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
|
@@ -72,6 +72,14 @@ class Rbcli::Command
|
|
72
72
|
Rbcli::Config::add_default *params
|
73
73
|
end
|
74
74
|
|
75
|
+
def self.remote_permitted
|
76
|
+
@remote_permitted = true
|
77
|
+
end
|
78
|
+
|
79
|
+
def remote_permitted?
|
80
|
+
self.class.instance_variable_get :@remote_permitted
|
81
|
+
end
|
82
|
+
|
75
83
|
##
|
76
84
|
# END Interface Functions
|
77
85
|
##
|
@@ -85,8 +93,16 @@ class Rbcli::Command
|
|
85
93
|
global_opts = cliopts
|
86
94
|
config = Rbcli::config
|
87
95
|
|
88
|
-
raise Exception.new("Command #{cmd}
|
96
|
+
raise Exception.new("Command #{cmd} can only have one of `action`, `script`, or `extern` defined.") if (@commands[cmd].extern or @commands[cmd].script) and @commands[cmd].action
|
97
|
+
|
98
|
+
if cliopts[:remote_exec]
|
99
|
+
Rbcli::RemoteExec.new(@commands[cmd], cliopts[:remote_exec], cliopts[:identity], params, args, global_opts, config).run
|
100
|
+
#remote_exec @commands[cmd], params, args, global_opts, config
|
101
|
+
return
|
102
|
+
end
|
103
|
+
|
89
104
|
@commands[cmd].extern.execute params, args, global_opts, config unless @commands[cmd].extern.nil?
|
105
|
+
@commands[cmd].script.execute params, args, global_opts, config unless @commands[cmd].script.nil?
|
90
106
|
@commands[cmd].action.call params, args, global_opts, config unless @commands[cmd].action.nil?
|
91
107
|
end
|
92
108
|
|
@@ -97,7 +113,13 @@ class Rbcli::Command
|
|
97
113
|
#descmap = @commands.map { |name, klass| [name, klass.description] }.to_h
|
98
114
|
@commands.map do |name, cmdobj|
|
99
115
|
desc = ''
|
100
|
-
|
116
|
+
if Rbcli.configuration[:remote_execution] and cmdobj.remote_permitted?
|
117
|
+
indent_size -= 3
|
118
|
+
indent_size.times { desc << ' ' }
|
119
|
+
desc << '* '
|
120
|
+
else
|
121
|
+
indent_size.times { desc << ' ' }
|
122
|
+
end
|
101
123
|
desc << name.ljust(justification)
|
102
124
|
desc << cmdobj.description
|
103
125
|
end.join("\n")
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
|
data/lib/rbcli/engine/parser.rb
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
|
@@ -48,7 +48,11 @@ Commands:
|
|
48
48
|
opts[:permitted] = nil unless opts.key? :permitted
|
49
49
|
opt name.to_sym, opts[:description], type: opts[:type], default: opts[:default], required: opts[:required], permitted: opts[:permitted], short: opts[:short]
|
50
50
|
end
|
51
|
-
|
51
|
+
if data[:remote_execution]
|
52
|
+
opt :remote_exec, 'Remote user@host:port to execute command on', type: :string, default: nil
|
53
|
+
opt :identity, 'Identity for remote execution', type: :string, default: nil
|
54
|
+
end
|
55
|
+
opt :json_output, 'Output result in machine-friendly JSON format', short: :none, type: :boolean, default: false if data[:allow_json]
|
52
56
|
opt :config_file, 'Specify a config file manually', short: :none, type: :string, default: data[:config_userfile] unless data[:config_userfile].nil?
|
53
57
|
opt :generate_config, 'Generate a new config file', short: :none unless data[:config_userfile].nil? #defaults to false
|
54
58
|
stop_on Rbcli::Command.commands.keys
|
@@ -67,6 +71,10 @@ Commands:
|
|
67
71
|
elsif Rbcli::Command.commands.key? @cmd[0]
|
68
72
|
@cmd << Rbcli::Command.commands[@cmd[0]].parseopts
|
69
73
|
|
74
|
+
if (@cliopts[:remote_exec_given] and not @cliopts[:identity_given]) or (not @cliopts[:remote_exec_given] and @cliopts[:identity_given])
|
75
|
+
Trollop::die 'Must use `--remote-exec` and `--identity` together.'
|
76
|
+
end
|
77
|
+
|
70
78
|
Rbcli.configuration[:pre_hook].call @cliopts unless Rbcli.configuration[:pre_hook].nil?
|
71
79
|
Rbcli::Command.runcmd(@cmd.shift, @cmd[0], @cliopts)
|
72
80
|
Rbcli.configuration[:post_hook].call @cliopts unless Rbcli.configuration[:post_hook].nil?
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# You should have received a copy of the GNU General Public License #
|
16
16
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
17
|
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us
|
18
|
+
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
19
|
##################################################################################
|
20
20
|
|
21
21
|
|