ruby-pwsh 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd8ad4546d9fbdc7bf62c17f8132adb9647e311e9e3319b22b5161f924fd94c3
4
- data.tar.gz: c607771ae691c4593b839cc1134d3e0fcc15b0a454eef93a3b146301d13b3411
3
+ metadata.gz: eb7a2c9a103865f74de54ae3a977a70382a2b18ff2e1f8f830b25ef50f4ba1d2
4
+ data.tar.gz: 7ca9acbd7478367673a8f761a0b51ddf5f0359246b3ca72f7fe9b8e4c3da34a6
5
5
  SHA512:
6
- metadata.gz: e8efb9f23a1fe2302369938416d08e463c4c5e088712dac293b10f0e8abc09431f91057039f95f918382e4775b932da4ab270901591f58d834a01c1d784d4fe6
7
- data.tar.gz: 788c3c601d46c37478b41abe5a068eac7da7c0912ec71f703841f4d462a3363d2c613bbeb8356b6a38b21a3870eec0d567e4bfa2d2892a40aadd1e4a62dc38e1
6
+ metadata.gz: 830c6e92076e50675f1ce02445f9fd9952545987af24e152bb164b11223d35d47d3619c997bf51b9b09293b22d69d2c832e689f59cfbad1118663203af374046
7
+ data.tar.gz: 5e107bcb95cc294f2c421d565c3376b21a7272b4bd4e4c32684f4481577398e2fa54c5005f8e6d990a7d9ffebf2db5eca5dbdb7eba2b2c7ddb2660ca65315f04
data/.rubocop.yml CHANGED
@@ -18,6 +18,9 @@ AllCops:
18
18
  Style/ClassAndModuleChildren:
19
19
  Enabled: false
20
20
 
21
+ Layout/LineLength:
22
+ Max: 196
23
+
21
24
  ####################################################
22
25
  # Cops below here due for deprecation
23
26
  ####################################################
@@ -5,7 +5,7 @@ require 'ruby-pwsh'
5
5
  require 'pathname'
6
6
  require 'json'
7
7
 
8
- class Puppet::Provider::DscBaseProvider
8
+ class Puppet::Provider::DscBaseProvider # rubocop:disable Metrics/ClassLength
9
9
  # Initializes the provider, preparing the instance variables which cache:
10
10
  # - the canonicalized resources across calls
11
11
  # - query results
@@ -244,6 +244,7 @@ class Puppet::Provider::DscBaseProvider
244
244
  script_content = ps_script_content(resource)
245
245
  context.debug("Script:\n #{redact_secrets(script_content)}")
246
246
  output = ps_manager.execute(remove_secret_identifiers(script_content))[:stdout]
247
+
247
248
  if output.nil?
248
249
  context.err('Nothing returned')
249
250
  return nil
@@ -256,8 +257,10 @@ class Puppet::Provider::DscBaseProvider
256
257
  return nil
257
258
  end
258
259
  context.debug("raw data received: #{data.inspect}")
260
+ collision_error_matcher = /The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked/
259
261
 
260
262
  error = data['errormessage']
263
+
261
264
  unless error.nil? || error.empty?
262
265
  # NB: We should have a way to stop processing this resource *now* without blowing up the whole Puppet run
263
266
  # Raising an error stops processing but blows things up while context.err alerts but continues to process
@@ -267,6 +270,11 @@ class Puppet::Provider::DscBaseProvider
267
270
  @logon_failures << name_hash[:dsc_psdscrunascredential].dup
268
271
  # This is a hack to handle the query cache to prevent a second lookup
269
272
  @cached_query_results << name_hash # if fetch_cached_hashes(@cached_query_results, [data]).empty?
273
+ elsif error.match?(collision_error_matcher)
274
+ context.notice('Invoke-DscResource collision detected: Please stagger the timing of your Puppet runs as this can lead to unexpected behaviour.')
275
+ retry_invoke_dsc_resource(context, 5, 60, collision_error_matcher) do
276
+ data = ps_manager.execute(remove_secret_identifiers(script_content))[:stdout]
277
+ end
270
278
  else
271
279
  context.err(error)
272
280
  end
@@ -276,6 +284,43 @@ class Puppet::Provider::DscBaseProvider
276
284
  data
