Skip to content

Commit ad35820

Browse files
committed
expand logging
1 parent 19d3779 commit ad35820

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

lib/puppet/provider/base_dsc_lite/powershell.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require 'pathname'
44
require 'json'
5+
require 'puppet/pops/evaluator/deferred_resolver'
56
require_relative '../../../puppet_x/puppetlabs/dsc_lite/powershell_hash_formatter'
67

78
Puppet::Type.type(:base_dsc_lite).provide(:powershell) do
@@ -40,6 +41,23 @@ def self.vendored_modules_path
4041
File.expand_path(Pathname.new(__FILE__).dirname + '../../../' + 'puppet_x/dsc_resources')
4142
end
4243

44+
def force_resolve_catalog_deferred!
45+
cat = resource&.catalog
46+
return unless cat
47+
facts = Puppet.lookup(:facts) { nil }
48+
env = if cat.respond_to?(:environment_instance)
49+
cat.environment_instance
50+
else
51+
Puppet.lookup(:current_environment) { nil }
52+
end
53+
begin
54+
Puppet::Pops::Evaluator::DeferredResolver.resolve_and_replace(facts, cat, env, true)
55+
Puppet.notice('DSC PROVIDER SENTINEL → resolve_and_replace invoked')
56+
rescue => e
57+
Puppet.notice("DSC PROVIDER resolve_and_replace error: #{e.class}: #{e.message}")
58+
end
59+
end
60+
4361
def dsc_parameters
4462
resource.parameters_with_value.select do |p|
4563
p.name.to_s.include? 'dsc_'
@@ -66,6 +84,8 @@ def ps_manager
6684
end
6785

6886
def exists?
87+
Puppet.notice("DSC PROVIDER SENTINEL → #{__FILE__}")
88+
force_resolve_catalog_deferred!
6989
timeout = set_timeout
7090
Puppet.debug "Dsc Timeout: #{timeout} milliseconds"
7191
version = Facter.value(:powershell_version)
@@ -95,6 +115,8 @@ def exists?
95115
end
96116

97117
def create
118+
Puppet.notice("DSC PROVIDER SENTINEL → #{__FILE__}")
119+
force_resolve_catalog_deferred!
98120
timeout = set_timeout
99121
Puppet.debug "Dsc Timeout: #{timeout} milliseconds"
100122
script_content = ps_script_content('set')

lib/puppet/type/dsc.rb

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,32 @@ def change_to_s(currentvalue, newvalue)
107107
end
108108

109109
munge do |value|
110-
# If the compiler is present (compile-time), resolve any direct/nested Deferred values.
110+
Puppet.notice("DSC TYPE SENTINEL → #{__FILE__}")
111111
compiler = Puppet.lookup(:compiler) { nil }
112-
resolved = if compiler
113-
Puppet::Pops::Evaluator::DeferredResolver.resolve(value, compiler)
114-
else
115-
value
116-
end
112+
if compiler
113+
begin
114+
resolved = Puppet::Pops::Evaluator::DeferredResolver.resolve(value, compiler)
115+
rescue => e
116+
Puppet.notice("DSC TYPE resolve() error: #{e.class}: #{e.message}")
117+
resolved = value
118+
end
119+
else
120+
Puppet.notice('DSC TYPE SENTINEL → no compiler available during munge')
121+
resolved = value
122+
end
123+
124+
# Quick check: did any Deferred remain?
125+
def contains_deferred?(x)
126+
case x
127+
when Hash then x.any? { |k, v| contains_deferred?(k) || contains_deferred?(v) }
128+
when Array then x.any? { |v| contains_deferred?(v) }
129+
else x && x.class.name.to_s.include?('Deferred')
130+
end
131+
end
132+
if contains_deferred?(resolved)
133+
Puppet.notice('DSC TYPE SENTINEL → properties still contains Deferred AFTER resolve()')
134+
end
117135

118-
# Preserve your existing sensitive handling on the resolved hash
119136
PuppetX::DscLite::TypeHelpers.munge_sensitive_hash(resolved)
120137
end
121138
end

0 commit comments

Comments
 (0)