22
33require 'pathname'
44require 'json'
5+ require 'puppet/pops/evaluator/deferred_resolver'
56require_relative '../../../puppet_x/puppetlabs/dsc_lite/powershell_hash_formatter'
67
78Puppet ::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' )
0 commit comments