Ryan Lane has submitted this change and it was merged.

Change subject: Maintain repositories on deployment server
......................................................................


Maintain repositories on deployment server

To avoid any manual steps in the deployment system it's necessary
to maintain the repositories on the deployment server for initial
clones and inits. This change adds an upstream config option for
repositories and does an initial clone/init and configuration
of all repositories configured.

Change-Id: I504f2f5e5936652c0783c38eaff080e18324a9be
---
M manifests/role/deployment.pp
M modules/deployment/files/modules/deploy.py
M modules/deployment/manifests/deployment_server.pp
M modules/deployment/manifests/salt_master.pp
4 files changed, 95 insertions(+), 37 deletions(-)

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



diff --git a/manifests/role/deployment.pp b/manifests/role/deployment.pp
index 44b4470..3bbf30a 100644
--- a/manifests/role/deployment.pp
+++ b/manifests/role/deployment.pp
@@ -2,13 +2,15 @@
 class role::deployment::config {
   $repo_config = {
     'common'                         => {
-        'grain' => 'mediawiki',
+        'grain'    => 'mediawiki',
+        'upstream' => 
'https://gerrit.wikimedia.org/r/operations/mediawiki-config',
     },
     'private'                        => {
         'grain' => 'mediawiki',
     },
     'slot0'                          => {
         'grain'               => 'mediawiki',
+        'upstream'            => 
'https://gerrit.wikimedia.org/r/mediawiki/core',
         'submodule_sed_regex' => {
           'https://gerrit.wikimedia.org/r/p/mediawiki' => 
'__REPO_URL__/.git/modules',
           '.git' => '',
@@ -19,7 +21,8 @@
         },
     },
     'slot1'                          => {
-        'grain' => 'mediawiki',
+        'grain'               => 'mediawiki',
+        'upstream'            => 
'https://gerrit.wikimedia.org/r/mediawiki/core',
         'submodule_sed_regex' => {
           'https://gerrit.wikimedia.org/r/p/mediawiki' => 
'__REPO_URL__/.git/modules',
           '.git' => '',
@@ -30,7 +33,8 @@
         },
     },
     'beta0'                          => {
-        'grain' => 'mediawiki',
+        'grain'               => 'mediawiki',
+        'upstream'            => 
'https://gerrit.wikimedia.org/r/mediawiki/core',
         'submodule_sed_regex' => {
           'https://gerrit.wikimedia.org/r/p/mediawiki' => 
'__REPO_URL__/.git/modules',
           '.git' => '',
@@ -53,10 +57,12 @@
         'grain'     => 'mediawiki',
     },
     'gdash/gdash'                    => {
-        'grain' => 'gdash',
+        'grain'    => 'gdash',
+        'upstream' => 
'https://gerrit.wikimedia.org/r/operations/software/gdash',
     },
     'parsoid/Parsoid'                => {
         'grain'                 => 'parsoid',
+        'upstream'              => 
'https://gerrit.wikimedia.org/r/mediawiki/extensions/Parsoid',
         'checkout_module_calls' => {
             'parsoid.config_symlink'  => ['__REPO__'],
             'parsoid.restart_parsoid' => ['__REPO__'],
@@ -69,19 +75,23 @@
         },
     },
     'eventlogging/EventLogging'      => {
-        'grain' => 'eventlogging',
+        'grain'    => 'eventlogging',
+        'upstream' => 
'https://gerrit.wikimedia.org/r/mediawiki/extensions/EventLogging',
     },
     'fluoride/fluoride'              => {
-        'grain' => 'fluoride',
+        'grain'    => 'fluoride',
+        'upstream' => 
'https://gerrit.wikimedia.org/r/mediawiki/tools/fluoride',
     },
     'test/testrepo'                  => {
         'grain' => 'testrepo',
     },
     'elasticsearch/plugins'          => {
-        'grain' => 'elasticsearchplugins',
+        'grain'    => 'elasticsearchplugins',
+        'upstream' => 
'https://gerrit.wikimedia.org/r/operations/software/elasticsearch/plugins',
     },
     'analytics/kraken'               => {
-        'grain' => 'analytics-kraken',
+        'grain'    => 'analytics-kraken',
+        'upstream' => 'https://gerrit.wikimedia.org/r/p/analytics/kraken',
     },
   }
 }
@@ -177,6 +187,7 @@
     vhost_name         => "10.64.0.196",
     port               => 80,
     docroot            => "/srv/deployment",
+    docroot_owner      => "sartoris",
     docroot_group      => "wikidev",
     docroot_dir_allows  => ["10.0.0.0/16","10.64.0.0/16","208.80.152.0/22"],
     serveradmin                => "[email protected]",
@@ -208,6 +219,8 @@
     vhost_name         => "10.4.0.58",
     port               => 80,
     docroot            => "/srv/deployment",
+    docroot_owner      => "sartoris",
+    docroot_group      => "project-deployment-prep",
     docroot_dir_allows  => ["10.4.0.0/16"],
     serveradmin                => "[email protected]",
     configure_firewall         => false,
@@ -235,6 +248,7 @@
     vhost_name         => "10.4.1.19",
     port               => 80,
     docroot            => "/srv/deployment",
+    docroot_owner      => "sartoris",
     docroot_group      => "project-sartoris",
     docroot_dir_allows  => ["10.4.0.0/16"],
     serveradmin                => "[email protected]",
diff --git a/modules/deployment/files/modules/deploy.py 
b/modules/deployment/files/modules/deploy.py
index c2a7ea3..f814568 100644
--- a/modules/deployment/files/modules/deploy.py
+++ b/modules/deployment/files/modules/deploy.py
@@ -73,27 +73,50 @@
     config.setdefault('checkout_module_calls', {})
     config.setdefault('fetch_module_calls', {})
     config.setdefault('sync_script', 'shared.py')
+    config.setdefault('upstream', None)
     return config
 
 
-def init_sync_links():
+def deployment_server_init():
     serv = _get_redis_serv()
     is_deployment_server = __grains__.get('deployment_server')
     hook_dir = __grains__.get('deployment_global_hook_dir')
     if not is_deployment_server:
         return 0
+    deploy_user = __grains__.get('deployment_repo_user')
     repo_config = __pillar__.get('repo_config')
     for repo in repo_config:
         config = get_config(repo)
         repo_sync_dir = '{0}/sync/{1}'.format(hook_dir, os.path.dirname(repo))
         sync_link = '{0}/{1}.sync'.format(repo_sync_dir,
                                           os.path.basename(repo))
+        # Create repo sync dir
         if not __salt__['file.directory_exists'](repo_sync_dir):
             __salt__['file.mkdir'](repo_sync_dir)
+        # Create repo sync script link
         if not __salt__['file.file_exists'](sync_link):
             sync_script = '{0}/sync/{1}'.format(hook_dir,
                                                 config['sync_script'])
             __salt__['file.symlink'](sync_script, sync_link)
+        # Clone repo from upstream or init repo with no upstream
+        if not __salt__['file.directory_exists'](config['location'] + '/.git'):
+            if config['upstream']:
+                cmd = '/usr/bin/git clone %s/.git %s' % (config['upstream'],
+                                                         config['location'])
+            else:
+                cmd = '/usr/bin/git init %s' % (config['location'])
+            status = __salt__['cmd.retcode'](cmd, runas=deploy_user,
+                                             umask=002)
+            if status != 0:
+                return status
+            # git clone does ignores umask and does explicit mkdir with 755
+            __salt__['file.set_mode'](config['location'], 2775)
+            # Set the repo name in the repo's config
+            cmd = 'git config deploy.tag-prefix %s' % repo
+            status = __salt__['cmd.retcode'](cmd, cwd=config['location'],
+                                             runas=deploy_user, umask=002)
+            if status != 0:
+                return status
     return 0
 
 
diff --git a/modules/deployment/manifests/deployment_server.pp 
b/modules/deployment/manifests/deployment_server.pp
index 21ac7ef..1b1fec6 100644
--- a/modules/deployment/manifests/deployment_server.pp
+++ b/modules/deployment/manifests/deployment_server.pp
@@ -1,16 +1,32 @@
-class 
deployment::deployment_server($deployment_conffile="/etc/git-deploy/git-deploy.conf",
 $deployment_ignorefile="/etc/git-deploy/gitignore", 
$deployment_ignores=['.deploy'], $deployment_restrict_umask="002", 
$deployment_block_file="/etc/ROLLOUTS_BLOCKED", $deployment_support_email="", 
$deployment_repo_name_detection="dot-git-parent-dir", 
$deployment_announce_email="", $deployment_send_mail_on_sync="false", 
$deployment_send_mail_on_revert="false", 
$deployment_log_directory="/var/log/git-deploy", 
$deployment_log_timing_data="false", 
$deployment_git_deploy_dir="/var/lib/git-deploy", 
$deployment_per_repo_config={}, $deployer_groups=[]) {
-  if ! defined(Package["git-deploy"]){
-    package { "git-deploy":
+class deployment::deployment_server(
+  $deployment_conffile='/etc/git-deploy/git-deploy.conf',
+  $deployment_ignorefile='/etc/git-deploy/gitignore',
+  $deployment_ignores=['.deploy'],
+  $deployment_restrict_umask='002',
+  $deployment_block_file='/etc/ROLLOUTS_BLOCKED',
+  $deployment_support_email='',
+  $deployment_repo_name_detection='dot-git-parent-dir',
+  $deployment_announce_email='',
+  $deployment_send_mail_on_sync='false',
+  $deployment_send_mail_on_revert='false',
+  $deployment_log_directory='/var/log/git-deploy',
+  $deployment_log_timing_data='false',
+  $deployment_git_deploy_dir='/var/lib/git-deploy',
+  $deployment_per_repo_config={},
+  $deployer_groups=[]
+  ) {
+  if ! defined(Package['git-deploy']){
+    package { 'git-deploy':
       ensure => present;
     }
   }
-  if ! defined(Package["git-core"]){
-    package { "git-core":
+  if ! defined(Package['git-core']){
+    package { 'git-core':
       ensure => present;
     }
   }
-  if ! defined(Package["python-redis"]){
-    package { "python-redis":
+  if ! defined(Package['python-redis']){
+    package { 'python-redis':
       ensure => present;
     }
   }
@@ -35,70 +51,75 @@
       group => root,
       require => [File["${$deployment_global_hook_dir}"]];
     "${$deployment_global_hook_dir}/sync/deploylib.py":
-      source => "puppet:///deployment/git-deploy/hooks/deploylib.py",
+      source => 'puppet:///deployment/git-deploy/hooks/deploylib.py',
       mode => 0555,
       owner => root,
       group => root,
       require => [File["${$deployment_global_hook_dir}/sync"]];
     "${$deployment_global_hook_dir}/sync/shared.py":
-      source => "puppet:///deployment/git-deploy/hooks/shared.py",
+      source => 'puppet:///deployment/git-deploy/hooks/shared.py',
       mode => 0555,
       owner => root,
       group => root,
       require => [File["${$deployment_global_hook_dir}/sync"]];
     "${$deployment_global_hook_dir}/sync/depends.py":
-      source => "puppet:///deployment/git-deploy/hooks/depends.py",
+      source => 'puppet:///deployment/git-deploy/hooks/depends.py',
       mode => 0555,
       owner => root,
       group => root,
       require => [File["${$deployment_global_hook_dir}/sync"]];
     "${$deployment_dependencies_dir}/l10n":
-      source => 
"puppet:///deployment/git-deploy/dependencies/l10nupdate-quick",
+      source => 
'puppet:///deployment/git-deploy/dependencies/l10nupdate-quick',
       mode => 0555,
       owner => root,
       group => root,
       require => [File["${$deployment_dependencies_dir}"]];
   }
   file {
-    "/etc/gitconfig":
-      content => template("deployment/git-deploy/gitconfig.erb"),
+    '/etc/gitconfig':
+      content => template('deployment/git-deploy/gitconfig.erb'),
       mode => 0444,
       owner => root,
       group => root,
-      require => [Package["git-core"]];
+      require => [Package['git-core']];
     "${deployment_conffile}":
-      content => template("deployment/git-deploy/git-deploy.conf.erb"),
+      content => template('deployment/git-deploy/git-deploy.conf.erb'),
       mode => 0444,
       owner => root,
       group => root;
     "${deployment_ignorefile}":
-      content => template("deployment/git-deploy/gitignore.erb"),
+      content => template('deployment/git-deploy/gitignore.erb'),
       mode => 0444,
       owner => root,
       group => root;
-    "/usr/local/bin/deploy-info":
+    '/usr/local/bin/deploy-info':
       owner => root,
       group => root,
       mode => 0555,
-      source => "puppet:///deployment/git-deploy/utils/deploy-info",
-      require => [Package["python-redis"]];
-    "/usr/local/bin/submodule-update-server-info":
+      source => 'puppet:///deployment/git-deploy/utils/deploy-info',
+      require => [Package['python-redis']];
+    '/usr/local/bin/submodule-update-server-info':
       owner => root,
       group => root,
       mode => 0555,
-      source => 
"puppet:///deployment/git-deploy/utils/submodule-update-server-info",
+      source => 
'puppet:///deployment/git-deploy/utils/submodule-update-server-info',
   }
-  salt::grain { "deployment_server":
-      grain   => "deployment_server",
+  salt::grain { 'deployment_server':
+      grain   => 'deployment_server',
       value   => true,
       replace => true;
   }
-  salt::grain { "deployment_global_hook_dir":
-      grain   => "deployment_global_hook_dir",
+  salt::grain { 'deployment_global_hook_dir':
+      grain   => 'deployment_global_hook_dir',
       value   => $deployment_global_hook_dir,
       replace => true;
   }
+  salt::grain { 'deployment_repo_user':
+      grain   => 'deployment_repo_user',
+      value   => 'sartoris',
+      replace => true;
+  }
   systemuser {
-    "sartoris": name => "sartoris", shell => "/bin/false", home => 
"/nonexistent", groups => $deployer_groups
+    'sartoris': name => 'sartoris', shell => '/bin/false', home => 
'/nonexistent', groups => $deployer_groups
   }
 }
diff --git a/modules/deployment/manifests/salt_master.pp 
b/modules/deployment/manifests/salt_master.pp
index 6afd6b7..2ded2af 100644
--- a/modules/deployment/manifests/salt_master.pp
+++ b/modules/deployment/manifests/salt_master.pp
@@ -89,8 +89,8 @@
       subscribe => [File["${pillar_dir}/deployment/deployment_config.sls"], 
File["${pillar_dir}/deployment/repo_config.sls"], File["${pillar_dir}"]],
       refreshonly => true,
       require => [Package["salt-master"]];
-    "update_sync_links":
-      command => "/usr/bin/salt -G 'deployment_server:true' 
deploy.init_sync_links",
+    "deployment_server_init":
+      command => "/usr/bin/salt -G 'deployment_server:true' 
deploy.deployment_server_init",
       subscribe => [Exec['refresh_deployment_pillars']],
       refreshonly => true,
       require => [File["${module_dir}/deploy.py"]];

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I504f2f5e5936652c0783c38eaff080e18324a9be
Gerrit-PatchSet: 3
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ryan Lane <[email protected]>
Gerrit-Reviewer: Ryan Lane <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to