keys to gitolite via sidekiq now

This commit is contained in:
Dmitriy Zaporozhets 2013-01-28 21:02:10 +02:00
parent 944b2450b1
commit 299a9a1040
3 changed files with 30 additions and 6 deletions

View file

@ -2,11 +2,21 @@ class KeyObserver < ActiveRecord::Observer
include Gitolited
def after_save(key)
gitolite.set_key(key.identifier, key.key, key.projects)
GitoliteWorker.perform_async(
:set_key,
key.identifier,
key.key,
key.projects.map(&:id)
)
end
def after_destroy(key)
return if key.is_deploy_key && !key.last_deploy?
gitolite.remove_key(key.identifier, key.projects)
GitoliteWorker.perform_async(
:remove_key,
key.identifier,
key.projects.map(&:id)
)
end
end

View file

@ -4,7 +4,7 @@ class GitoliteWorker
sidekiq_options queue: :gitolite
def perform(action, arg)
gitolite.send(action, arg)
def perform(action, *arg)
gitolite.send(action, *arg)
end
end

View file

@ -8,14 +8,28 @@ module Gitlab
Gitlab::GitoliteConfig.new
end
def set_key key_id, key_content, projects
# Update gitolite config with new key
#
# Ex.
# set_key("m_gitlab_com_12343", "sha-rsa ...", [2, 3, 6])
#
def set_key(key_id, key_content, project_ids)
projects = Project.where(id: project_ids)
config.apply do |config|
config.write_key(key_id, key_content)
config.update_projects(projects)
end
end
def remove_key key_id, projects
# Remove ssh key from gitolite config
#
# Ex.
# remove_key("m_gitlab_com_12343", [2, 3, 6])
#
def remove_key(key_id, project_ids)
projects = Project.where(id: project_ids)
config.apply do |config|
config.rm_key(key_id)
config.update_projects(projects)