Ottomata has submitted this change and it was merged.

Change subject: Hieraize keyholder::agent configuration
......................................................................


Hieraize keyholder::agent configuration

Move keyholder::agent configuration to hiera to simplify keyholder
configuration. Proliferation of *::deploy::source classes is messy
and complicates the already too complex process of adding a new
service group/key to the deployment masters.

Bug: T130419
Change-Id: Id5002cc9449deb0223f27af67a30a86c6187bfd9
---
M hieradata/labs/deployment-prep/common.yaml
M hieradata/role/common/deployment/server.yaml
M modules/admin/data/data.yaml
D modules/eventlogging/manifests/deployment/source.pp
M modules/keyholder/manifests/agent.pp
D modules/phabricator/manifests/deployment/source.pp
M modules/role/manifests/deployment/server.pp
D modules/role/manifests/deployment/services.pp
A modules/scap/manifests/server.pp
9 files changed, 78 insertions(+), 93 deletions(-)

Approvals:
  Ottomata: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/hieradata/labs/deployment-prep/common.yaml 
b/hieradata/labs/deployment-prep/common.yaml
index 92d06e0..7ca3da6 100644
--- a/hieradata/labs/deployment-prep/common.yaml
+++ b/hieradata/labs/deployment-prep/common.yaml
@@ -212,3 +212,16 @@
             deployment-kafka02.deployment-prep.eqiad.wmflabs:
                 id: 1
 
+keyholder::agents:
+  phabricator:
+    trusted_group: project-%{::labsproject}
+    key_fingerprint: 39:b3:2c:a7:b2:80:65:ff:0c:97:e1:22:88:6c:59:10
+    key_secret: phabricator/phab_deploy_private_key
+  eventlogging:
+    trusted_group: project-%{::labsproject}
+    key_fingerprint: 02:9b:99:e2:f0:16:70:a3:d2:5a:e6:02:a3:73:0e:b0
+    key_file: eventlogging_rsa
+  deploy-service:
+    trusted_group: deploy-service
+    key_fingerprint: 6d:54:92:8b:39:10:f5:9b:84:40:36:ef:3c:9a:6d:d8
+    key_file: servicedeploy_rsa
diff --git a/hieradata/role/common/deployment/server.yaml 
b/hieradata/role/common/deployment/server.yaml
index e7a047b..a4675f3 100644
--- a/hieradata/role/common/deployment/server.yaml
+++ b/hieradata/role/common/deployment/server.yaml
@@ -6,6 +6,7 @@
   - wdqs-admins
   - eventlogging-admins
   - aqs-admins
+  - deploy-phabricator
 debdeploy::grains:
   debdeploy-deployment:
     value: standard
@@ -23,9 +24,20 @@
       light_process_count: 0
       light_process_file_prefix:
 
-# Override keyholder_group for role::deployment::services
-# so that aqs-admins can deploy AQS via scap using the
-# deploy-service key.
-role::deployment::services::keyholder_group:
-    - deploy-service
-    - aqs-admins
+keyholder::agents:
+  phabricator:
+    trusted_group: deploy-phabricator
+    key_fingerprint: 39:b3:2c:a7:b2:80:65:ff:0c:97:e1:22:88:6c:59:10
+    key_secret: phabricator/phab_deploy_private_key
+  eventlogging:
+    trusted_group: eventlogging-admins
+    key_fingerprint: b6:4e:1a:1b:4b:70:ef:91:31:cd:a3:18:9a:ca:41:44
+  deploy-service:
+    trusted_group:
+      - deploy-service
+      - aqs-admins
+    key_fingerprint: 6d:54:92:8b:39:10:f5:9b:84:40:36:ef:3c:9a:6d:d8
+    key_file: servicedeploy_rsa
+  dumpsdeploy:
+    trusted_group: ops
+    key_fingerprint: 86:c9:17:ab:b7:00:79:b5:8a:c5:b5:ee:29:24:c9:2f'
diff --git a/modules/admin/data/data.yaml b/modules/admin/data/data.yaml
index 9ed5d59..e40b53f 100644
--- a/modules/admin/data/data.yaml
+++ b/modules/admin/data/data.yaml
@@ -494,6 +494,12 @@
     members: [krenair]
     privileges: ['ALL = (ALL) NOPASSWD: ALL']
 
+  deploy-phabricator:
+    description: Group of phabricator deployers
+    gid: 777
+    members: [twentyafterfour,demon,rush]
+    privileges: []
+
 users:
   rush:
     ensure: present
