Commit 299a9a10400e7fdcc641a90db95290322058c529

Authored by Dmitriy Zaporozhets
1 parent 944b2450

keys to gitolite via sidekiq now

app/observers/key_observer.rb
@@ -2,11 +2,21 @@ class KeyObserver < ActiveRecord::Observer @@ -2,11 +2,21 @@ class KeyObserver < ActiveRecord::Observer
2 include Gitolited 2 include Gitolited
3 3
4 def after_save(key) 4 def after_save(key)
5 - gitolite.set_key(key.identifier, key.key, key.projects) 5 + GitoliteWorker.perform_async(
  6 + :set_key,
  7 + key.identifier,
  8 + key.key,
  9 + key.projects.map(&:id)
  10 + )
6 end 11 end
7 12
8 def after_destroy(key) 13 def after_destroy(key)
9 return if key.is_deploy_key && !key.last_deploy? 14 return if key.is_deploy_key && !key.last_deploy?
10 - gitolite.remove_key(key.identifier, key.projects) 15 +
  16 + GitoliteWorker.perform_async(
  17 + :remove_key,
  18 + key.identifier,
  19 + key.projects.map(&:id)
  20 + )
11 end 21 end
12 end 22 end
app/workers/gitolite_worker.rb
@@ -4,7 +4,7 @@ class GitoliteWorker @@ -4,7 +4,7 @@ class GitoliteWorker
4 4
5 sidekiq_options queue: :gitolite 5 sidekiq_options queue: :gitolite
6 6
7 - def perform(action, arg)  
8 - gitolite.send(action, arg) 7 + def perform(action, *arg)
  8 + gitolite.send(action, *arg)
9 end 9 end
10 end 10 end
lib/gitlab/backend/gitolite.rb
@@ -8,14 +8,28 @@ module Gitlab @@ -8,14 +8,28 @@ module Gitlab
8 Gitlab::GitoliteConfig.new 8 Gitlab::GitoliteConfig.new
9 end 9 end
10 10
11 - def set_key key_id, key_content, projects 11 + # Update gitolite config with new key
  12 + #
  13 + # Ex.
  14 + # set_key("m_gitlab_com_12343", "sha-rsa ...", [2, 3, 6])
  15 + #
  16 + def set_key(key_id, key_content, project_ids)
  17 + projects = Project.where(id: project_ids)
  18 +
12 config.apply do |config| 19 config.apply do |config|
13 config.write_key(key_id, key_content) 20 config.write_key(key_id, key_content)
14 config.update_projects(projects) 21 config.update_projects(projects)
15 end 22 end
16 end 23 end
17 24
18 - def remove_key key_id, projects 25 + # Remove ssh key from gitolite config
  26 + #
  27 + # Ex.
  28 + # remove_key("m_gitlab_com_12343", [2, 3, 6])
  29 + #
  30 + def remove_key(key_id, project_ids)
  31 + projects = Project.where(id: project_ids)
  32 +
19 config.apply do |config| 33 config.apply do |config|
20 config.rm_key(key_id) 34 config.rm_key(key_id)
21 config.update_projects(projects) 35 config.update_projects(projects)