rbcli 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -1
  3. data/Gemfile.lock +7 -2
  4. data/README.md +43 -3
  5. data/bin/console +1 -1
  6. data/bin/setup +1 -1
  7. data/docs/404.html +12 -0
  8. data/docs/advanced/automatic_updates/index.html +12 -0
  9. data/docs/advanced/command_types/index.html +13 -1
  10. data/docs/advanced/distributed_state_locking/index.html +14 -2
  11. data/docs/advanced/hooks/index.html +12 -0
  12. data/docs/advanced/remote_execution/index.html +822 -0
  13. data/docs/advanced/state_storage/index.html +12 -0
  14. data/docs/advanced/user_config_files/index.html +12 -0
  15. data/docs/development/code_of_conduct/index.html +12 -0
  16. data/docs/development/contributing/index.html +15 -3
  17. data/docs/development/license/index.html +12 -0
  18. data/docs/imported/changelog/index.html +82 -7
  19. data/docs/imported/quick_reference/index.html +40 -1
  20. data/docs/index.html +15 -0
  21. data/docs/search/search_index.json +52 -12
  22. data/docs/sitemap.xml +23 -18
  23. data/docs/tutorial/10-getting_started/index.html +12 -0
  24. data/docs/tutorial/20-project_layout/index.html +12 -0
  25. data/docs/tutorial/30-your_first_command/index.html +12 -0
  26. data/docs/tutorial/40-options_parameters_and_arguments/index.html +12 -0
  27. data/docs/tutorial/50-publishing/index.html +12 -0
  28. data/docs/whoami/index.html +12 -0
  29. data/docs-src/docs/advanced/command_types.md +1 -1
  30. data/docs-src/docs/advanced/remote_execution.md +56 -0
  31. data/docs-src/docs/development/contributing.md +1 -1
  32. data/docs-src/docs/imported/changelog.md +12 -1
  33. data/docs-src/docs/imported/quick_reference.md +23 -1
  34. data/docs-src/docs/index.md +2 -0
  35. data/docs-src/mkdocs.yml +1 -0
  36. data/exe/rbcli +1 -1
  37. data/lib/rbcli/autoupdate/autoupdate.rb +1 -1
  38. data/lib/rbcli/autoupdate/gem_updater.rb +1 -1
  39. data/lib/rbcli/autoupdate/github_updater.rb +1 -1
  40. data/lib/rbcli/configuration/config.rb +1 -1
  41. data/lib/rbcli/configuration/configurate.rb +7 -2
  42. data/lib/rbcli/engine/command.rb +25 -3
  43. data/lib/rbcli/engine/load_project.rb +1 -1
  44. data/lib/rbcli/engine/parser.rb +10 -2
  45. data/lib/rbcli/logging/logging.rb +1 -1
  46. data/lib/rbcli/remote_exec/remote_exec.rb +187 -0
  47. data/lib/rbcli/scriptwrapping/scriptwrapper.rb +25 -5
  48. data/lib/rbcli/stateful_systems/configuratestorage.rb +1 -1
  49. data/lib/rbcli/stateful_systems/state_storage.rb +1 -1
  50. data/lib/rbcli/stateful_systems/storagetypes/localstate.rb +1 -1
  51. data/lib/rbcli/stateful_systems/storagetypes/remote_state_connectors/dynamodb.rb +1 -1
  52. data/lib/rbcli/stateful_systems/storagetypes/remotestate_dynamodb.rb +1 -1
  53. data/lib/rbcli/util/hash_deep_symbolize.rb +1 -1
  54. data/lib/rbcli/util/string_colorize.rb +1 -1
  55. data/lib/rbcli/version.rb +2 -2
  56. data/lib/rbcli-tool/generators.rb +1 -1
  57. data/lib/rbcli-tool/mdless_fix.rb +1 -1
  58. data/lib/rbcli-tool/project.rb +1 -1
  59. data/lib/rbcli-tool/util.rb +1 -1
  60. data/lib/rbcli-tool.rb +1 -1
  61. data/lib/rbcli.rb +5 -1
  62. data/lib-sh/lib-rbcli.sh +18 -9
  63. data/rbcli.gemspec +5 -2
  64. data/skeletons/project/application/commands/command.erb +1 -1
  65. data/skeletons/project/application/commands/script.erb +11 -7
  66. data/skeletons/project/application/options.rb +0 -5
  67. data/skeletons/project/config/general.rb +17 -0
  68. metadata +35 -3
