Puppet Function: docker_run_flags
- Defined in:
- lib/puppet/parser/functions/docker_run_flags.rb
- Function type:
- Ruby 3.x API
Overview
Transforms a hash into a string of docker flags
| 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | # File 'lib/puppet/parser/functions/docker_run_flags.rb', line 20 newfunction(:docker_run_flags, type: :rvalue) do |args| opts = args[0] || {} flags = [] flags << "-u #{call_function('docker::escape', [opts['username']])}" if opts['username'] flags << "-h #{call_function('docker::escape', [opts['hostname']])}" if opts['hostname'] flags << "--restart '#{opts['restart']}'" if opts['restart'] if opts['net'] if opts['net'].is_a? String flags << "--net #{call_function('docker::escape', [opts['net']])}" elsif opts['net'].is_a? Array flags += opts['net'].map { |item| ["--net #{call_function('docker::escape', [item])}"] } end end flags << "-m #{opts['memory_limit']}" if opts['memory_limit'] cpusets = [opts['cpuset']].flatten.compact unless cpusets.empty? value = cpusets.join(',') flags << "--cpuset-cpus=#{value}" end flags << '-n false' if opts['disable_network'] flags << '--privileged' if opts['privileged'] flags << "--health-cmd='#{opts['health_check_cmd']}'" if opts['health_check_cmd'] && opts['health_check_cmd'].to_s != 'undef' flags << "--health-interval=#{opts['health_check_interval']}s" if opts['health_check_interval'] && opts['health_check_interval'].to_s != 'undef' flags << '-t' if opts['tty'] flags << '--read-only=true' if opts['read_only'] params_join_char = if opts['osfamily'] && opts['osfamily'].to_s != 'undef' opts['osfamily'].casecmp('windows').zero? ? " `\n" : " \\\n" else " \\\n" end multi_flags = ->(values, fmt) { filtered = [values].flatten.compact filtered.map { |val| (fmt + params_join_char) % call_function('docker::escape', [val]) } } [ ['--dns %s', 'dns'], ['--dns-search %s', 'dns_search'], ['--expose=%s', 'expose'], ['--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) flags.concat(new_flags) end opts['extra_params'].each do |param| flags << param end # Some software (inc systemd) will truncate very long lines using glibc's # max line length. Wrap options across multiple lines with '\' to avoid flags.flatten.join(params_join_char) end |