Skip to content

Commit

Permalink
(GH-3309) Ensure bundled-ruby defaults are applied at target init
Browse files Browse the repository at this point in the history
Previously defaults were not applied until an action was actually requested on a target. This made inventory resolution confusing and non-determanistic behavior with apply_prep. This commit moves application of defaults for a target to the init method for creating a target object.

!bug

* **Apply bundled-ruby defaults at target creation** ([#3309](3309))

  Ensure defaults associated with `bundled-ruby` transport config are
  applied at target initialization.
  • Loading branch information
donoghuc committed May 10, 2024
1 parent 7e8cede commit 4ea4d1d
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 9 deletions.
4 changes: 3 additions & 1 deletion lib/bolt/inventory/target.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def initialize(target_data, inventory)
@name = @uri
@safe_name = @uri_obj.omit(:password).to_str.sub(%r{^//}, '')
end

# handle special localhost target
if @name == 'localhost'
default = { 'config' => { 'transport' => 'local' } }
target_data = Bolt::Util.deep_merge(default, target_data)
Expand All @@ -53,6 +53,8 @@ def initialize(target_data, inventory)
@inventory = inventory

validate
# after setting config, apply local defaults when using bundled ruby
set_local_defaults if transport_config['bundled-ruby']
end

def set_local_defaults
Expand Down
4 changes: 0 additions & 4 deletions lib/bolt/target.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,6 @@ def resources
inventory_target.resources
end

def set_local_defaults
inventory_target.set_local_defaults
end

# rubocop:disable Naming/AccessorMethodName
def set_resource(resource)
inventory_target.set_resource(resource)
Expand Down
4 changes: 0 additions & 4 deletions lib/bolt/transport/local.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ def connected?(_target)
end

def with_connection(target)
if target.transport_config['bundled-ruby']
target.set_local_defaults
end

yield Connection.new(target)
end
end
Expand Down
10 changes: 10 additions & 0 deletions spec/unit/transport/local_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,16 @@ def get_target(inventory, name, alia = nil)
end
end

context 'without with_connection' do
let(:data) { { 'targets' => [] } }
it 'applies bundled-ruby config' do
target = get_target(inventory, 'local://foo')
expect(target.transport).to eq('local')
expect(target.options['interpreters']).to include('.rb' => RbConfig.ruby)
expect(target.features).to include('puppet-agent')
end
end

context 'with group-level config' do
let(:data) {
{ 'targets' => [uri],
Expand Down

0 comments on commit 4ea4d1d

Please sign in to comment.