@@ -0,0 +1,187 @@
1
+ ##################################################################################
2
+ # RBCli -- A framework for developing command line applications in Ruby #
3
+ # Copyright (C) 2018 Andrew Khoury #
4
+ # #
5
+ # This program is free software: you can redistribute it and/or modify #
6
+ # it under the terms of the GNU General Public License as published by #
7
+ # the Free Software Foundation, either version 3 of the License, or #
8
+ # (at your option) any later version. #
9
+ # #
10
+ # This program is distributed in the hope that it will be useful, #
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
13
+ # GNU General Public License for more details. #
14
+ # #
15
+ # You should have received a copy of the GNU General Public License #
16
+ # along with this program. If not, see <https://www.gnu.org/licenses/>. #
17
+ # #
18
+ # For questions regarding licensing, please contact andrew@blacknex.us #
19
+ ##################################################################################
20
+
21
+ require 'net/ssh'
22
+ require 'net/scp'
23
+ require 'json'
24
+
25
+ class Rbcli::RemoteExec
26
+
27
+ def initialize cmd, connection_string, remote_identity, params, args, global_opts, config
28
+ @cmd = cmd
29
+ @params = params.to_json.gsub("\"", "\\\"")
30
+ @args = args.to_json.gsub("\"", "\\\"")
31
+ @global_opts = global_opts.to_json.gsub("\"", "\\\"")
32
+ @config = config.to_json.gsub("\"", "\\\"")
33
+
34
+ @remote_host = parse_connection connection_string, remote_identity
35
+
36
+ ## SCRIPT COMMANDS
37
+ if !@cmd.script.nil?
38
+ @execution_block = lambda do |ssh|
39
+ # Set paths
40
+ tmpdir = ssh.exec! 'mktemp -d /tmp/rbcli.XXXXXXXXXXXX'
41
+ remote_script_path = "#{tmpdir.strip}/script.sh"
42
+ local_rbclilib_path = "#{File.dirname(__FILE__)}/../../../lib-sh/lib-rbcli.sh"
43
+ remote_rbclilib_path = "#{tmpdir.strip}/lib-rbcli.sh"
44
+
45
+ # Upload scripts
46
+ ssh.scp.upload @cmd.script.path, remote_script_path
47
+ ssh.scp.upload local_rbclilib_path, remote_rbclilib_path
48
+ ssh.exec! "chmod 0700 #{remote_script_path}"
49
+
50
+ # We need to test for JQ -- if it is not present we ask the user for the sudo password
51
+ jq_found = ssh.exec!('which jq').exitstatus == 0
52
+ if jq_found
53
+ sudopw = nil
54
+ else
55
+ print "JQ not found on remote system. Please enter sudo password to install it, or leave blank if no password needed: "
56
+ sudopw = gets.chomp
57
+ end
58
+
59
+ # Since we need to sudo, we need to send the sudo password when prompted
60
+ #result = ''
61
+ channel = ssh.open_channel do |channel, success|
62
+ channel.on_data do |channel, data|
63
+ print data.to_s
64
+ if !jq_found and data =~ /^\[sudo\] password for /
65
+ channel.send_data "#{sudopw}\n"
66
+ # else
67
+ # result += data.to_s
68
+ end
69
+ end
70
+ channel.request_pty
71
+ channel.exec "__RBCLI_PARAMS=\"#{@params}\" __RBCLI_ARGS=\"#{@args}\" __RBCLI_GLOBAL=\"#{@global_opts}\" __RBCLI_CONFIG=\"#{@config}\" source #{remote_script_path}"
72
+ channel.wait
73
+ end
74
+ channel.wait
75
+ #puts result
76
+
77
+ # Cleanup
78
+ ssh.exec! "rm -rf #{tmpdir}"
79
+ end
80
+
81
+ ## EXTERN COMMANDS
82
+ elsif !@cmd.extern.nil?
83
+ @execution_block = lambda do |ssh|
84
+ channel = ssh.open_channel do |channel, success|
85
+ channel.on_data do |channel, data|
86
+ print data.to_s
87
+ end
88
+ channel.request_pty
89
+ channel.exec "__RBCLI_PARAMS=\"#{@params}\" __RBCLI_ARGS=\"#{@args}\" __RBCLI_GLOBAL=\"#{@global_opts}\" __RBCLI_CONFIG=\"#{@config}\" __RBCLI_MYVARS=\"#{@myvars}\" #{@cmd.extern.path}"
90
+ channel.wait
91
+ end
92
+ channel.wait
93
+ end
94
+
95
+ ## STANDARD COMMANDS
96
+ else
97
+ @execution_block = lambda do |ssh|
98
+ raise Exception.new "Warning: Remote SSH Execution does not yetexist for Standard Ruby commands. Please use a Script or External command to use this feature."
99
+ end
100
+ end
101
+
102
+ end
103
+
104
+ def run
105
+
106
+ case @remote_host[:credstype]
107
+ when :keyfile
108
+ Net::SSH.start(@remote_host[:hostname], @remote_host[:username], port: @remote_host[:port], keys: @remote_host[:creds], keys_only: true, &@execution_block)
109
+ when :keytext
110
+ Net::SSH.start(@remote_host[:hostname], @remote_host[:username], port: @remote_host[:port], key_data: @remote_host[:creds], keys_only: true, &@execution_block)
111
+ when :password
112
+ Net::SSH.start(@remote_host[:hostname], @remote_host[:username], port: @remote_host[:port], password: @remote_host[:creds], keys_only: false, &@execution_block)
113
+ else
114
+ raise Exception.new "Invalid SSH Connection: No credentials specified for host #{@remote_host[:hostname]}"
115
+ end
116
+
117
+ end
118
+
119
+ private
120
+
121
+ def parse_connection connstring, ident
122
+ ## We want to split the connection string up
123
+ _, _, user, host, _, port = connstring.match(/^(([^:@\/]+)@)?([^:@\/]+)?(:([\d]+))?/).to_a
124
+ exiting = false
125
+ if host.nil?
126
+ puts "Please enter a valid hostname or IP address for remote execution."
127
+ exiting = true
128
+ end
129
+ begin
130
+ port ||= 22
131
+ port = port.to_i
132
+ rescue
133
+ puts "Please enter a valid port number"
134
+ exiting = true
135
+ end
136
+ exit 1 if exiting
137
+
138
+ if File.exist? File.expand_path(ident)
139
+ credstype = :keyfile
140
+ else
141
+ credstype = :password
142
+ end
143
+
144
+ {
145
+ hostname: host,
146
+ port: port,
147
+ username: user,
148
+ creds: ident,
149
+ credstype: credstype
150
+ }
151
+ end
152
+
153
+ end
154
+
155
+
156
+ # class Rbcli::Command
157
+ #
158
+ # def self.remote_exec cmd, params, args, global_opts, config
159
+ # executor = Rbcli::RemoteExec.new cmd, cmd.remote_host, params, args, global_opts, config
160
+ # executor.run
161
+ # end
162
+ #
163
+ # def self.remote_host hostname, port: 22, username: nil, password: nil, keytext: nil, keyfile: nil
164
+ # @remote_host = {
165
+ # hostname: hostname,
166
+ # port: port,
167
+ # username: username,
168
+ # creds: keyfile || keytext || password,
169
+ # credstype: (keyfile.nil?) ? ((keytext.nil?) ? ((password.nil?) ? nil : :password) : :keytext) : :keyfile
170
+ # }
171
+ # end
172
+ #
173
+ # def remote_host
174
+ # self.class.instance_variable_get :@remote_host
175
+ # end
176
+ #
177
+ # ##
178
+ # # Run command on a remote machine
179
+ # ##
180
+ # def self.remote_cmd cmd, params, args, global_opts, config
181
+ # # We do something different depending on if it is a Ruby command, Script, or Extern
182
+ # unless @commands[cmd].script.nil?
183
+ # script = @commands[cmd].script
184
+ #
185
+ # end
186
+ # end
187
+ # end
@@ -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
  class Rbcli::Command
