diff --git a/REFERENCE.md b/REFERENCE.md index 90d2e1b7..aaf561f3 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -769,7 +769,7 @@ Default value: `$docker::params::tmp_dir` ##### `registry_mirror` -Data type: `Optional[String]` +Data type: `Optional[Variant[String,Array]]` Sets the prefered container registry mirror. diff --git a/lib/puppet/parser/functions/docker_service_flags.rb b/lib/puppet/parser/functions/docker_service_flags.rb index d0374907..72f1e6be 100644 --- a/lib/puppet/parser/functions/docker_service_flags.rb +++ b/lib/puppet/parser/functions/docker_service_flags.rb @@ -76,8 +76,14 @@ module Puppet::Parser::Functions flags << "-H '#{opts['host_socket']}'" end - if opts['registry_mirror'] && opts['registry_mirror'].to_s != 'undef' - flags << "--registry-mirror='#{opts['registry_mirror']}'" + if opts['registry_mirror'].is_a? Array + opts['registry_mirror'].each do |param| + flags << "--registry-mirror='#{param}'" + end + else + if opts['registry_mirror'] && opts['registry_mirror'].to_s != 'undef' + flags << "--registry-mirror='#{opts['registry_mirror']}'" + end end if opts['image'] && opts['image'].to_s != 'undef' diff --git a/manifests/init.pp b/manifests/init.pp index 30303a34..f9f36d3b 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -470,7 +470,7 @@ Optional[Variant[String,Boolean]] $service_after_override = $docker::params::service_after_override, Optional[Boolean] $service_hasstatus = $docker::params::service_hasstatus, Optional[Boolean] $service_hasrestart = $docker::params::service_hasrestart, - Optional[String] $registry_mirror = $docker::params::registry_mirror, + Optional[Variant[String,Array]] $registry_mirror = $docker::params::registry_mirror, Boolean $acknowledge_unsupported_os = false, # Windows specific parameters diff --git a/spec/acceptance/docker_spec.rb b/spec/acceptance/docker_spec.rb index 5ba319c2..143cd3ef 100644 --- a/spec/acceptance/docker_spec.rb +++ b/spec/acceptance/docker_spec.rb @@ -234,6 +234,27 @@ class { 'docker': end end + context 'When registry_mirror is array', win_broken: broken do + let(:pp) do + " + class { 'docker': + registry_mirror => ['http://testmirror1.io', 'http://testmirror2.io'] + } + " + end + + it 'applies with no errors' do + apply_manifest(pp, catch_failures: true) + end + + it 'has all registry mirrors set' do + run_shell('ps -aux | grep docker') do |r| + expect(r.stdout).to match(%r{--registry-mirror=http:\/\/testmirror1.io}) + expect(r.stdout).to match(%r{--registry-mirror=http:\/\/testmirror2.io}) + end + end + end + context 'registry' do let(:registry_address) do "#{registry_host}:#{registry_port}" diff --git a/spec/helper/get_docker_service_flags.rb b/spec/helper/get_docker_service_flags.rb index 152b5c35..9ee6e47b 100644 --- a/spec/helper/get_docker_service_flags.rb +++ b/spec/helper/get_docker_service_flags.rb @@ -69,8 +69,14 @@ def get_docker_service_flags(args) flags << "-H '#{args['host_socket']}'" end - if args['registry_mirror'] && args['registry_mirror'].to_s != 'undef' - flags << "--registry-mirror='#{args['registry_mirror']}'" + if args['registry_mirror'].is_a? Array + args['registry_mirror'].each do |param| + flags << "--registry-mirror='#{param}'" + end + else + if args['registry_mirror'] && args['registry_mirror'].to_s != 'undef' + flags << "--registry-mirror='#{args['registry_mirror']}'" + end end if args['image'] && args['image'].to_s != 'undef' diff --git a/templates/etc/default/docker.erb b/templates/etc/default/docker.erb index d78d4776..083b237c 100644 --- a/templates/etc/default/docker.erb +++ b/templates/etc/default/docker.erb @@ -40,7 +40,8 @@ DOCKER_OPTS="\ <% if @execdriver %> -e <%= @execdriver %> <% end -%> <% if @bip %> --bip=<%= @bip %> <% end -%> <% if @mtu %> --mtu=<%= @mtu %> <% end -%> -<% if @registry_mirror %> --registry-mirror=<%= @registry_mirror %><% end -%> +<% if @registry_mirror.is_a? String %> --registry-mirror=<%= @registry_mirror %><% end -%> +<% if @registry_mirror.is_a? Array %><% @registry_mirror.each do |param| %> --registry-mirror=<%= param %><% end %><% end -%> <% if @storage_driver %> --storage-driver=<%= @storage_driver %><% end -%> <% if @storage_driver == 'devicemapper' -%> <%- if @dm_basesize %> --storage-opt dm.basesize=<%= @dm_basesize %><% end -%> diff --git a/templates/etc/sysconfig/docker.systemd.erb b/templates/etc/sysconfig/docker.systemd.erb index e19217ff..42198ef4 100644 --- a/templates/etc/sysconfig/docker.systemd.erb +++ b/templates/etc/sysconfig/docker.systemd.erb @@ -9,7 +9,8 @@ OPTIONS="<% if @root_dir %><%= @root_dir_flag %> <%= @root_dir %><% end -%> --iptables=<%= @iptables -%> --ip-masq=<%= @ip_masq -%> <% unless @icc == nil %> --icc=<%= @icc %><% end -%> -<% if @registry_mirror %> --registry-mirror=<%= @registry_mirror %><% end -%> +<% if @registry_mirror.is_a? String %> --registry-mirror=<%= @registry_mirror %><% end -%> +<% if @registry_mirror.is_a? Array %><% @registry_mirror.each do |param| %> --registry-mirror=<%= param %><% end %><% end -%> <% if @fixed_cidr %> --fixed-cidr <%= @fixed_cidr %><% end -%> <% if @default_gateway %> --default-gateway <%= @default_gateway %><% end -%> <% if @ipv6 %> --ipv6<% end -%> diff --git a/templates/windows/config/daemon.json.erb b/templates/windows/config/daemon.json.erb index 604846b9..d19f4e9b 100644 --- a/templates/windows/config/daemon.json.erb +++ b/templates/windows/config/daemon.json.erb @@ -13,10 +13,11 @@ <% if @socket_group %>"group": "<%= @socket_group %>",<% end -%> <% if @bridge %>"bridge": "<%= @bridge %>",<% end -%> <% if @fixed_cidr %>"fixed-cidr": "<%= @fixed_cidr %>",<% end -%> - <% if @registry_mirror %>"registry-mirrors": ["<%= @registry_mirror%>"], <% end -%> + <% if @registry_mirror.is_a? String %>"registry-mirrors": ["<%= @registry_mirror %>"], <% end -%> + <% if @registry_mirror.is_a? Array %>"registry-mirrors": ["<%= @registry_mirror.join('", "') %>"], <% end -%> <% if @extra_parameters %><% @extra_parameters_array.each do |param| %> <%= param %> ,<% end %> <% end -%> <% if @root_dir %>"data-root": "<%= @root_dir %>",<% end -%> "labels": <%= @labels_array.to_json %> -} \ No newline at end of file +}