277
285
  end
278
286
 
287
+ # Retries Invoke-DscResource when returned error matches error regex supplied as param.
288
+ # @param context [Object] the Puppet runtime context to operate in and send feedback to
289
+ # @param max_retry_count [Int] max number of times to retry Invoke-DscResource
290
+ # @param retry_wait_interval_secs [Int] Time delay between retries
291
+ # @param error_matcher [String] the regex pattern to match with error
292
+ def retry_invoke_dsc_resource(context, max_retry_count, retry_wait_interval_secs, error_matcher)
293
+ try = 0
294
+ while try < max_retry_count
295
+ try += 1
296
+ # notify and wait for retry interval
297
+ context.notice("Sleeping for #{retry_wait_interval_secs} seconds.")
298
+ sleep retry_wait_interval_secs
299
+ # notify and retry
300
+ context.notice("Retrying: attempt #{try} of #{max_retry_count}.")
301
+ data = JSON.parse(yield)
302
+ # if no error, break
303
+ if data['errormessage'].nil?
304
+ break
305
+ # check if error matches error matcher supplied
306
+ elsif data['errormessage'].match?(error_matcher)
307
+ # if last attempt, return error
308
+ if try == max_retry_count
309
+ context.notice("Attempt #{try} of #{max_retry_count} failed. No more retries.")
310
+ # all attempts failed, raise error
311
+ return context.err(data['errormessage'])
312
+ end
313
+ # if not last attempt, notify, continue and retry
314
+ context.notice("Attempt #{try} of #{max_retry_count} failed.")
315
+ next
316
+ else
317
+ # if we get an unexpected error, return
318
+ return context.err(data['errormessage'])
319
+ end
320
+ end
321
+ data
322
+ end
323
+
279
324
  # Determine if the DSC Resource is in the desired state, invoking the `Test` method unless it's
280
325
  # already been run for the resource, in which case reuse the result instead of checking for each
281
326
  # property. This behavior is only triggered if the validation_mode is set to resource; by default
@@ -666,7 +711,7 @@ class Puppet::Provider::DscBaseProvider
666
711
  # @param resource [Hash] a hash with the information needed to run `Invoke-DscResource`
667
712
  # @return [String] A multi-line string which sets the PSModulePath at the system level
668
713
  def munge_psmodulepath(resource)
669
- vendor_path = resource[:vendored_modules_path].tr('/', '\\')
714
+ vendor_path = resource[:vendored_modules_path]&.tr('/', '\\')
670
715
  <<~MUNGE_PSMODULEPATH.strip
671
716
  $UnmungedPSModulePath = [System.Environment]::GetEnvironmentVariable('PSModulePath','machine')
672
717
  $MungedPSModulePath = $env:PSModulePath + ';#{vendor_path}'
data/lib/pwsh/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Pwsh
4
4
  # The version of the ruby-pwsh gem
5
- VERSION = '1.0.1'
5
+ VERSION = '1.1.0'
6
6
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ if ENV['COVERAGE'] == 'yes'
4
+ begin
5
+ require 'simplecov'
6
+ require 'simplecov-console'
7
+
8
+ SimpleCov.formatters = [
9
+ SimpleCov::Formatter::HTMLFormatter,
10
+ SimpleCov::Formatter::Console
11
+ ]
12
+
13
+ SimpleCov.start do
14
+ track_files 'lib/**/*.rb'
15
+
16
+ add_filter '/spec'
17
+ add_filter 'lib/pwsh/version.rb'
18
+
19
+ # do not track vendored files
20
+ add_filter '/vendor'
21
+ add_filter '/.vendor'
22
+ end
23
+ rescue LoadError
24
+ raise 'Add the simplecov & simplecov-console gems to Gemfile to enable this task'
25
+ end
26
+ end
27
+
3
28
  require 'bundler/setup'
4
29
  require 'ruby-pwsh'
5
30
 
@@ -2,23 +2,24 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require 'puppet/type'
5
+ require 'puppet/resource_api'
5
6
  require 'puppet/provider/dsc_base_provider/dsc_base_provider'
6
7
  require 'json'
7
8
 