@@ -32,16 +32,32 @@ class Rbcli::Command
32
32
  @extern ||= nil
33
33
  self.class.instance_variable_get :@extern
34
34
  end
35
+
36
+ def self.script path: nil, envvars: nil
37
+ if path == :default or path.nil?
38
+ callerscript = caller_locations.first.absolute_path
39
+ path = "#{File.dirname(callerscript)}/scripts/#{File.basename(callerscript, ".*")}.sh"
40
+ end
41
+ @script = Rbcli::Scriptwrapper.new path, envvars, nil, true
42
+ end
43
+
44
+ def script
45
+ @script ||= nil
46
+ self.class.instance_variable_get :@script
47
+ end
35
48
  end
36
49
 
37
50
  require 'json'
38
51
  class Rbcli::Scriptwrapper
39
- def initialize path, envvars = nil, block = nil
52
+ def initialize path, envvars = nil, block = nil, script = false
40
53
  @path = path
41
54
  @envvars = envvars || {}
42
55
  @block = block
56
+ @script = script
43
57
  end
44
58
 
59
+ attr_reader :path
60
+
45
61
  def execute params, args, global_opts, config
46
62
  ####
47
63
  #### The following code will flatten one level of the hashes into separate variables
@@ -60,7 +76,7 @@ class Rbcli::Scriptwrapper
60
76
  # end
