Ottomata has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/280771

Change subject: [WIP] Add new scap::source define to ease bootstrapping of 
repositories on deploy servers
......................................................................

[WIP] Add new scap::source define to ease bootstrapping of repositories on 
deploy servers

scap::source will clone your source repo, and if set, a scap repo
expected to be at scap/$title into /srv/deployment/$title/scap.

This allows for scap/ directories to be separated from source
repositories, and allows scap repos to bootstrap themselves on
deploy servers, instead of relying on trebuchet.

eventlogging/eventbus is the guinea pig here, so this is applied to it.

Bug: T118772
Change-Id: Id0feadb4e0b274a879ec831891e52f0f70c299c1
---
A modules/eventlogging/manifests/deployment/keys.pp
M modules/eventlogging/manifests/deployment/source.pp
M modules/git/manifests/clone.pp
M modules/role/manifests/deployment/server.pp
A modules/role/manifests/eventbus/deployment/source.pp
A modules/scap/manifests/source.pp
6 files changed, 174 insertions(+), 36 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/71/280771/1

diff --git a/modules/eventlogging/manifests/deployment/keys.pp 
b/modules/eventlogging/manifests/deployment/keys.pp
new file mode 100644
index 0000000..673bd72
--- /dev/null
+++ b/modules/eventlogging/manifests/deployment/keys.pp
@@ -0,0 +1,43 @@
+# == Class eventlogging::deployment::keys
+#
+# Include this class on a scap3 deployment server,
+# e.g. tin, deployment-tin, etc.
+# It sets up private keys and adds them to keyholder,
+# allowing certain groups to deploy via ssh using
+# the configured ssh key for the deploy user.
+#
+# You likely don't need to include this class directly.
+# Instead, use the eventlogging::deployment::source define.
+#
+class eventlogging::deployment::keys {
+    require ::keyholder
+    require ::keyholder::monitoring
+
+    $key_fingerprint = $::realm ? {
+        'labs'       => $::labsproject ? {
+            'deployment-prep' => 
'02:9b:99:e2:f0:16:70:a3:d2:5a:e6:02:a3:73:0e:b0',
+            default           => undef,
+        },
+        'production' => 'b6:4e:1a:1b:4b:70:ef:91:31:cd:a3:18:9a:ca:41:44',
+        default      => undef,
+    }
+
+    if !$key_fingerprint {
+        fail('Could not determine keyholder key_fingerprint for scap when 
setting up eventlogging deployment source for eventlogging.')
+    }
+
+    # Use eventlogging-admins group for deployment in production,
+    # and just the current labs project group in labs.
+    $trusted_group = $::realm ? {
+        'labs'  => "project-${::labsproject}",
+        default => 'eventlogging-admins',
+    }
+
+    # For betalabs/deployment-prep, the eventlogging private key has been
+    # added to deployment-puppetmaster:/var/lib/git/private/labs/files/ssh/tin.
+    keyholder::agent { 'eventlogging':
+        trusted_group   => $trusted_group,
+        key_fingerprint => $key_fingerprint,
+        key_file        => 'eventlogging_rsa',
+    }
+}
diff --git a/modules/eventlogging/manifests/deployment/source.pp 
b/modules/eventlogging/manifests/deployment/source.pp
index 35420e9..c9baad8 100644
--- a/modules/eventlogging/manifests/deployment/source.pp
+++ b/modules/eventlogging/manifests/deployment/source.pp
@@ -1,39 +1,27 @@
-# == Class eventlogging::deployment::source
-# Include this class on a scap3 deployment server,
-# e.g. tin, deployment-tin, etc.
-# It sets up private keys and adds them to keyholder,
-# allowing certain groups to deploy via ssh using
-# the configured ssh key for the deploy user.
+# == Define eventlogging::deployment::source
 #
-class eventlogging::deployment::source {
-    require ::keyholder
-    require ::keyholder::monitoring
+# Sets up scap3 deployment source on a deploy server for the eventlogging
+# source repository.
+#
+# This expects that your scap directory is hosted in a repository
+# at scap/eventlogging/$title.  This repository will be cloned
+# alongside of the eventlogging source repo on the deploy server.
+#
+# == Usage
+#
+#   # Make sure both of 'eventlogging' and 'scap/eventlogging/eventbus'
+#   # are both repositories in gerrit.
+#   eventlogging::deployment::source { 'eventbus': }
+#
+define eventlogging::deployment::source()
+    include ::eventlogging::deployment::keys
 
-    $key_fingerprint = $::realm ? {
-        'labs'       => $::labsproject ? {
-            'deployment-prep' => 
'02:9b:99:e2:f0:16:70:a3:d2:5a:e6:02:a3:73:0e:b0',
-            default           => undef,
-        },
-        'production' => 'b6:4e:1a:1b:4b:70:ef:91:31:cd:a3:18:9a:ca:41:44',
-        default      => undef,
-    }
-
-    if !$key_fingerprint {
-        fail('Could not determine keyholder key_fingerprint for scap when 
setting up eventlogging deployment source for eventlogging.')
-    }
-
-    # Use eventlogging-admins group for deployment in production,
-    # and just the current labs project group in labs.
-    $trusted_group = $::realm ? {
-        'labs'  => "project-${::labsproject}",
-        default => 'eventlogging-admins',
-    }
-
-    # For betalabs/deployment-prep, the eventlogging private key has been
-    # added to deployment-puppetmaster:/var/lib/git/private/labs/files/ssh/tin.
-    keyholder::agent { 'eventlogging':
-        trusted_group   => $trusted_group,
-        key_fingerprint => $key_fingerprint,
-        key_file        => 'eventlogging_rsa',
+    # Clones the eventlogging repository into
+    # /srv/deployment/eventlogging/$title and
+    # clones the scap/eventlogging/$title repository
+    # into /srv/deployment/eventlogging/eventbus/scap
+    scap::source { "eventlogging/${title}":
+        repository         => 'eventlogging',
+        recurse_submodules => true,
     }
 }
diff --git a/modules/git/manifests/clone.pp b/modules/git/manifests/clone.pp
index d41be3b..8a4583e 100644
--- a/modules/git/manifests/clone.pp
+++ b/modules/git/manifests/clone.pp
@@ -68,6 +68,7 @@
         default       => 'https://gerrit.wikimedia.org/r/p/%s.git',
     }
 
+
     $remote = $origin ? {
         undef   => sprintf($default_url_format, $title),
         default => $origin,
diff --git a/modules/role/manifests/deployment/server.pp 
b/modules/role/manifests/deployment/server.pp
index 6db95f8..f1ed23c 100644
--- a/modules/role/manifests/deployment/server.pp
+++ b/modules/role/manifests/deployment/server.pp
@@ -10,7 +10,7 @@
     # NOTE: keyholder_group for role::deployment::services
     #       is overridden in hieradata/common/deployment/server.yaml
     include role::deployment::services
-    include eventlogging::deployment::source
+    include role::eventbus::deployment::source
     include phabricator::deployment::source
 
     class { 'deployment::deployment_server':
diff --git a/modules/role/manifests/eventbus/deployment/source.pp 
b/modules/role/manifests/eventbus/deployment/source.pp
new file mode 100644
index 0000000..c1457b5
--- /dev/null
+++ b/modules/role/manifests/eventbus/deployment/source.pp
@@ -0,0 +1,8 @@
+# == Class role::eventbus::deployment::source
+# Configures a deploy server to deploy eventlogging source
+# for the eventbus service.  Scap configs must exist
+# in the scap/eventlogging/eventbus repo.
+#
+class role::eventbus::deployment::source {
+    eventlogging::deployment::source { 'eventbus': }
+}
diff --git a/modules/scap/manifests/source.pp b/modules/scap/manifests/source.pp
new file mode 100644
index 0000000..99aa51f
--- /dev/null
+++ b/modules/scap/manifests/source.pp
@@ -0,0 +1,98 @@
+# == Define scap::source
+#
+# Sets up scap3 deployment source on a deploy server.
+# This will clone $repository at $path.  If $scap_repository is set
+# it will clone it at $path/scap.
+#
+# TODO: more WIP docs!
+#
+# == Parameters
+#
+# [*package_name*]
+#   Repository name in gerrit.  Default: $title
+#
+# [*scap_repository_name]
+#   Default: scap/$title. IF you set this to undef, a scap repo
+#   will not be cloned into the scap/ directory in your source path in
+#   /srv/deployment.
+#
+# [*path*]
+#   Default: /srv/deployment/$title
+#
+# [*owner*]
+#   Default: trebuchet
+#
+# [*group*]
+#   Default: wikidev
+#
+# [*recurse_submodules*]
+#   Default: false
+#
+# == Usage
+#
+#   # Clones the eventlogging repository into
+#   # /srv/deployment/eventlogging/eventbus and
+#   # clones the scap/eventlogging/eventbus repository
+#   # into /srv/deployment/eventlogging/eventbus/scap
+#   scap::source { 'eventlogging/eventbus':
+#       repository         => 'eventlogging',
+#       recurse_submodules => true,
+#   }
+#
+#   # Clone the 'thing/without/external/scap' repsitory into
+#   # /srv/deployment/thing/without/external/scap and
+#   # don't clone any scap repo.
+#   scap::source { 'thing/without/external/scap':
+#       scap_repository => undef,
+#   }
+#
+define scap::source(
+    $repository           = $title,
+    $scap_repository      = "scap/${title}",
+    $path                 = "/srv/deployment/${title}"
+    # TODO: change scap repo owner when scap figures out
+    # how to bootstrap itself properly without trebuchet.
+    $owner                = 'trebuchet'
+    $group                = 'wikidev',
+    $recurse_submodules   = false,
+) {
+    # We can't rely on puppet to manage arbitrary subdirectories.
+    # Use an exec to just make sure that $path's parent directories exist.
+    exec { "mkdir_scap_source_path_${title}":
+        command => "mkdir $(dirname ${path}) && chmod 775 $(dirname ${path}) 
&& chown ${owner}:${group} $(dirname ${path})",
+        path    => '/bin:/usr/bin',
+        unless  => "test -d $(dirname ${path})",
+        user    => 'root',
+    }
+
+    # Clone the source repository at $path.
+    git::clone { "${repository} for ${title}":
+        # Since this define might result in multiple clones of the same
+        # $repository, it is necessary to title the git::clones with unique
+        # names.  If we aren't using the repository name as the $title of
+        # git::clone, then we need to set $origin, and if provided $origin
+        # must be a full git URL. This means we can't yet use phabricator
+        # git URLs.  TODO: Fix git::clone to support repository_names
+        # without specificing full git $origin URLs.
+        origin             => 
"https://gerrit.wikimedia.org/r/p/${repository}.git";
+        directory          => $path,
+        owner              => $owner,
+        group              => $group,
+        shared             => true,
+        recurse_submodules => $recurse_submodules,
+        require            => Exec["mkdir_scap_source_path_${title}"],
+    }
+
+    if $scap_repository {
+        # Clone the scap repository at $path/scap
+        git::clone { "${scap_repository} for ${title}":
+            origin             => 
"https://gerrit.wikimedia.org/r/p/${scap_repository}.git";
+            directory          => "${path}/scap",
+            owner              => $owner,
+            group              => $group,
+            shared             => true,
+            recurse_submodules => $recurse_submodules,
+            require            => Git::Clone[$repository],
+        }
+    }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/280771
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id0feadb4e0b274a879ec831891e52f0f70c299c1
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ottomata <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to