8
9
  RSpec.describe Puppet::Provider::DscBaseProvider do
9
10
  subject(:provider) { described_class.new }
10
11
 
11
- let(:context) { instance_double(Puppet::ResourceApi::PuppetContext) }
12
- let(:type) { instance_double(Puppet::ResourceApi::TypeDefinition) }
12
+ let(:context) { instance_double(Puppet::ResourceApi::BaseContext, 'context') }
13
+ let(:type) { instance_double(Puppet::ResourceApi::TypeDefinition, 'typedef') }
13
14
  let(:ps_manager) { instance_double(Pwsh::Manager) }
14
15
  let(:execute_response) { { stdout: nil, stderr: nil, exitcode: 0 } }
15
16
 
16
17
  # Reset the caches after each run
17
18
  after do
18
- described_class.instance_variable_set(:@cached_canonicalized_resource, [])
19
- described_class.instance_variable_set(:@cached_query_results, [])
20
- described_class.instance_variable_set(:@cached_test_results, [])
21
- described_class.instance_variable_set(:@logon_failures, [])
19
+ provider.instance_variable_set(:@cached_canonicalized_resource, [])
20
+ provider.instance_variable_set(:@cached_query_results, [])
21
+ provider.instance_variable_set(:@cached_test_results, [])
22
+ provider.instance_variable_set(:@logon_failures, [])
22
23
  end
23
24
 
24
25
  describe '.initialize' do
@@ -28,27 +29,30 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
28
29
  end
29
30
 
30
31
  it 'initializes the cached_canonicalized_resource instance variable' do
31
- expect(described_class.instance_variable_get(:@cached_canonicalized_resource)).to eq([])
32
+ expect(provider.instance_variable_get(:@cached_canonicalized_resource)).to eq([])
32
33
  end
33
34
 
34
35
  it 'initializes the cached_query_results instance variable' do
35
- expect(described_class.instance_variable_get(:@cached_query_results)).to eq([])
36
+ expect(provider.instance_variable_get(:@cached_query_results)).to eq([])
36
37
  end
37
38
 
38
39
  it 'initializes the cached_test_results instance variable' do
39
- expect(described_class.instance_variable_get(:@cached_test_results)).to eq([])
40
+ expect(provider.instance_variable_get(:@cached_test_results)).to eq([])
40
41
  end
41
42
 
42
43
  it 'initializes the logon_failures instance variable' do
43
- expect(described_class.instance_variable_get(:@logon_failures)).to eq([])
44
+ expect(provider.instance_variable_get(:@logon_failures)).to eq([])
44
45
  end
45
46
  end
46
47
 
47
48
  describe '.cached_test_results' do
48
49
  let(:cache_value) { %w[foo bar] }
49
50
 
51
+ before do
52
+ provider.instance_variable_set(:@cached_test_results, cache_value)
53
+ end
54
+
50
55
  it 'returns the value of the @cached_test_results instance variable' do
51
- described_class.instance_variable_set(:@cached_test_results, cache_value)
52
56
  expect(provider.cached_test_results).to eq(cache_value)
53
57
  end
54
58
  end
@@ -237,11 +241,11 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
237
241
 
238
242
  describe '.get' do
239
243
  after do
240
- described_class.instance_variable_set(:@cached_canonicalized_resource, [])
244
+ provider.instance_variable_set(:@cached_canonicalized_resource, [])
241
245
  end
242
246
 
243
247
  it 'checks the cached results, returning if one exists for the specified names' do
244
- described_class.instance_variable_set(:@cached_canonicalized_resource, [])
248
+ provider.instance_variable_set(:@cached_canonicalized_resource, [])
245
249
  allow(context).to receive(:debug)
246
250
  expect(provider).to receive(:fetch_cached_hashes).with([], [{ name: 'foo' }]).and_return([{ name: 'foo', property: 'bar' }])
247
251
  expect(provider).not_to receive(:invoke_get_method)
@@ -249,7 +253,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
249
253
  end
250
254
 
251
255
  it 'adds mandatory properties to the name hash when calling invoke_get_method' do
