Add registry_mirror to base::docker profile
authorDan Prince <dprince@redhat.com>
Fri, 7 Apr 2017 20:21:39 +0000 (16:21 -0400)
committerDan Prince <dprince@redhat.com>
Sat, 8 Apr 2017 12:48:01 +0000 (08:48 -0400)
This patch adds a new registry_mirror option to help
configure /etc/docker/daemon.json so that we can make use
of HTTP docker mirrors within upstream TripleO CI (infra).

Change-Id: I4b966e9b9b174ca5a6f57974185e0149ea12f232

manifests/profile/base/docker.pp
spec/classes/tripleo_profile_base_docker_spec.rb

index 5e18a85..4797d86 100644 (file)
 #   Set docker_namespace to INSECURE_REGISTRY, used when a local registry
 #   is enabled (defaults to false)
 #
+# [*registry_mirror*]
+#   Configure a registry-mirror in the /etc/docker/daemon.json file.
+#   (defaults to false)
+#
 # [*step*]
 #   step defaults to hiera('step')
 #
 class tripleo::profile::base::docker (
   $docker_namespace = undef,
   $insecure_registry = false,
+  $registry_mirror = false,
   $step = hiera('step'),
 ) {
   if $step >= 1 {
@@ -64,5 +69,23 @@ class tripleo::profile::base::docker (
       subscribe => Package['docker'],
       notify    => Service['docker'],
     }
+
+    if $registry_mirror {
+      $mirror_changes = [
+        'set dict/entry[. = "registry-mirrors"] "registry-mirrors',
+        "set dict/entry[. = \"registry-mirrors\"]/array/string \"${registry_mirror}\""
+      ]
+    } else {
+      $mirror_changes = [ 'rm dict/entry[. = "registry-mirrors"]', ]
+    }
+
+    augeas { 'docker-daemon.json':
+      lens      => 'Json.lns',
+      incl      => '/etc/docker/daemon.json',
+      changes   => $mirror_changes,
+      subscribe => Package['docker'],
+      notify    => Service['docker'],
+    }
+
   }
 }
index 587cc29..b52fe24 100644 (file)
@@ -54,6 +54,21 @@ describe 'tripleo::profile::base::docker' do
 
       it_raises 'a Puppet::Error', /You must provide a \$docker_namespace in order to configure insecure registry/
     end
+
+    context 'with step 1 and registry_mirror configured' do
+      let(:params) { {
+          :registry_mirror => 'http://foo/bar',
+          :step              => 1,
+      } }
+
+      it { is_expected.to contain_class('tripleo::profile::base::docker') }
+      it { is_expected.to contain_package('docker') }
+      it { is_expected.to contain_service('docker') }
+      it {
+        is_expected.to contain_augeas('docker-daemon.json').with_changes(['set dict/entry[. = "registry-mirrors"] "registry-mirrors', "set dict/entry[. = \"registry-mirrors\"]/array/string \"http://foo/bar\""])
+      }
+    end
+
   end
 
   on_supported_os.each do |os, facts|