61
77
  # env_hash.merge!(@envvars.deep_stringify!) unless @envvars.nil?
62
78
 
63
- if @block
79
+ if @block || @script
64
80
  env_hash = {
65
81
  '__RBCLI_PARAMS' => params.to_json,
66
82
  '__RBCLI_ARGS' => args.to_json,
@@ -68,10 +84,14 @@ class Rbcli::Scriptwrapper
68
84
  '__RBCLI_CONFIG' => config.to_json,
69
85
  '__RBCLI_MYVARS' => @envvars.to_json
70
86
  }
71
- path = @block.call params, args, global_opts, config
87
+ if @block
88
+ path = @block.call params, args, global_opts, config
89
+ else
90
+ path = @path
91
+ end
72
92
  system(env_hash, path)
73
93
  else
74
- system(@envvars, @path)
94
+ system(@envvars.collect{|k,v| [k.to_s, v]}.to_h, @path)
75
95
  end
76
96
 
77
97
  # IO.popen(env_hash, path) do |io|
@@ -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 'fileutils'
@@ -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 'fileutils'
@@ -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 'aws-sdk-dynamodb'
@@ -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
  ## Configuration Interface
@@ -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
  class String
data/lib/rbcli/version.rb CHANGED
@@ -15,9 +15,9 @@
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
22
- VERSION = "0.2.0"
22
+ VERSION = "0.2.1"
23
23
  end
@@ -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 RBCliTool
@@ -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 'mdless'
@@ -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 RBCliTool
@@ -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 'erb'
data/lib/rbcli-tool.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
  ###########
data/lib/rbcli.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
  ###########
@@ -60,6 +60,10 @@ require 'rbcli/autoupdate/autoupdate'
60
60
  require 'rbcli/scriptwrapping/scriptwrapper'
61
61
  # END SCRIPT WRAPPER
62
62
 
63
+ # REMOTE EXEC
64
+ require 'rbcli/remote_exec/remote_exec'
65
+ # END REMOTE EXEC
66
+
63
67
  # CORE
64
68
  require 'rbcli/configuration/configurate'
65
69
  require 'rbcli/engine/load_project'
data/lib-sh/lib-rbcli.sh 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
  ## Log message
