Class: Bolt::Shell
- Inherits:
-
Object
- Object
- Bolt::Shell
- Defined in:
- lib/bolt/shell.rb,
lib/bolt/shell/bash.rb,
lib/bolt/shell/powershell.rb,
lib/bolt/shell/bash/tmpdir.rb,
lib/bolt/shell/powershell/snippets.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Bash, Powershell
Instance Attribute Summary collapse
-
#conn ⇒ Object
readonly
Returns the value of attribute conn.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#target ⇒ Object
readonly
Returns the value of attribute target.
Instance Method Summary collapse
- #default_input_method(_executable) ⇒ Object
-
#envify_params(params) ⇒ Object
Transform a parameter map to an environment variable map, with parameter names prefixed with ‘PT_’ and values transformed to JSON unless they’re strings.
-
#initialize(target, conn) ⇒ Shell
constructor
A new instance of Shell.
- #provided_features ⇒ Object
- #run_command(*_args) ⇒ Object
- #run_script(*_args) ⇒ Object
- #run_task(*_args) ⇒ Object
-
#select_implementation(target, task) ⇒ Object
The above methods are the API that must be implemented by a Shell.
- #select_interpreter(executable, interpreters) ⇒ Object
-
#unwrap_sensitive_args(arguments) ⇒ Object
Unwraps any Sensitive data in an arguments Hash, so the plain-text is passed to the Task/Script.
- #upload(*_args) ⇒ Object
Constructor Details
#initialize(target, conn) ⇒ Shell
Returns a new instance of Shell.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/bolt/shell.rb', line 7 def initialize(target, conn) @target = target @conn = conn @logger = Bolt::Logger.logger(@target.safe_name) if Bolt::Logger.stream Bolt::Logger.warn_once("stream_experimental", "The 'stream' option is experimental, and might "\ "include breaking changes between minor versions.") @stream_logger = Bolt::Logger.logger(:stream) # Don't send stream messages to the parent logger @stream_logger.additive = false # Log stream messages without any other data or color pattern = Logging.layouts.pattern(pattern: '%m\n') @stream_logger.appenders = Logging.appenders.stdout( 'console', layout: pattern ) end end |
Instance Attribute Details
#conn ⇒ Object (readonly)
Returns the value of attribute conn.
5 6 7 |
# File 'lib/bolt/shell.rb', line 5 def conn @conn end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
5 6 7 |
# File 'lib/bolt/shell.rb', line 5 def logger @logger end |
#target ⇒ Object (readonly)
Returns the value of attribute target.
5 6 7 |
# File 'lib/bolt/shell.rb', line 5 def target @target end |
Instance Method Details
#default_input_method(_executable) ⇒ Object
49 50 51 |
# File 'lib/bolt/shell.rb', line 49 def default_input_method(_executable) 'both' end |
#envify_params(params) ⇒ Object
Transform a parameter map to an environment variable map, with parameter names prefixed with ‘PT_’ and values transformed to JSON unless they’re strings.
68 69 70 71 72 73 |
# File 'lib/bolt/shell.rb', line 68 def envify_params(params) params.each_with_object({}) do |(k, v), h| v = v.to_json unless v.is_a?(String) h["PT_#{k}"] = v end end |
#provided_features ⇒ Object
45 46 47 |
# File 'lib/bolt/shell.rb', line 45 def provided_features [] end |
#run_command(*_args) ⇒ Object
29 30 31 |
# File 'lib/bolt/shell.rb', line 29 def run_command(*_args) raise NotImplementedError, "run_command() must be implemented by the shell class" end |
#run_script(*_args) ⇒ Object
37 38 39 |
# File 'lib/bolt/shell.rb', line 37 def run_script(*_args) raise NotImplementedError, "run_script() must be implemented by the shell class" end |
#run_task(*_args) ⇒ Object
41 42 43 |
# File 'lib/bolt/shell.rb', line 41 def run_task(*_args) raise NotImplementedError, "run_task() must be implemented by the shell class" end |
#select_implementation(target, task) ⇒ Object
The above methods are the API that must be implemented by a Shell. Below are helper methods.
56 57 58 59 60 |
# File 'lib/bolt/shell.rb', line 56 def select_implementation(target, task) impl = task.select_implementation(target, provided_features) impl['input_method'] ||= default_input_method(impl['path']) impl end |
#select_interpreter(executable, interpreters) ⇒ Object
62 63 64 |
# File 'lib/bolt/shell.rb', line 62 def select_interpreter(executable, interpreters) interpreters[Pathname(executable).extname] if interpreters end |
#unwrap_sensitive_args(arguments) ⇒ Object
Unwraps any Sensitive data in an arguments Hash, so the plain-text is passed to the Task/Script.
This works on deeply nested data structures composed of Hashes, Arrays, and and plain-old data types (int, string, etc).
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/bolt/shell.rb', line 80 def unwrap_sensitive_args(arguments) # Skip this if Puppet isn't loaded return arguments unless defined?(Puppet::Pops::Types::PSensitiveType::Sensitive) case arguments when Array # iterate over the array, unwrapping all elements arguments.map { |x| unwrap_sensitive_args(x) } when Hash # iterate over the arguments hash and unwrap all keys and values arguments.each_with_object({}) { |(k, v), h| h[unwrap_sensitive_args(k)] = unwrap_sensitive_args(v) } when Puppet::Pops::Types::PSensitiveType::Sensitive # this value is Sensitive, unwrap it unwrap_sensitive_args(arguments.unwrap) else # unknown data type, just return it arguments end end |
#upload(*_args) ⇒ Object
33 34 35 |
# File 'lib/bolt/shell.rb', line 33 def upload(*_args) raise NotImplementedError, "upload() must be implemented by the shell class" end |