252
- described_class.instance_variable_set(:@cached_canonicalized_resource, [{ name: 'foo', property: 'bar', dsc_some_parameter: 'baz' }])
256
+ provider.instance_variable_set(:@cached_canonicalized_resource, [{ name: 'foo', property: 'bar', dsc_some_parameter: 'baz' }])
253
257
  allow(context).to receive(:debug)
254
258
  expect(provider).to receive(:fetch_cached_hashes).with([], [{ name: 'foo' }]).and_return([])
255
259
  expect(provider).to receive(:namevar_attributes).and_return([:name]).exactly(3).times
@@ -530,7 +534,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
530
534
  end
531
535
 
532
536
  after do
533
- described_class.instance_variable_set(:@cached_query_results, nil)
537
+ provider.instance_variable_set(:@cached_query_results, [])
534
538
  end
535
539
 
536
540
  context 'when the invocation script returns data without errors' do
@@ -557,7 +561,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
557
561
 
558
562
  it 'caches the result' do
559
563
  expect { result }.not_to raise_error
560
- expect(described_class.instance_variable_get(:@cached_query_results)).to eq([result])
564
+ expect(provider.instance_variable_get(:@cached_query_results)).to eq([result])
561
565
  end
562
566
 
563
567
  it 'removes unrelated properties from the result' do
@@ -719,7 +723,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
719
723
  end
720
724
 
721
725
  after do
722
- described_class.instance_variable_set(:@logon_failures, [])
726
+ provider.instance_variable_set(:@logon_failures, [])
723
727
  end
724
728
 
725
729
  it 'errors specifically for a logon failure and returns nil' do
@@ -728,12 +732,12 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
728
732
 
729
733
  it 'caches the logon failure' do
730
734
  expect { result }.not_to raise_error
731
- expect(described_class.instance_variable_get(:@logon_failures)).to eq([credential_hash])
735
+ expect(provider.instance_variable_get(:@logon_failures)).to eq([credential_hash])
732
736
  end
733
737
 
734
738
  it 'caches the query results' do
735
739
  expect { result }.not_to raise_error
736
- expect(described_class.instance_variable_get(:@cached_query_results)).to eq([name_hash])
740
+ expect(provider.instance_variable_get(:@cached_query_results)).to eq([name_hash])
737
741
  end
738
742
  end
739
743
 
@@ -790,6 +794,44 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
790
794
  end
791
795
  end
792
796
 
797
+ context 'when the invocation script errors with a collision' do
798
+ it 'writes a notice via context and applies successfully on retry' do
799
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": "The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked"}' })
800
+ expect(context).to receive(:notice).with(/Invoke-DscResource collision detected: Please stagger the timing of your Puppet runs as this can lead to unexpected behaviour./).once
801
+ expect(context).to receive(:notice).with('Sleeping for 60 seconds.').twice
802
+ expect(context).to receive(:notice).with(/Retrying: attempt [1-2] of 5/).twice
803
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": "The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked"}' })
804
+ expect(context).to receive(:notice).with('Attempt 1 of 5 failed.')
805
+ allow(provider).to receive(:sleep)
806
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": null}' })
807
+ expect { result }.not_to raise_error
808
+ end
809
+
810
+ it 'writes a error via context and fails to apply when all retry attempts used' do
811
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": "The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked"}' })
812
+ .exactly(5).times
813
+ expect(context).to receive(:notice).with(/Invoke-DscResource collision detected: Please stagger the timing of your Puppet runs as this can lead to unexpected behaviour./).once
814
+ expect(context).to receive(:notice).with('Sleeping for 60 seconds.').exactly(5).times
815
+ expect(context).to receive(:notice).with(/Retrying: attempt [1-6] of 5/).exactly(5).times
816
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": "The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked"}' })
817
+ expect(context).to receive(:notice).with(/Attempt [1-6] of 5 failed/).exactly(5).times
818
+ expect(context).to receive(:err).with(/The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked/)
819
+ allow(provider).to receive(:sleep)
820
+ expect(result).to be_nil
821
+ end
822
+
823
+ it 'writes an error via context and fails to apply when encountering an unexpected error' do
824
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": "The Invoke-DscResource cmdlet is in progress and must return before Invoke-DscResource can be invoked"}' })
825
+ expect(context).to receive(:notice).with(/Invoke-DscResource collision detected: Please stagger the timing of your Puppet runs as this can lead to unexpected behaviour./).once
826
+ expect(context).to receive(:notice).with('Sleeping for 60 seconds.').once
827
+ expect(context).to receive(:notice).with(/Retrying: attempt 1 of 5/).once
828
+ allow(provider).to receive(:sleep)
829
+ expect(ps_manager).to receive(:execute).and_return({ stdout: '{"errormessage": "Some unexpected error"}' }).once
830
+ expect(context).to receive(:err).with(/Some unexpected error/)
831
+ expect(result).to be_nil
832
+ end
833
+ end
834
+
793
835
  context 'when the invocation script returns data without errors' do
