lib/beaker/hypervisor/docker.rb in beaker-3.18.0 vs lib/beaker/hypervisor/docker.rb in beaker-3.19.0
- old
+ new
@@ -3,10 +3,11 @@
# Docker hypvervisor initializtion
# Env variables supported:
# DOCKER_REGISTRY: Docker registry URL
# DOCKER_HOST: Remote docker host
+ # DOCKER_BUILDARGS: Docker buildargs map
# @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon,
# or a role (String or Symbol) that identifies one or more hosts.
# @param [Hash{Symbol=>String}] options Options to pass on to the hypervisor
def initialize(hosts, options)
require 'docker'
@@ -48,11 +49,13 @@
@hosts.each do |host|
@logger.notify "provisioning #{host.name}"
@logger.debug("Creating image")
- image = ::Docker::Image.build(dockerfile_for(host), { :rm => true })
+ image = ::Docker::Image.build(dockerfile_for(host), {
+ :rm => true, :buildargs => buildargs_for(host)
+ })
if @docker_type == 'swarm'
image_name = "#{@registry}/beaker/#{image.id}"
ret = ::Docker::Image.search(:term => image_name)
if ret.first.nil?
@@ -174,9 +177,31 @@
private
def root_password
'root'
+ end
+
+ def buildargs_for(host)
+ docker_buildargs = {}
+ docker_buildargs_env = ENV['DOCKER_BUILDARGS']
+ if docker_buildargs_env != nil
+ docker_buildargs_env.split(/ +|\t+/).each do |arg|
+ key,value=arg.split(/=/)
+ if key
+ docker_buildargs[key]=value
+ else
+ @logger.warn("DOCKER_BUILDARGS environment variable appears invalid, no key found for value #{value}" )
+ end
+ end
+ end
+ if docker_buildargs.empty?
+ buildargs = host['docker_buildargs'] || {}
+ else
+ buildargs = docker_buildargs
+ end
+ @logger.debug("Docker build buildargs: #{buildargs}")
+ JSON.generate(buildargs)
end
def dockerfile_for(host)
if host['dockerfile'] then
@logger.debug("attempting to load user Dockerfile from #{host['dockerfile']}")