knife 17.3.13 → 17.3.48
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 +4 -4
- data/lib/chef/knife/core/bootstrap_context.rb +4 -4
- data/lib/chef/knife/core/windows_bootstrap_context.rb +2 -2
- data/lib/chef/knife/ssh.rb +29 -17
- data/lib/chef/knife/supermarket_unshare.rb +2 -1
- data/lib/chef/knife/version.rb +1 -1
- data/spec/integration/cookbook_download_spec.rb +1 -1
- data/spec/unit/knife/core/bootstrap_context_spec.rb +6 -6
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +4 -4
- data/spec/unit/knife/ssh_spec.rb +1 -1
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 31ea76674fe3c36ffd7530564334f6984f1b95cff36f966eb4aa31a51b8fc4cc
         | 
| 4 | 
            +
              data.tar.gz: 88a1f4d1335f549e881c9142171f0ee831bb8a6848de85808d136da9d083cc53
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 18745c29c6a2c249d6ed67eef2d961f3175e4f2f124ba368caed230f2df4c037e58ba14666ca1bae726addc10fd14ae5658be654cc2cb506afc9e4cafe5afb9b
         | 
| 7 | 
            +
              data.tar.gz: 63e4f77b325ba95b279d698885a8b92814938ab2c196b5da79ed36a570dc4f0a8ac26c8c56291686f02530cd8e51fb82f2d58f3cd4da13649c7afe271421728a
         | 
| @@ -171,12 +171,12 @@ class Chef | |
| 171 171 | 
             
                        client_rb << "fips true\n"
         | 
| 172 172 | 
             
                      end
         | 
