Method: Beaker::Docker#cleanup

Defined in:
lib/beaker/hypervisor/docker.rb

#cleanupObject



438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
# File 'lib/beaker/hypervisor/docker.rb', line 438

def cleanup
  @logger.notify "Cleaning up docker"
  @hosts.each do |host|
    # leave the container running if docker_preserve_container is set
    # setting docker_preserve_container also implies docker_preserve_image
    # is set, since you can't delete an image that's the base of a running
    # container
    unless host['docker_preserve_container']
      container = find_container(host)
      if container
        @logger.debug("stop container #{container.id}")
        begin
          container.kill
          sleep 2 # avoid a race condition where the root FS can't unmount
        rescue Excon::Errors::ClientError => e
          @logger.warn("stop of container #{container.id} failed: #{e.response.body}")
        end
        @logger.debug("delete container #{container.id}")
        begin
          container.delete(force: true)
        rescue Excon::Errors::ClientError => e
          @logger.warn("deletion of container #{container.id} failed: #{e.response.body}")
        end
      end

      # Do not remove the image if docker_preserve_image is set to true, otherwise remove it
      unless host['docker_preserve_image']
        image_id = host['docker_image_id']

        if image_id
          @logger.debug("deleting image #{image_id}")
          begin
            ::Docker::Image.remove(image_id)
          rescue Excon::Errors::ClientError => e
            @logger.warn("deletion of image #{image_id} failed: #{e.response.body}")
          rescue ::Docker::Error::DockerError => e
            @logger.warn("deletion of image #{image_id} caused internal Docker error: #{e.message}")
          end
        else
          @logger.warn("Intended to delete the host's docker image, but host['docker_image_id'] was not set")
        end
      end
    end
  end
end