Class: TaskHelper
- Inherits:
-
Object
- Object
- TaskHelper
- Defined in:
- lib/puppet/util/task_helper.rb
Overview
Sets up the transport for a remote task
Defined Under Namespace
Classes: Error
Instance Attribute Summary collapse
-
#debug_statements ⇒ Object
readonly
Returns the value of attribute debug_statements.
-
#target ⇒ Object
Returns the value of attribute target.
Class Method Summary collapse
-
.add_plugin_paths(install_dir) ⇒ Object
Syncs across anything from the module lib.
- .run ⇒ Object
-
.walk_keys(data) ⇒ Object
Accepts a Data object and returns a copy with all hash keys symbolized.
Instance Method Summary collapse
- #credentials ⇒ Object
- #debug(statement) ⇒ Object
-
#initialize ⇒ TaskHelper
constructor
A new instance of TaskHelper.
- #task(_params = {}) ⇒ Object
- #transport ⇒ Object
- #transport_name ⇒ Object
Constructor Details
#initialize ⇒ TaskHelper
Returns a new instance of TaskHelper.
9 10 11 12 13 14 15 16 |
# File 'lib/puppet/util/task_helper.rb', line 9 def initialize unless Puppet.settings.global_defaults_initialized? # Puppet.initialize_settings # FIXME: debugging support Puppet.initialize_settings(['--confdir', '/etc/puppetlabs/puppet/puppet.conf']) end @transport = {} end |
Instance Attribute Details
#debug_statements ⇒ Object (readonly)
Returns the value of attribute debug_statements.
6 7 8 |
# File 'lib/puppet/util/task_helper.rb', line 6 def debug_statements @debug_statements end |
#target ⇒ Object
Returns the value of attribute target.
7 8 9 |
# File 'lib/puppet/util/task_helper.rb', line 7 def target @target end |
Class Method Details
.add_plugin_paths(install_dir) ⇒ Object
Syncs across anything from the module lib
111 112 113 114 115 |
# File 'lib/puppet/util/task_helper.rb', line 111 def self.add_plugin_paths(install_dir) Dir.glob(File.join([install_dir, '*'])).each do |mod| $LOAD_PATH << File.join([mod, 'lib']) end end |
.run ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/puppet/util/task_helper.rb', line 65 def self.run task = new # support debugging by reading command line arguments input = ARGV.empty? ? STDIN.read : ARGV[0] params = walk_keys(JSON.parse(input)) task.target = params[:_target] add_plugin_paths(params[:_installdir]) if params.key? :_installdir result = task.task(params) if result.class == Hash STDOUT.print JSON.generate(result) else STDOUT.print result.to_s end rescue TaskHelper::Error => e STDOUT.print({ _error: e.to_h }.to_json) exit 1 rescue StandardError => e details = { 'backtrace' => e.backtrace, 'debug' => task.debug_statements, }.compact error = TaskHelper::Error.new(e., e.class.to_s, details) STDOUT.print({ _error: error.to_h }.to_json) exit 1 end |
.walk_keys(data) ⇒ Object
Accepts a Data object and returns a copy with all hash keys symbolized.
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/puppet/util/task_helper.rb', line 97 def self.walk_keys(data) if data.is_a? Hash data.each_with_object({}) do |(k, v), acc| v = walk_keys(v) acc[k.to_sym] = v end elsif data.is_a? Array data.map { |v| walk_keys(v) } else data end end |
Instance Method Details
#credentials ⇒ Object
55 56 57 |
# File 'lib/puppet/util/task_helper.rb', line 55 def credentials @credentials ||= target.each_with_object({}) { |(k, v), h| h[k.to_sym] = v } end |
#debug(statement) ⇒ Object
36 37 38 39 |
# File 'lib/puppet/util/task_helper.rb', line 36 def debug(statement) @debug_statements ||= [] @debug_statements << statement end |
#task(_params = {}) ⇒ Object
59 60 61 62 |
# File 'lib/puppet/util/task_helper.rb', line 59 def task(_params = {}) msg = 'The task author must implement the `task` method in the task' raise TaskHelper::Error.new(msg, 'tasklib/not-implemented') end |
#transport ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/puppet/util/task_helper.rb', line 45 def transport begin require 'puppet/resource_api/transport' rescue LoadError require 'puppet_x/puppetlabs/panos/transport_shim' end @transport[transport_name] ||= Puppet::ResourceApi::Transport.connect(transport_name, credentials) end |
#transport_name ⇒ Object
41 42 43 |
# File 'lib/puppet/util/task_helper.rb', line 41 def transport_name @transport_name ||= target[:'remote-transport'] end |