From 5435ae69e8b33467145f17df4d6107c7433c104c Mon Sep 17 00:00:00 2001
From: Dirk Mueller <dirk@dmllr.de>
Date: Wed, 22 Feb 2017 20:43:49 +0100
Subject: [PATCH] Mirror openSUSE Leap 42.2 repositories

Change-Id: Id3fad9ab92ac913f0f31a71873c8f85e14828796
---
 manifests/site.pp                             |  1 +
 .../files/mirror/opensuse-mirror-update.sh    | 54 +++++++++++++++++++
 modules/openstack_project/manifests/mirror.pp | 11 ++++
 .../manifests/mirror_update.pp                | 30 +++++++++++
 4 files changed, 96 insertions(+)
 create mode 100644 modules/openstack_project/files/mirror/opensuse-mirror-update.sh

diff --git a/manifests/site.pp b/manifests/site.pp
index bc2e9f526b..dfc50c5417 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -630,6 +630,7 @@ node 'mirror-update.openstack.org' {
     bandersnatch_keytab => hiera('bandersnatch_keytab'),
     admin_keytab        => hiera('afsadmin_keytab'),
     fedora_keytab       => hiera('fedora_keytab'),
+    opensuse_keytab     => hiera('opensuse_keytab'),
     reprepro_keytab     => hiera('reprepro_keytab'),
     gem_keytab          => hiera('gem_keytab'),
     npm_keytab          => hiera('npm_keytab'),
diff --git a/modules/openstack_project/files/mirror/opensuse-mirror-update.sh b/modules/openstack_project/files/mirror/opensuse-mirror-update.sh
new file mode 100644
index 0000000000..ca20c3485b
--- /dev/null
+++ b/modules/openstack_project/files/mirror/opensuse-mirror-update.sh
@@ -0,0 +1,54 @@
+#!/bin/bash -xe
+# Copyright 2017 SUSE Linux GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+MIRROR_VOLUME=$1
+
+BASE="/afs/.openstack.org/mirror/opensuse"
+MIRROR="rsync://mirrors.kernel.org"
+K5START="k5start -t -f /etc/opensuse.keytab service/opensuse-mirror -- timeout -k 2m 30m"
+
+REPO=leap/42.2
+if ! [ -f $BASE/$REPO ]; then
+    $K5START mkdir -p $BASE/$REPO
+fi
+
+date --iso-8601=ns
+echo "Running rsync releases..."
+$K5START rsync -rlptDvz \
+    --delete \
+    --delete-excluded \
+    --exclude="iso" \
+    $MIRROR/opensuse/distribution/$REPO/ $BASE/$REPO/
+
+REPO=update/leap/42.2
+if ! [ -f $BASE/$REPO ]; then
+    $K5START mkdir -p $BASE/$REPO
+fi
+
+date --iso-8601=ns
+echo "Running rsync updates..."
+$K5START rsync -rlptDvz \
+    --delete \
+    --delete-excluded \
+    --exclude="src/" \
+    --exclude="nosrc/" \
+    $MIRROR/opensuse/update/$REPO/ $BASE/$REPO/
+
+date --iso-8601=ns | $K5START tee $BASE/timestamp.txt
+echo "rsync completed successfully, running vos release."
+k5start -t -f /etc/afsadmin.keytab service/afsadmin -- vos release -v $MIRROR_VOLUME
+
+date --iso-8601=ns
+echo "Done."
diff --git a/modules/openstack_project/manifests/mirror.pp b/modules/openstack_project/manifests/mirror.pp
index b8356c8653..bb49aa2c6c 100644
--- a/modules/openstack_project/manifests/mirror.pp
+++ b/modules/openstack_project/manifests/mirror.pp
@@ -109,6 +109,17 @@ class openstack_project::mirror (
     ]
   }
 
+  # Create the symlink to openSUSE
+  file { "${www_root}/opensuse":
+    ensure  => link,
+    target  => "${mirror_root}/opensuse",
+    owner   => root,
+    group   => root,
+    require => [
+      File["${www_root}"],
+    ]
+  }
+
   # Create the symlink to apt.
   file { "${www_root}/ubuntu":
     ensure  => link,
diff --git a/modules/openstack_project/manifests/mirror_update.pp b/modules/openstack_project/manifests/mirror_update.pp
index 3517d2ccbf..c0ef2a2c82 100644
--- a/modules/openstack_project/manifests/mirror_update.pp
+++ b/modules/openstack_project/manifests/mirror_update.pp
@@ -10,6 +10,7 @@ class openstack_project::mirror_update (
   $centos_keytab = '',
   $epel_keytab = '',
   $fedora_keytab = '',
+  $opensuse_keytab = '',
 ) {
   include ::gnupg
   include ::openstack_project::reprepro_mirror
@@ -336,6 +337,35 @@ class openstack_project::mirror_update (
     ]
   }
 
+  ### openSUSE mirror ###
+  file { '/etc/opensuse.keytab':
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0400',
+    content => $opensuse_keytab,
+  }
+
+  file { '/usr/local/bin/opensuse-mirror-update':
+    ensure  => present,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0755',
+    source  => 'puppet:///modules/openstack_project/mirror/opensuse-mirror-update.sh',
+  }
+
+  cron { 'opensuse mirror':
+    user        => $user,
+    minute      => '0',
+    hour        => '*/6',
+    command     => 'flock -n /var/run/opensuse-mirror.lock opensuse-mirror-update mirror.opensuse >>/var/log/opensuse-mirror.log 2>&1',
+    environment => 'PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
+    require     => [
+       File['/usr/local/bin/opensuse-mirror-update'],
+       File['/etc/afsadmin.keytab'],
+       File['/etc/opensuse.keytab'],
+    ]
+  }
+
   ### Ubuntu Cloud Archive Mirror ###
   ::openstack_project::reprepro { 'ubuntu-cloud-archive-reprepro-mirror':
     confdir       => '/etc/reprepro/ubuntu-cloud-archive',