Skip to content

Commit

Permalink
(puppetlabsGH-3310) Load bolt builtin content if it is present
Browse files Browse the repository at this point in the history
This commit shows an alternate approach for handling bundled-ruby: true on local transport for core types and providers. Instead of always syncing those plugins (almost always not-necessary) we simply pass through the buitin content location to the apply_catalog task. If it is detected on the target, builtin content is added to the loadpath. This allows us to avoid pluginsyncing when its not always necessary and handing the case of local transport.
  • Loading branch information
donoghuc committed May 17, 2024
1 parent d326ffc commit c0b338c
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/bolt/applicator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ def apply_ast(raw_ast, targets, options, plan_vars = {})
'catalog' => Puppet::Pops::Types::PSensitiveType::Sensitive.new(catalog),
'plugins' => Puppet::Pops::Types::PSensitiveType::Sensitive.new(plugins),
'apply_settings' => @apply_settings,
'bolt_builtin_content' => @modulepath.full_modulepath - @modulepath.user_modulepath || [],
'_task' => catalog_apply_task.name,
'_noop' => options[:noop]
}
Expand Down
13 changes: 13 additions & 0 deletions libexec/apply_catalog.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,19 @@
$LOAD_PATH << dir unless $LOAD_PATH.include?(dir)
end

# In the case we are applying on a bolt runner and using bundled-ruby over local transport
# we will want to load code shipped with bolt. This is last on the load path and therefore
# explicitly packaged plugins should take precedence
args['bolt_builtin_content'].each do |builtin_dir|
next unless Dir.exist?(builtin_dir)
Dir.foreach(builtin_dir) do |dir|
unless ['.', '..'].include? dir
full_path = File.join(builtin_dir, dir, 'lib')
$LOAD_PATH << full_path unless $LOAD_PATH.include?(full_path)
end
end
end

if (conn_info = args['_target'])
unless (type = conn_info['remote-transport'])
puts "Cannot execute a catalog for a remote target without knowing it's the remote-transport type."
Expand Down

0 comments on commit c0b338c

Please sign in to comment.