Skip to content

Commit 4b8bec8

Browse files
committed
different approach
1 parent beb4137 commit 4b8bec8

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

lib/puppet/provider/base_dsc_lite/powershell.rb

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
# frozen_string_literal: true
32

43
require '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

Comments
 (0)