1-
21# frozen_string_literal: true
32
43require 'pathname'
@@ -68,7 +67,7 @@ def ps_manager
6867 Pwsh ::Manager . instance ( command ( :powershell ) , Pwsh ::Manager . powershell_args , debug : debug_output )
6968 end
7069
71- # ===== NEW: Deferred helpers (instance methods) =====
70+ # ===== Deferred helpers (instance methods) =====
7271
7372 # Detects if a value (or nested) contains a DeferredValue
7473 def deep_contains_deferred? ( obj )
@@ -131,15 +130,15 @@ def ensure_deferreds_resolved!
131130 raise Puppet ::Error , "DSC_lite: failed while resolving Deferred values: #{ e . class } : #{ e . message } "
132131 end
133132
134- # ===== END NEW helpers =====
133+ # ===== END Deferred helpers =====
135134
136135 def exists?
137136 timeout = set_timeout
138137 Puppet . debug "Dsc Timeout: #{ timeout } milliseconds"
139138 version = Facter . value ( :powershell_version )
140139 Puppet . debug "PowerShell Version: #{ version } "
141140
142- # NEW: ensure any lingering Deferreds are resolved before building the script
141+ # Ensure any lingering Deferreds are resolved before building the script
143142 ensure_deferreds_resolved!
144143
145144 script_content = ps_script_content ( 'test' )
@@ -170,7 +169,7 @@ def create
170169 timeout = set_timeout
171170 Puppet . debug "Dsc Timeout: #{ timeout } milliseconds"
172171
173- # NEW: ensure any lingering Deferreds are resolved before building the script
172+ # Ensure any lingering Deferreds are resolved before building the script
174173 ensure_deferreds_resolved!
175174
176175 script_content = ps_script_content ( 'set' )
@@ -192,6 +191,7 @@ def create
192191 raise ( data [ 'errormessage' ] ) unless data [ 'errormessage' ] . empty?
193192
194193 notify_reboot_pending if data [ 'rebootrequired' ] == true
194+
195195 data
196196 end
197197
@@ -213,9 +213,20 @@ def notify_reboot_pending
213213 end
214214 end
215215
216+ # ---- CHANGED: resolve Deferreds right before formatting the hash ----
216217 def self . format_dsc_lite ( dsc_value )
217- PuppetX ::PuppetLabs ::DscLite ::PowerShellHashFormatter . format ( dsc_value )
218+ # Resolve any direct/nested Deferred values using the current compiler scope if available.
219+ compiler = Puppet . lookup ( :compiler ) { nil }
220+ value_for_format =
221+ if compiler
222+ Puppet ::Pops ::Evaluator ::DeferredResolver . resolve ( dsc_value , compiler )
223+ else
224+ dsc_value
225+ end
226+
227+ PuppetX ::PuppetLabs ::DscLite ::PowerShellHashFormatter . format ( value_for_format )
218228 end
229+ # --------------------------------------------------------------------
219230
220231 def self . escape_quotes ( text )
221232 text . gsub ( "'" , "''" )
0 commit comments