diff --git a/modules/eventlogging/manifests/deployment/source.pp 
b/modules/eventlogging/manifests/deployment/source.pp
deleted file mode 100644
index 35420e9..0000000
--- a/modules/eventlogging/manifests/deployment/source.pp
+++ /dev/null
@@ -1,39 +0,0 @@
-# == 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.
-#
-class eventlogging::deployment::source {
-    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/keyholder/manifests/agent.pp 
b/modules/keyholder/manifests/agent.pp
index 1665e20..8cdc9de 100644
--- a/modules/keyholder/manifests/agent.pp
+++ b/modules/keyholder/manifests/agent.pp
@@ -24,7 +24,7 @@
 # === Examples
 #
 #  keyholder::agent { 'mwdeploy':
-#      keyfile         => 'mwdeploy_key_rsa',
+#      key_file         => 'mwdeploy_key_rsa',
 #      trusted_group   => ['wikidev', 'mwdeploy'],
 #      key_fingerprint => '00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00'
 #      require         => Group['wikidev'],
@@ -35,7 +35,11 @@
     $key_fingerprint,
     $key_file = "${name}_rsa",
     $key_content = undef,
+    $key_secret = undef,
 ) {
+    require ::keyholder
+    require ::keyholder::monitoring
+
     file { "/etc/keyholder-auth.d/${name}.yml":
         content => inline_template("---\n<% [*@trusted_group].each do |g| 
%><%= g %>: ['<%= @key_fingerprint %>']\n<% end %>"),
         owner   => 'root',
@@ -48,6 +52,10 @@
         keyholder::private_key { $key_file:
             content  => $key_content,
         }
+    } elsif $key_secret {
+        keyholder::private_key { $key_file:
+            content => secret($key_secret)
+        }
     } else {
         keyholder::private_key { $key_file:
             source  => "puppet:///private/ssh/tin/${key_file}",
diff --git a/modules/phabricator/manifests/deployment/source.pp 
b/modules/phabricator/manifests/deployment/source.pp
deleted file mode 100644
index ada4d84..0000000
--- a/modules/phabricator/manifests/deployment/source.pp
+++ /dev/null
@@ -1,25 +0,0 @@
-# == Class phabricator::deployment::source
-# Include this class on a scap3 deployment server (e.g. tin, 
deployment-bastion)
-# to configure the keyholder agent.
-#
-# This sets up private keys and adds them to keyholder, allowing members of the
-# trusted_group to deploy via ssh using the configured ssh key for the
-# deploy user.
-#
-# TODO: I'd like to move this information to hiera so that we can consolodate
-# the keyholder configuration in one place instead of scattering it around in
-# service::deployment::source classes.
-
-class phabricator::deployment::source(
-  $key_fingerprint      = '39:b3:2c:a7:b2:80:65:ff:0c:97:e1:22:88:6c:59:10',
-  $trusted_group        = 'phabricator-roots'
-) {
-    require ::keyholder
-    require ::keyholder::monitoring
-
-    keyholder::agent { 'phabricator':
-        trusted_group   => $trusted_group,
-        key_fingerprint => $key_fingerprint,
-        key_content     => secret('phabricator/phab_deploy_private_key'),
-    }
-}
diff --git a/modules/role/manifests/deployment/server.pp 
b/modules/role/manifests/deployment/server.pp
index c318aae..322bdb3 100644
--- a/modules/role/manifests/deployment/server.pp
+++ b/modules/role/manifests/deployment/server.pp
@@ -7,12 +7,12 @@
     # Can't include this while scap is present on the deployment server:
     # include misc::deployment::scripts
     include role::deployment::mediawiki
-    # NOTE: keyholder_group for role::deployment::services
-    #       is overridden in hieradata/common/deployment/server.yaml
-    include role::deployment::services
-    include eventlogging::deployment::source
-    include phabricator::deployment::source
-    include snapshot::deployment::source
+
+    # scap::server will ensure that all keyholder::agents
+    # declared in hiera will exist.  scap::server is
+    # for generic repository deployment and does not have
+    # anything to do with Mediawiki.
+    include scap::server
 
     class { 'deployment::deployment_server':
         deployment_group => $deployment_group,
diff --git a/modules/role/manifests/deployment/services.pp 
b/modules/role/manifests/deployment/services.pp
deleted file mode 100644
index cecd9ca..0000000
--- a/modules/role/manifests/deployment/services.pp
+++ /dev/null
@@ -1,16 +0,0 @@
-# === Class role::deployment::services
-# Installs the keyholder agent for deploying services
-class role::deployment::services (
-    $keyholder_user  = 'deploy-service',
-    $keyholder_group = 'deploy-service',
-    $key_fingerprint  = '6d:54:92:8b:39:10:f5:9b:84:40:36:ef:3c:9a:6d:d8',
-) {
-    require ::keyholder
-    require ::keyholder::monitoring
-
-    keyholder::agent { $keyholder_user:
-        trusted_group   => $keyholder_group,
-        key_fingerprint => $key_fingerprint,
-        key_file        => 'servicedeploy_rsa',
-    }
-}
diff --git a/modules/scap/manifests/server.pp b/modules/scap/manifests/server.pp
new file mode 100644
index 0000000..543a182
--- /dev/null
+++ b/modules/scap/manifests/server.pp
@@ -0,0 +1,26 @@
+# == Class: scap::server
+#
+# Configures dependencies for a scap3 deployment server.  This includes
+# setting up ssh agent keys and repositories configured for deployment.
+#
+# This class creates keyholder::agent resources based on
+# the contents of the 'keyholder::agents' hiera variable.
+#
+# Legacy scap and mediawiki deployment dependencies are in
+# scap::master.
+#
+class scap::server {
+    require ::scap
+
+    # keyholder is an ssh agent proxy that allows members of select groups to
+    # connect using ssh keys shared with the group. This facilitates multiple
+    # deployers to deploy over ssh to corresponding scap::target instances.
+
+    # For a given deployment server, we list the details of each key in hiera
+    # under keyholder::agents, actual keys are stored in the `secret` module
+    # which is kept in a private location in the puppet modulepath.
+    $agent_keys = hiera_hash('keyholder::agents', {})
+
+    # Create an instance of keyholder::agent for each of the key specs in 
hiera:
+    create_resources('keyholder::agent', $agent_keys)
+}

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Id5002cc9449deb0223f27af67a30a86c6187bfd9
Gerrit-PatchSet: 24
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: 20after4 <[email protected]>
Gerrit-Reviewer: 20after4 <[email protected]>
Gerrit-Reviewer: ArielGlenn <[email protected]>
Gerrit-Reviewer: Dzahn <[email protected]>
Gerrit-Reviewer: Mobrovac <[email protected]>
Gerrit-Reviewer: Ottomata <[email protected]>
Gerrit-Reviewer: Thcipriani <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to