diff --git a/agentless-catalog-executor.gemspec b/agentless-catalog-executor.gemspec index e564e2c..860b131 100644 --- a/agentless-catalog-executor.gemspec +++ b/agentless-catalog-executor.gemspec @@ -28,7 +28,7 @@ Gem::Specification.new do |spec| spec.add_dependency "hocon", ">= 1.2.5" spec.add_dependency "json-schema", ">= 2.8.0" spec.add_dependency "puma", ">= 3.12.0" - spec.add_dependency "puppet", ">= 6.23", "< 8.0.0" + spec.add_dependency "puppet", ">= 6.17.0" spec.add_dependency "rack", ">= 2.0.5" spec.add_dependency "rails-auth", ">= 2.1.4" spec.add_dependency "sinatra", ">= 2.0.4" diff --git a/lib/ace/transport_app.rb b/lib/ace/transport_app.rb index 814f724..57d706d 100644 --- a/lib/ace/transport_app.rb +++ b/lib/ace/transport_app.rb @@ -221,6 +221,9 @@ def self.trusted_facts(certname) validate_schema(@schemas["run_task"], body) inventory = Bolt::Inventory.empty + local_data = { 'name' => 'localhost', + 'config' => { 'transport' => 'local', 'local' => { 'bundled-ruby' => false } } } + local_target = Bolt::Target.from_hash(local_data, inventory) target_data = { 'name' => body['target']['host'] || body['target']['name'] || 'remote', 'config' => { @@ -228,7 +231,7 @@ def self.trusted_facts(certname) 'remote' => body['target'] } } - target = [Bolt::Target.from_hash(target_data, inventory)] + target = [Bolt::Target.from_hash(target_data, local_target.inventory)] rescue ACE::Error => e return [400, error_result(e).to_json] rescue JSON::ParserError => e @@ -251,8 +254,12 @@ def self.trusted_facts(certname) parameters = body['parameters'] || {} - # Since this will only be on one node we can just return the first result + # Unset gem specifications so that LOAD_PATH is loaded first, then + # append gem paths to the LOAD_PATH so they are still loaded. This is + # limited to the task run environment itself. + ENV['BOLT_ORIG_RUBYLIB'] = $LOAD_PATH.clone.concat(Gem.path).join(":") results = @executor.run_task(target, task, parameters) + # Since this will only be on one node we can just return the first result result = results.first # Unwrap _sensitive output (orchestrator will handle obfuscating it from the result) if result.value.is_a?(Hash) && result.value.key?('_sensitive')