diff --git a/lib/puppet/parser/functions/docker_run_flags.rb b/lib/puppet/parser/functions/docker_run_flags.rb index f075efd1..fbabc708 100644 --- a/lib/puppet/parser/functions/docker_run_flags.rb +++ b/lib/puppet/parser/functions/docker_run_flags.rb @@ -61,11 +61,24 @@ module Puppet::Parser::Functions " \\\n" end - multi_flags = ->(values, fmt) { + multi_flags = ->(values, fmt, shellescape) { filtered = [values].flatten.compact - filtered.map { |val| (fmt + params_join_char) % call_function('docker::escape', [val]) } + if shellescape + filtered.map { |val| (fmt + params_join_char) % call_function('docker::escape', [val]) } + else + filtered.map { |val| (fmt + params_join_char) % val } + end } + [ + ['-e %s', 'env'], + ['--env-file %s', 'env_file'], + ].each do |(format, key)| + values = opts[key] + new_flags = multi_flags.call(values, format,opts['env_escape']) + flags.concat(new_flags) + end + [ ['--dns %s', 'dns'], ['--dns-search %s', 'dns_search'], @@ -73,15 +86,13 @@ module Puppet::Parser::Functions ['--link %s', 'links'], ['--lxc-conf=%s', 'lxc_conf'], ['--volumes-from %s', 'volumes_from'], - ['-e %s', 'env'], - ['--env-file %s', 'env_file'], ['-p %s', 'ports'], ['-l %s', 'labels'], ['--add-host %s', 'hostentries'], ['-v %s', 'volumes'], ].each do |(format, key)| values = opts[key] - new_flags = multi_flags.call(values, format) + new_flags = multi_flags.call(values, format,true) flags.concat(new_flags) end diff --git a/manifests/run.pp b/manifests/run.pp index 535d6efe..037e5407 100644 --- a/manifests/run.pp +++ b/manifests/run.pp @@ -254,6 +254,7 @@ Variant[String,Array] $custom_unless = [], Optional[String] $remain_after_exit = undef, Boolean $prepare_service_only = false, + Boolean $env_escape = true, ) { include docker::params @@ -310,34 +311,35 @@ $depend_services_array = any2array($depend_services) $docker_run_flags = docker_run_flags({ - cpuset => any2array($cpuset), - disable_network => $disable_network, - dns => any2array($dns), - dns_search => any2array($dns_search), - env => any2array($env), - env_file => any2array($env_file), - expose => any2array($expose), - extra_params => any2array($extra_parameters), - hostentries => any2array($hostentries), - hostname => $hostname, - links => any2array($links), - lxc_conf => any2array($lxc_conf), - memory_limit => $memory_limit, - net => $net, - ports => any2array($ports), - labels => any2array($labels), - privileged => $privileged, - socket_connect => any2array($socket_connect), - tty => $tty, - username => $username, - volumes => any2array($volumes), - volumes_from => any2array($volumes_from), - read_only => $read_only, - health_check_cmd => $health_check_cmd, - restart_on_unhealthy => $restart_on_unhealthy, - health_check_interval => $health_check_interval, - osfamily => $facts['os']['family'], - } + cpuset => any2array($cpuset), + disable_network => $disable_network, + dns => any2array($dns), + dns_search => any2array($dns_search), + env => any2array($env), + env_file => any2array($env_file), + expose => any2array($expose), + extra_params => any2array($extra_parameters), + hostentries => any2array($hostentries), + hostname => $hostname, + links => any2array($links), + lxc_conf => any2array($lxc_conf), + memory_limit => $memory_limit, + net => $net, + ports => any2array($ports), + labels => any2array($labels), + privileged => $privileged, + socket_connect => any2array($socket_connect), + tty => $tty, + username => $username, + volumes => any2array($volumes), + volumes_from => any2array($volumes_from), + read_only => $read_only, + health_check_cmd => $health_check_cmd, + restart_on_unhealthy => $restart_on_unhealthy, + health_check_interval => $health_check_interval, + osfamily => $facts['os']['family'], + env_escape => $env_escape, + } ) $sanitised_title = docker::sanitised_name($title)