794
836
  it 'filters for the correct properties to invoke and returns the results' do
795
837
  expect(ps_manager).to receive(:execute).with("Script: #{apply_props}").and_return({ stdout: '{"in_desired_state": true, "errormessage": null}' })
@@ -981,11 +1023,11 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
981
1023
  end
982
1024
 
983
1025
  describe '.invoke_test_method' do
984
- subject(:result) { provider.invoke_test_method(context, name, expect(subject).to) }
1026
+ subject(:result) { provider.invoke_test_method(context, name, should_hash) }
985
1027
 
986
1028
  let(:name) { { name: 'foo', dsc_name: 'bar' } }
987
- let(:should) { name.merge(dsc_ensure: 'present') }
988
- let(:test_properties) { expect(subject).to.reject { |k, _v| k == :name } }
1029
+ let(:should_hash) { name.merge(dsc_ensure: 'present') }
1030
+ let(:test_properties) { should_hash.reject { |k, _v| k == :name } }
989
1031
  let(:invoke_dsc_resource_data) { nil }
990
1032
 
991
1033
  before do
@@ -995,7 +1037,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
995
1037
  end
996
1038
 
997
1039
  after do
998
- described_class.instance_variable_set(:@cached_test_results, [])
1040
+ provider.instance_variable_set(:@cached_test_results, [])
999
1041
  end
1000
1042
 
1001
1043
  context 'when something went wrong calling Invoke-DscResource' do
@@ -1043,7 +1085,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1043
1085
 
1044
1086
  describe '.instantiated_variables' do
1045
1087
  after do
1046
- described_class.instance_variable_set(:@instantiated_variables, [])
1088
+ provider.instance_variable_set(:@instantiated_variables, [])
1047
1089
  end
1048
1090
 
1049
1091
  it 'sets the instantiated_variables instance variable to {} if not initialized' do
@@ -1051,20 +1093,20 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1051
1093
  end
1052
1094
 
1053
1095
  it 'returns the instantiated_variables instance variable if already initialized' do
1054
- described_class.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
1096
+ provider.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
1055
1097
  expect(provider.instantiated_variables).to eq({ foo: 'bar' })
1056
1098
  end
1057
1099
  end
1058
1100
 
1059
1101
  describe '.clear_instantiated_variables!' do
1060
1102
  after do
1061
- described_class.instance_variable_set(:@instantiated_variables, [])
1103
+ provider.instance_variable_set(:@instantiated_variables, [])
1062
1104
  end
1063
1105
 
1064
1106
  it 'sets the instantiated_variables instance variable to {}' do
1065
- described_class.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
1107
+ provider.instance_variable_set(:@instantiated_variables, { foo: 'bar' })
1066
1108
  expect { provider.clear_instantiated_variables! }.not_to raise_error
1067
- expect(described_class.instance_variable_get(:@instantiated_variables)).to eq({})
1109
+ expect(provider.instance_variable_get(:@instantiated_variables)).to eq({})
1068
1110
  end
1069
1111
  end
1070
1112
 
@@ -1087,16 +1129,16 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1087
1129
  end
1088
1130
 
1089
1131
  after do
1090
- described_class.instance_variable_set(:@logon_failures, [])
1132
+ provider.instance_variable_set(:@logon_failures, [])
1091
1133
  end
1092
1134
 
1093
1135
  it 'returns false if there have been no failed logons with the username/password combination' do
1094
- described_class.instance_variable_set(:@logon_failures, [bad_credential_hash])
1136
+ provider.instance_variable_set(:@logon_failures, [bad_credential_hash])
1095
1137
  expect(provider.logon_failed_already?(good_credential_hash)).to be(false)