@@ -51,14 +51,23 @@ function detect_os {
51
51
  ## Install JQ
52
52
  function install_jq {
53
53
  case "$(detect_os)}" in
54
- Linux)
55
- _tmpdir=$(mktemp -d)
56
- _pwd=$(pwd)
57
- cd $_tmpdir
58
- curl -sOL "https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64"
59
- mv jq-linux64 /usr/bin/jq
60
- cd $_pwd
61
- rm -rf $_tmpdir
54
+ Linux*)
55
+ _flavor=$(cat /etc/*release | grep "DISTRIB_ID" | cut -d'=' -f2)
56
+ case "${_flavor}" in
57
+ Ubuntu*)
58
+ sudo apt-get install jq -y
59
+ ;;
60
+ *)
61
+ _tmpdir=$(mktemp -d)
62
+ _pwd=$(pwd)
63
+ cd $_tmpdir
64
+ curl -sOL "https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64"
65
+ sudo mv jq-linux64 /usr/bin/jq
66
+ sudo chmod +x /usr/bin/jq
67
+ cd $_pwd
68
+ rm -rf $_tmpdir
69
+ ;;
70
+ esac
62
71
  ;;
63
72
  Darwin*)
64
73
  message "Apple OSX Detected; homebrew must be installed to continue. Continue? (Y/n): " "no_newline"
data/rbcli.gemspec 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
  lib = File.expand_path("../lib", __FILE__)
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.summary = %q{A CLI Application/Tooling Framework for Ruby}
32
32
  spec.description = %q{RBCli is a framework to quickly develop command-line tools and applications.}
33
- spec.homepage = 'https://github.com/akhoury6/rbcli'
33
+ spec.homepage = 'https://akhoury6.github.io/rbcli'
34
34
  spec.license = 'MIT'
35
35
 
36
36
  spec.required_ruby_version = '>= 2.3'
@@ -64,6 +64,9 @@ Gem::Specification.new do |spec|
64
64
  spec.add_dependency 'rufus-scheduler', '~> 3.5'
65
65
  spec.add_dependency 'octokit', '~> 4.9'
66
66
  spec.add_dependency 'mdless', '~> 0.0'
67
+ spec.add_dependency 'net-ssh', '~> 5.0'
68
+ spec.add_dependency 'net-scp', '~> 1.2'
69
+
67
70
 
68
71
  #spec.add_dependency 'trollop', '~> 2.1'
69
72
  end
@@ -9,7 +9,7 @@ class <%= @vars[:name].capitalize %> < Rbcli::Command
9
9
  description '<%= @vars[:description] %>' # (Required) Short description for the global help
10
10
  usage <<-EOF
11
11
  <%= @vars[:usage_text] %>
12
- EOF # (Required) Long description for the command-specific help
12
+ EOF
13
13
  parameter :force, 'Force testing', short: 'f', type: :boolean, default: false, required: false # (Optional, Multiple) Add a command-specific CLI parameter. Uses the same format as options (see application/options.rb for help)
14
14
 
15
15
  config_default :myopt2, description: 'My Option #2', default: 'Default Value Here' # (Optional, Multiple) Specify an individual configuration parameter and set a default value. These will also be included in generated user config.
@@ -5,13 +5,17 @@
5
5
  # from Rbcli::Command. The name of the class will be
6
6
  # the command that is available to the user.
7
7
  #########################
8
- class <%= @vars[:name].capitalize %> < Rbcli::Command # Declare a new command by subclassing Rbcli::Command
9
- description '<%= @vars[:description] %>' # (Required) Short description for the global help
10
- usage '<%= @vars[:usage_text] %>' # (Required) Long description for the command-specific help
11
- parameter :force, 'Force testing', type: :boolean, default: false, required: false # (Optional, Multiple) Add a command-specific CLI parameter. Can be called multiple times
8
+ class <%= @vars[:name].capitalize %> < Rbcli::Command # Declare a new command by subclassing Rbcli::Command
9
+ description '<%= @vars[:description] %>' # (Required) Short description for the global help
10
+ usage <<-EOF
11
+ <%= @vars[:usage_text] %>
12
+ EOF
13
+ parameter :force, 'Force testing', type: :boolean, default: false, required: false # (Optional, Multiple) Add a command-specific CLI parameter. Can be called multiple times
12
14
 
13
- config_default :myopt2, description: 'Testing this again', default: true # (Optional, Multiple) Specify an individual configuration parameter and set a default value. These will also be included in generated user config.
14
- # Alternatively, you can simply create a yaml file in the `default_user_configs` directory in your project
15
+ config_default :myopt2, description: 'Testing this again', default: true # (Optional, Multiple) Specify an individual configuration parameter and set a default value. These will also be included in generated user config.
16
+ # Alternatively, you can create a yaml file in the `default_user_configs` directory in your project
17
+
18
+ #remote_permitted # (Optional) Allow this script to be executed on remote hosts. Requires enabling remote execution in the RBCli configuration
15
19
 
16
20
  <% if @vars[:no_script] -%>
17
21
  extern path: 'path/to/application', envvars: {MYVAR: 'some_value'} # (Required) Runs a given application, with optional environment variables, when the user runs the command.
@@ -21,6 +25,6 @@ class <%= @vars[:name].capitalize %> < Rbcli::Command
21
25
  # cmd
22
26
  #end
23
27
  <% else -%>
24
- extern path: :default # (Required): Do not edit this line. Do delete it if you wish to manually specify a script path and set environment variables.
28
+ script # (Required): Do not edit this line. Do delete it if you wish to manually specify a script path and set environment variables.
25
29
  <% end -%>
26
30
  end
@@ -29,11 +29,6 @@ Rbcli::Configurate.me do
29
29
  # they are made available to your hooks and commands.
30
30
  ###
31
31
 
32
- ## Description -- (Required) -- A description that will appear when the user looks at the help with -h.
33
- # This should describe what the application does, and if applicable, give some common usage examples.
34
- # It can be as long as needed. Use a heredoc if desired: <<-EOF TextGoesHere EOF
35
- description %q{<%= @vars[:description] %>}
36
-
37
32
  ## Option -- (Optional, Multiple) -- Add a global CLI Option
38
33
  option :name, 'Give me your name', short: 'n', type: :string, default: 'Jack', required: false, permitted: ['Jack', 'Jill']
39
34
  end
@@ -0,0 +1,17 @@
1
+ Rbcli::Configurate.me do
2
+ ####
3
+ # General Configuration
4
+ ###
5
+ # Here you will find the general configuration options for RBCli.
6
+ ###
7
+
8
+ ## Description -- (Required) -- A description that will appear when the user looks at the help with -h.
9
+ # This should describe what the application does, and if applicable, give some common usage examples.
10
+ # It can be as long as needed. Use a heredoc if desired: <<-EOF TextGoesHere EOF
11
+ description %q{<%= @vars[:description] %>}
12
+
13
+ ## Remote Exection -- (Optional) -- Enables executing commands on remote machines via SSH
14
+ # For any command that you would like to enable remote_execution for, you shoud also
15
+ # put the 'remote_permitted' directive in its declaration.
16
+ remote_execution permitted: false
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbcli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Khoury
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-05 00:00:00.000000000 Z
11
+ date: 2018-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,34 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: net-ssh
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '5.0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '5.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: net-scp
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.2'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.2'
153
181
  description: RBCli is a framework to quickly develop command-line tools and applications.
154
182
  email:
155
183
  - andrew@blacknex.us
@@ -174,6 +202,7 @@ files:
174
202
  - docs-src/docs/advanced/distributed_state_locking.md
175
203
  - docs-src/docs/advanced/hooks.md
176
204
  - docs-src/docs/advanced/logging.md
205
+ - docs-src/docs/advanced/remote_execution.md
177
206
  - docs-src/docs/advanced/state_storage.md
178
207
  - docs-src/docs/advanced/user_config_files.md
179
208
  - docs-src/docs/development/code_of_conduct.md
@@ -196,6 +225,7 @@ files:
196
225
  - docs/advanced/command_types/index.html
197
226
  - docs/advanced/distributed_state_locking/index.html
198
227
  - docs/advanced/hooks/index.html
228
+ - docs/advanced/remote_execution/index.html
199
229
  - docs/advanced/state_storage/index.html
200
230
  - docs/advanced/user_config_files/index.html
201
231
  - docs/assets/fonts/font-awesome.css
@@ -263,6 +293,7 @@ files:
263
293
  - lib/rbcli/engine/load_project.rb
264
294
  - lib/rbcli/engine/parser.rb
265
295
  - lib/rbcli/logging/logging.rb
296
+ - lib/rbcli/remote_exec/remote_exec.rb
266
297
  - lib/rbcli/scriptwrapping/scriptwrapper.rb
267
298
  - lib/rbcli/stateful_systems/configuratestorage.rb
268
299
  - lib/rbcli/stateful_systems/state_storage.rb
@@ -288,6 +319,7 @@ files:
288
319
  - skeletons/project/application/commands/scripts/script.sh
289
320
  - skeletons/project/application/options.rb
290
321
  - skeletons/project/config/autoupdate.rb
322
+ - skeletons/project/config/general.rb
291
323
  - skeletons/project/config/logging.rb
292
324
  - skeletons/project/config/storage.rb
293
325
  - skeletons/project/config/userspace.rb
@@ -302,7 +334,7 @@ files:
302
334
  - skeletons/project/spec/untitled_spec.rb
303
335
  - skeletons/project/untitled.gemspec
304
336
  - skeletons/project/userconf/user_defaults.yml
305
- homepage: https://github.com/akhoury6/rbcli
337
+ homepage: https://akhoury6.github.io/rbcli
306
338
  licenses:
307
339
  - MIT
308
340
  metadata: {}