| 173 173 |  | 
| 174 | 
            -
                      unless chef_config[: | 
| 175 | 
            -
                        client_rb << "file_cache_path \"#{chef_config[: | 
| 174 | 
            +
                      unless chef_config[:unix_bootstrap_file_cache_path].nil?
         | 
| 175 | 
            +
                        client_rb << "file_cache_path \"#{chef_config[:unix_bootstrap_file_cache_path]}\"\n"
         | 
| 176 176 | 
             
                      end
         | 
| 177 177 |  | 
| 178 | 
            -
                      unless chef_config[: | 
| 179 | 
            -
                        client_rb << "file_backup_path \"#{chef_config[: | 
| 178 | 
            +
                      unless chef_config[:unix_bootstrap_file_backup_path].nil?
         | 
| 179 | 
            +
                        client_rb << "file_backup_path \"#{chef_config[:unix_bootstrap_file_backup_path]}\"\n"
         | 
| 180 180 | 
             
                      end
         | 
| 181 181 |  | 
| 182 182 | 
             
                      client_rb
         | 
| @@ -71,8 +71,8 @@ class Chef | |
| 71 71 | 
             
                      client_rb = <<~CONFIG
         | 
| 72 72 | 
             
                        chef_server_url  "#{chef_config[:chef_server_url]}"
         | 
| 73 73 | 
             
                        validation_client_name "#{chef_config[:validation_client_name]}"
         | 
| 74 | 
            -
                        file_cache_path   "#{ChefConfig::PathHelper.escapepath( | 
| 75 | 
            -
                        file_backup_path  "#{ChefConfig::PathHelper.escapepath( | 
| 74 | 
            +
                        file_cache_path   "#{ChefConfig::PathHelper.escapepath(chef_config[:windows_bootstrap_file_cache_path] || "")}"
         | 
| 75 | 
            +
                        file_backup_path  "#{ChefConfig::PathHelper.escapepath(chef_config[:windows_bootstrap_file_backup_path] || "")}"
         | 
| 76 76 | 
             
                        cache_options     ({:path => "#{ChefConfig::PathHelper.escapepath(ChefConfig::Config.etc_chef_dir(windows: true))}\\\\cache\\\\checksums", :skip_expires => true})
         | 
| 77 77 | 
             
                      CONFIG
         | 
| 78 78 |  | 
    
        data/lib/chef/knife/ssh.rb
    CHANGED
    
    | @@ -134,6 +134,18 @@ class Chef | |
| 134 134 | 
             
                    boolean: true,
         | 
| 135 135 | 
             
                    default: false
         | 
| 136 136 |  | 
| 137 | 
            +
                  option :pty,
         | 
| 138 | 
            +
                    long: "--[no-]pty",
         | 
| 139 | 
            +
                    description: "Request a PTY, enabled by default.",
         | 
| 140 | 
            +
                    boolean: true,
         | 
| 141 | 
            +
                    default: true
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                  option :require_pty,
         | 
| 144 | 
            +
                    long: "--[no-]require-pty",
         | 
| 145 | 
            +
                    description: "Raise exception if a PTY cannot be acquired, disabled by default.",
         | 
| 146 | 
            +
                    boolean: true,
         | 
| 147 | 
            +
                    default: false
         | 
| 148 | 
            +
             | 
| 137 149 | 
             
                  def session
         | 
| 138 150 | 
             
                    ssh_error_handler = Proc.new do |server|
         | 
| 139 151 | 
             
                      if config[:on_error]
         | 
| @@ -353,26 +365,26 @@ class Chef | |
| 353 365 | 
             
                    ui.msg(str)
         | 
| 354 366 | 
             
                  end
         | 
| 355 367 |  | 
| 356 | 
            -
                   | 
| 368 | 
            +
                  # @param command [String] the command to run
         | 
| 369 | 
            +
                  # @param session_list [???] list of sessions, one per node
         | 
| 370 | 
            +
                  #
         | 
| 371 | 
            +
                  def ssh_command(command, session_list = session)
         | 
| 372 | 
            +
                    stderr = ""
         | 
| 357 373 | 
             
                    exit_status = 0
         | 
| 358 | 
            -
                    subsession ||= session
         | 
| 359 374 | 
             
                    command = fixup_sudo(command)
         | 
| 360 375 | 
             
                    command.force_encoding("binary") if command.respond_to?(:force_encoding)
         | 
| 361 | 
            -
                     | 
| 362 | 
            -
                      open_session(subsession, command)
         | 
| 363 | 
            -
                    rescue => e
         | 
| 364 | 
            -
                      open_session(subsession, command, true)
         | 
| 365 | 
            -
                    end
         | 
| 366 | 
            -
                  end
         | 
| 367 | 
            -
             | 
| 368 | 
            -
                  def open_session(subsession, command, pty = false)
         | 
| 369 | 
            -
                    stderr = ""
         | 
| 370 | 
            -
                    exit_status = 0
         | 
| 371 | 
            -
                    subsession.open_channel do |chan|
         | 
| 376 | 
            +
                    session_list.open_channel do |chan|
         | 
| 372 377 | 
             
                      if config[:on_error] && exit_status != 0
         | 
| 373 378 | 
             
                        chan.close
         | 
| 374 379 | 
             
                      else
         | 
| 375 | 
            -
                         | 
| 380 | 
            +
                        if config[:pty]
         | 
| 381 | 
            +
                          chan.request_pty do |ch, success|
         | 
| 382 | 
            +
                            unless success
         | 
| 383 | 
            +
                              ui.warn("Failed to obtain a PTY from #{ch.connection.host}")
         | 
| 384 | 
            +
                              raise ArgumentError, "Request for PTY failed" if config[:require_pty]
         | 
| 385 | 
            +
                            end
         | 
| 386 | 
            +
                          end
         | 
| 387 | 
            +
                        end
         | 
| 376 388 | 
             
                        chan.exec command do |ch, success|
         | 
| 377 389 | 
             
                          raise ArgumentError, "Cannot execute #{command}" unless success
         | 
| 378 390 |  | 
| @@ -383,13 +395,11 @@ class Chef | |
| 383 395 | 
             
                              ichannel.send_data("#{get_password}\n")
         | 
| 384 396 | 
             
                            end
         | 
| 385 397 | 
             
                          end
         | 
| 386 | 
            -
             | 
| 387 398 | 
             
                          ch.on_extended_data do |_, _type, data|
         | 
| 388 | 
            -
                            raise ArgumentError if data.eql?("sudo: no tty present and no askpass program specified\n")
         | 
| 399 | 
            +
                            raise ArgumentError, "No PTY present. If a PTY is required use --require-pty" if data.eql?("sudo: no tty present and no askpass program specified\n")
         | 
| 389 400 |  | 
| 390 401 | 
             
                            stderr += data
         | 
| 391 402 | 
             
                          end
         | 
| 392 | 
            -
             | 
| 393 403 | 
             
                          ch.on_request "exit-status" do |ichannel, data|
         | 
| 394 404 | 
             
                            exit_status = [exit_status, data.read_long].max
         | 
| 395 405 | 
             
                          end
         | 
| @@ -398,6 +408,8 @@ class Chef | |
| 398 408 | 
             
                    end
         | 
| 399 409 | 
             
                    session.loop
         | 
| 400 410 | 
             
                    exit_status
         | 
| 411 | 
            +
                  ensure
         | 
| 412 | 
            +
                    session_list.close
         | 
| 401 413 | 
             
                  end
         | 
| 402 414 |  | 
| 403 415 | 
             
                  def get_password
         | 
| @@ -50,7 +50,8 @@ class Chef | |
| 50 50 | 
             
                    rescue Net::HTTPClientException => e
         | 
| 51 51 | 
             
                      raise e unless /Forbidden/.match?(e.message)
         | 
| 52 52 |  | 
| 53 | 
            -
                      ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it."
         | 
| 53 | 
            +
                      ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it & #{config[:supermarket_site]} must allow maintainers to unshare cookbooks."
         | 
| 54 | 
            +
                      ui.warn "The default supermarket #{default_config[:supermarket_site]} does not allow maintainers to unshare cookbooks."
         | 
| 54 55 | 
             
                      exit 1
         | 
| 55 56 | 
             
                    end
         | 
| 56 57 |  | 
    
        data/lib/chef/knife/version.rb
    CHANGED
    
    
| @@ -80,16 +80,16 @@ describe Chef::Knife::Core::BootstrapContext do | |
| 80 80 | 
             
                end
         | 
| 81 81 | 
             
              end
         | 
| 82 82 |  | 
| 83 | 
            -
              describe "when  | 
| 84 | 
            -
                let(:chef_config) { {  | 
| 85 | 
            -
                it "sets  | 
| 83 | 
            +
              describe "when unix_bootstrap_file_cache_path is set" do
         | 
| 84 | 
            +
                let(:chef_config) { { unix_bootstrap_file_cache_path: "/home/opscode/cache" } }
         | 
| 85 | 
            +
                it "sets unix_bootstrap_file_cache_path in the generated config file" do
         | 
| 86 86 | 
             
                  expect(bootstrap_context.config_content).to include("file_cache_path \"/home/opscode/cache\"")
         | 
| 87 87 | 
             
                end
         | 
| 88 88 | 
             
              end
         | 
| 89 89 |  | 
| 90 | 
            -
              describe "when  | 
| 91 | 
            -
                let(:chef_config) { {  | 
| 92 | 
            -
                it "sets  | 
| 90 | 
            +
              describe "when unix_bootstrap_file_backup_path is set" do
         | 
| 91 | 
            +
                let(:chef_config) { { unix_bootstrap_file_backup_path: "/home/opscode/backup" } }
         | 
| 92 | 
            +
                it "sets unix_bootstrap_file_backup_path in the generated config file" do
         | 
| 93 93 | 
             
                  expect(bootstrap_context.config_content).to include("file_backup_path \"/home/opscode/backup\"")
         | 
| 94 94 | 
             
                end
         | 
| 95 95 | 
             
              end
         | 
| @@ -154,8 +154,8 @@ describe Chef::Knife::Core::WindowsBootstrapContext do | |
| 154 154 | 
             
                      config_log_location: STDOUT,
         | 
| 155 155 | 
             
                      chef_server_url: "http://chef.example.com:4444",
         | 
| 156 156 | 
             
                      validation_client_name: "chef-validator-testing",
         | 
| 157 | 
            -
                       | 
| 158 | 
            -
                       | 
| 157 | 
            +
                      windows_bootstrap_file_cache_path: "c:/chef/cache",
         | 
| 158 | 
            +
                      windows_bootstrap_file_backup_path: "c:/chef/backup",
         | 
| 159 159 | 
             
                      cache_options: ({ path: "c:/chef/cache/checksums", skip_expires: true })
         | 
| 160 160 | 
             
                    )
         | 
| 161 161 | 
             
                  )
         | 
| @@ -165,8 +165,8 @@ describe Chef::Knife::Core::WindowsBootstrapContext do | |
| 165 165 | 
             
                  expected = <<~EXPECTED
         | 
| 166 166 | 
             
                    echo.chef_server_url  "http://chef.example.com:4444"
         | 
| 167 167 | 
             
                    echo.validation_client_name "chef-validator-testing"
         | 
| 168 | 
            -
                    echo.file_cache_path   " | 
| 169 | 
            -
                    echo.file_backup_path  " | 
| 168 | 
            +
                    echo.file_cache_path   "c:/chef/cache"
         | 
| 169 | 
            +
                    echo.file_backup_path  "c:/chef/backup"
         | 
| 170 170 | 
             
                    echo.cache_options     ^({:path =^> "C:\\\\chef\\\\cache\\\\checksums", :skip_expires =^> true}^)
         | 
| 171 171 | 
             
                    echo.# Using default node name ^(fqdn^)
         | 
| 172 172 | 
             
                    echo.log_level        :auto
         | 
    
        data/spec/unit/knife/ssh_spec.rb
    CHANGED
    
    | @@ -289,7 +289,7 @@ describe Chef::Knife::Ssh do | |
| 289 289 | 
             
                let(:execution_channel2) { double(:execution_channel, on_data: nil, on_extended_data: nil) }
         | 
| 290 290 | 
             
                let(:session_channel2) { double(:session_channel, request_pty: nil) }
         | 
| 291 291 |  | 
| 292 | 
            -
                let(:session) { double(:session, loop: nil) }
         | 
| 292 | 
            +
                let(:session) { double(:session, loop: nil, close: nil) }
         | 
| 293 293 |  | 
| 294 294 | 
             
                let(:command) { "false" }
         | 
| 295 295 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: knife
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 17.3. | 
| 4 | 
            +
              version: 17.3.48
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Adam Jacob
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-07-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: chef-config
         | 
| @@ -1149,7 +1149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 1149 1149 | 
             
                - !ruby/object:Gem::Version
         | 
| 1150 1150 | 
             
                  version: '0'
         | 
| 1151 1151 | 
             
            requirements: []
         | 
| 1152 | 
            -
            rubygems_version: 3.2. | 
| 1152 | 
            +
            rubygems_version: 3.2.22
         | 
| 1153 1153 | 
             
            signing_key:
         | 
| 1154 1154 | 
             
            specification_version: 4
         | 
| 1155 1155 | 
             
            summary: The knife CLI for Chef Infra.
         |