rbcli 0.2.0 → 0.2.1
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/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
|
|