Skip to content

Commit b27b8f6

Browse files
committed
Resolve deferred functions before formatting
1 parent 2aca2e9 commit b27b8f6

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

lib/puppet/provider/base_dsc_lite/powershell.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require 'pathname'
44
require 'json'
55
require_relative '../../../puppet_x/puppetlabs/dsc_lite/powershell_hash_formatter'
6+
require 'puppet/pops/evaluator/deferred_resolver'
67

78
Puppet::Type.type(:base_dsc_lite).provide(:powershell) do
89
confine feature: :pwshlib
@@ -31,6 +32,14 @@
3132
Puppet (including 3.x), or to a Puppet version newer than 3.x.
3233
UPGRADE
3334

35+
def self.resolve_deferred(value)
36+
# Resolve any direct/nested Deferred values using the current compiler scope.
37+
# If not in an apply context (compiler missing), just return as-is.
38+
compiler = Puppet.lookup(:compiler) { nil }
39+
return value unless compiler
40+
Puppet::Pops::Evaluator::DeferredResolver.resolve(value, compiler)
41+
end
42+
3443
def self.upgrade_message
3544
Puppet.warning DSC_LITE_MODULE_PUPPET_UPGRADE_MSG unless @upgrade_warning_issued
3645
@upgrade_warning_issued = true
@@ -139,7 +148,9 @@ def notify_reboot_pending
139148
end
140149

141150
def self.format_dsc_lite(dsc_value)
142-
PuppetX::PuppetLabs::DscLite::PowerShellHashFormatter.format(dsc_value)
151+
# NEW: ensure no DeferredValue survives into the formatter/serializer
152+
resolved = resolve_deferred(dsc_value)
153+
PuppetX::PuppetLabs::DscLite::PowerShellHashFormatter.format(resolved)
143154
end
144155

145156
def self.escape_quotes(text)

0 commit comments

Comments
 (0)