1096
1138
  end
1097
1139
 
1098
1140
  it 'returns true if the username/password specified are found in the logon_failures instance variable' do
1099
- described_class.instance_variable_set(:@logon_failures, [good_credential_hash, bad_credential_hash])
1141
+ provider.instance_variable_set(:@logon_failures, [good_credential_hash, bad_credential_hash])
1100
1142
  expect(provider.logon_failed_already?(bad_credential_hash)).to be(true)
1101
1143
  end
1102
1144
  end
@@ -1437,16 +1479,18 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1437
1479
  context 'when the resource does not have the dscmeta_resource_implementation key' do
1438
1480
  let(:test_resource) { {} }
1439
1481
 
1440
- it 'returns nil' do
1441
- expect(result).to be_nil
1482
+ it 'sets $UnmungedPSModulePath to the current PSModulePath' do
1483
+ # since https://github.com/puppetlabs/ruby-pwsh/pull/261 we load vendored path for MOF resources as well
1484
+ expect(result).to match(/\$UnmungedPSModulePath = .+GetEnvironmentVariable.+PSModulePath.+machine/)
1442
1485
  end
1443
1486
  end
1444
1487
 
1445
1488
  context "when the resource's dscmeta_resource_implementation is not 'Class'" do
1446
1489
  let(:test_resource) { { dscmeta_resource_implementation: 'MOF' } }
1447
1490
 
1448
- it 'returns nil' do
1449
- expect(result).to be_nil
1491
+ # since https://github.com/puppetlabs/ruby-pwsh/pull/261 we load vendored path for MOF resources as well
1492
+ it 'sets $UnmungedPSModulePath to the current PSModulePath' do
1493
+ expect(result).to match(/\$UnmungedPSModulePath = .+GetEnvironmentVariable.+PSModulePath.+machine/)
1450
1494
  end
1451
1495
  end
1452
1496
 
@@ -1510,7 +1554,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1510
1554
  end
1511
1555
 
1512
1556
  after do
1513
- described_class.instance_variable_set(:@instantiated_variables, [])
1557
+ provider.instance_variable_set(:@instantiated_variables, [])
1514
1558
  end
1515
1559
 
1516
1560
  it 'writes the ruby representation of the credentials as the value of a key named for the new variable into the instantiated_variables cache' do
@@ -1543,7 +1587,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1543
1587
  subject(:result) { provider.prepare_cim_instances(test_resource) }
1544
1588
 
1545
1589
  after do
1546
- described_class.instance_variable_set(:@instantiated_variables, [])
1590
+ provider.instance_variable_set(:@instantiated_variables, [])
1547
1591
  end
1548
1592
 
1549
1593
  context 'when a cim instance is passed without nested cim instances' do
@@ -1652,7 +1696,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1652
1696
 
1653
1697
  describe '.format_ciminstance' do
1654
1698
  after do
1655
- described_class.instance_variable_set(:@instantiated_variables, [])
1699
+ provider.instance_variable_set(:@instantiated_variables, [])
1656
1700
  end
1657
1701
 
1658
1702
  it 'defines and returns a new cim instance as a PowerShell variable, passing the class name and property hash' do
@@ -1668,7 +1712,7 @@ RSpec.describe Puppet::Provider::DscBaseProvider do
1668
1712
  end
1669
1713
 
1670
1714
  it 'interpolates variables in the case of a cim instance containing a nested instance' do
1671
- described_class.instance_variable_set(:@instantiated_variables, { 'SomeVariable' => { 'bar' => 'ope' } })
1715
+ provider.instance_variable_set(:@instantiated_variables, { 'SomeVariable' => { 'bar' => 'ope' } })
1672
1716
  property_hash = { 'foo' => { 'bar' => 'ope' } }
1673
1717
  expect(provider.format_ciminstance('foo', 'SomeClass', property_hash)).to match(/@\{'foo' = \$SomeVariable\}/)
1674
1718
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-pwsh
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-13 00:00:00.000000000 Z
11
+ date: 2024-01-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: PowerShell code manager for ruby.
14
14
  email: