knife-windows 3.0.10 → 3.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 429cae6c473c57982b128b35647dc1616c0571bc24edce1a46b1eb3604700379
4
- data.tar.gz: 4a99a1b6187c711adf545a8ce16e7f1fe9659751b39cedf0be96cbfb33eb2dc9
3
+ metadata.gz: 5ed600d9a1b420d45bc08d7eb66179a9cf83c64434a40b5fed4f54e90d9d286c
4
+ data.tar.gz: cdf15fe2cd5359009344941b2506fbd8cddc40d1075e8aaa8da56b3206c97626
5
5
  SHA512:
6
- metadata.gz: cc0a6dc93a56a940f11bd5ff22774b0c02d799cb11465d523c18125335a708c7a50efa67fc63ac53e3325f8219305292fbb8abb5f2c4fabe8c5dbb38f5e4f3ec
7
- data.tar.gz: 55a995dcd21e06fc8420f502f27d9fe7bacf2d4ded1a0c7e890bb3504fd9e4ce5b87f1b8aae43961c468232c24da861c3c458f9b9424edd39e02f5d00a974b75
6
+ metadata.gz: 4d0bf4cbbeb4a9d24a6a029e8a8e65f8f40e453379ab2552c1694a60c48c130836eafdaa6c4cdc9c2839e0722caf118a1abd26b8ddbcfc72a7cdede4e4a30cd6
7
+ data.tar.gz: 940797a147aebee7dab7c95f1a9a4ae4ee34b1c4c8888079dbccabf9783383c3a4cd5a75d0ab9527df6e06324d74e015d844d4e20f2f6fc5c740eafc94903db2
@@ -118,14 +118,16 @@ class Chef
118
118
  def relay_winrm_command(command)
119
119
  Chef::Log.debug(command)
120
120
  @session_results = []
121
-
122
121
  queue = Queue.new
123
122
  @winrm_sessions.each { |s| queue << s }
124
- # These nils will kill the Threads once no more sessions are left
125
- locate_config_value(:concurrency).times { queue << nil }
123
+ num_sessions = locate_config_value(:concurrency)
124
+ num_targets = @winrm_sessions.length
125
+ num_sessions = (num_sessions.nil? || num_sessions == 0) ? num_targets : [num_sessions, num_targets].min
126
126
 
127
+ # These nils will kill the Threads once no more sessions are left
128
+ num_sessions.times { queue << nil }
127
129
  threads = []
128
- locate_config_value(:concurrency).times do
130
+ num_sessions.times do
129
131
  threads << Thread.new do
130
132
  while session = queue.pop
131
133
  run_command_in_thread(session, command)
@@ -43,8 +43,7 @@ class Chef
43
43
  option :concurrency,
44
44
  short: "-C NUM",
45
45
  long: "--concurrency NUM",
46
- description: "The number of allowed concurrent connections",
47
- default: 1,
46
+ description: "The number of allowed concurrent connections - default is number of hosts",
48
47
  proc: lambda { |o| o.to_i }
49
48
  end
50
49
  end
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Windows
3
- VERSION = "3.0.10".freeze
3
+ VERSION = "3.0.11".freeze
4
4
  MAJOR, MINOR, TINY = VERSION.split(".")
5
5
  end
6
6
  end
@@ -495,4 +495,95 @@ describe Chef::Knife::Winrm do
495
495
  end
496
496
  end
497
497
  end
498
+
499
+ context "Impact of concurrency value when target nodes are 3" do
500
+ let(:winrm_user) { "testuser" }
501
+ let(:transport) { "plaintext" }
502
+ let(:password) { "testpassword" }
503
+ let(:protocol) { "basic" }
504
+ let(:knife_args) do
505
+ [
506
+ "-m", "localhost knownhost somehost",
507
+ "-x", winrm_user,
508
+ "-P", password,
509
+ "-w", transport,
510
+ "--winrm-authentication-protocol", protocol,
511
+ "echo helloworld"
512
+ ]
513
+ end
514
+ let(:winrm_connection) { Dummy::Connection.new }
515
+
516
+ subject { Chef::Knife::Winrm.new(knife_args) }
517
+
518
+ context "when concurrency limit is not set" do
519
+ it "spawns a number of connection threads equal to the number of target nodes" do
520
+ allow(subject).to receive(:run_command_in_thread).and_return("echo helloworld")
521
+ expect(Thread).to receive(:new).exactly(3).times.and_call_original
522
+ subject.configure_session
523
+ subject.relay_winrm_command(knife_args.last)
524
+ end
525
+ end
526
+
527
+ context "when concurrency limit is set" do
528
+ it "starts only the required number of threads when there are fewer targets than threads" do
529
+ knife_args.push("-C", "4")
530
+ allow(subject).to receive(:run_command_in_thread).and_return("echo helloworld")
531
+ expect(Thread).to receive(:new).exactly(3).times.and_call_original
532
+ subject.configure_session
533
+ subject.relay_winrm_command(knife_args.last)
534
+ end
535
+ it "starts only the requested number of threads when there are as many targets as threads" do
536
+ knife_args.push("-C", "3")
537
+ allow(subject).to receive(:run_command_in_thread).and_return("echo helloworld")
538
+ expect(Thread).to receive(:new).exactly(3).times.and_call_original
539
+ subject.configure_session
540
+ subject.relay_winrm_command(knife_args.last)
541
+ end
542
+ it "starts only the requested number of threads when there are more targets then threads" do
543
+ knife_args.push("-C", "2")
544
+ allow(subject).to receive(:run_command_in_thread).and_return("echo helloworld")
545
+ expect(Thread).to receive(:new).exactly(2).times.and_call_original
546
+ subject.configure_session
547
+ subject.relay_winrm_command(knife_args.last)
548
+ end
549
+ end
550
+
551
+ context "should call run_command_in_thread thrice when" do
552
+ it "concurrency not set" do
553
+ expect(subject).to receive(:run_command_in_thread).thrice
554
+ subject.configure_session
555
+ subject.relay_winrm_command(knife_args.last)
556
+ end
557
+ it "concurrency set to 4" do
558
+ knife_args.push("-C", "4")
559
+ expect(subject).to receive(:run_command_in_thread).thrice
560
+ subject.configure_session
561
+ subject.relay_winrm_command(knife_args.last)
562
+ end
563
+ it "concurrency set to 3" do
564
+ knife_args.push("-C", "3")
565
+ expect(subject).to receive(:run_command_in_thread).thrice
566
+ subject.configure_session
567
+ subject.relay_winrm_command(knife_args.last)
568
+ end
569
+ it "concurrency set to 2" do
570
+ knife_args.push("-C", "2")
571
+ expect(subject).to receive(:run_command_in_thread).thrice
572
+ subject.configure_session
573
+ subject.relay_winrm_command(knife_args.last)
574
+ end
575
+ it "concurrency set to 1" do
576
+ knife_args.push("-C", "1")
577
+ expect(subject).to receive(:run_command_in_thread).thrice
578
+ subject.configure_session
579
+ subject.relay_winrm_command(knife_args.last)
580
+ end
581
+ it "concurrency set to 0" do
582
+ knife_args.push("-C", "0")
583
+ expect(subject).to receive(:run_command_in_thread).thrice
584
+ subject.configure_session
585
+ subject.relay_winrm_command(knife_args.last)
586
+ end
587
+ end
588
+ end
498
589
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-windows
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.10
4
+ version: 3.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Chisamore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-30 00:00:00.000000000 Z
11
+ date: 2020-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef