Commit ecae936d344b7d29f1898f81ac283d444c086f0d
Exists in
spb-stable
and in
3 other branches
Merge branch 'batch_key_import' into 'master'
Batch Key Import
Showing
4 changed files
with
26 additions
and
6 deletions
Show diff stats
CHANGELOG
@@ -21,7 +21,7 @@ v 6.7.0 | @@ -21,7 +21,7 @@ v 6.7.0 | ||
21 | - Reuse the GitLab LDAP connection within each request | 21 | - Reuse the GitLab LDAP connection within each request |
22 | - Changed markdown new line behaviour to conform to markdown standards | 22 | - Changed markdown new line behaviour to conform to markdown standards |
23 | - Fix global search | 23 | - Fix global search |
24 | - | 24 | + - Faster authorized_keys rebuilding in `rake gitlab:shell:setup` (requires gitlab-shell 1.8.5) |
25 | 25 | ||
26 | v 6.6.2 | 26 | v 6.6.2 |
27 | - Fix 500 error on branch/tag create or remove via UI | 27 | - Fix 500 error on branch/tag create or remove via UI |
lib/gitlab/backend/shell.rb
@@ -2,6 +2,12 @@ module Gitlab | @@ -2,6 +2,12 @@ module Gitlab | ||
2 | class Shell | 2 | class Shell |
3 | class AccessDenied < StandardError; end | 3 | class AccessDenied < StandardError; end |
4 | 4 | ||
5 | + class KeyAdder < Struct.new(:io) | ||
6 | + def add_key(id, key) | ||
7 | + io.puts("#{id}\t#{key.strip}") | ||
8 | + end | ||
9 | + end | ||
10 | + | ||
5 | # Init new repository | 11 | # Init new repository |
6 | # | 12 | # |
7 | # name - project path with namespace | 13 | # name - project path with namespace |
@@ -130,6 +136,16 @@ module Gitlab | @@ -130,6 +136,16 @@ module Gitlab | ||
130 | system "#{gitlab_shell_path}/bin/gitlab-keys", "add-key", key_id, key_content | 136 | system "#{gitlab_shell_path}/bin/gitlab-keys", "add-key", key_id, key_content |
131 | end | 137 | end |
132 | 138 | ||
139 | + # Batch-add keys to authorized_keys | ||
140 | + # | ||
141 | + # Ex. | ||
142 | + # batch_add_keys { |adder| adder.add_key("key-42", "sha-rsa ...") } | ||
143 | + def batch_add_keys(&block) | ||
144 | + IO.popen(%W(#{gitlab_shell_path}/bin/gitlab-keys batch-add-keys), 'w') do |io| | ||
145 | + block.call(KeyAdder.new(io)) | ||
146 | + end | ||
147 | + end | ||
148 | + | ||
133 | # Remove ssh key from gitlab shell | 149 | # Remove ssh key from gitlab shell |
134 | # | 150 | # |
135 | # Ex. | 151 | # Ex. |
lib/tasks/gitlab/check.rake
@@ -727,7 +727,7 @@ namespace :gitlab do | @@ -727,7 +727,7 @@ namespace :gitlab do | ||
727 | end | 727 | end |
728 | 728 | ||
729 | def check_gitlab_shell | 729 | def check_gitlab_shell |
730 | - required_version = Gitlab::VersionInfo.new(1, 8, 4) | 730 | + required_version = Gitlab::VersionInfo.new(1, 8, 5) |
731 | current_version = Gitlab::VersionInfo.parse(gitlab_shell_version) | 731 | current_version = Gitlab::VersionInfo.parse(gitlab_shell_version) |
732 | 732 | ||
733 | print "GitLab Shell version >= #{required_version} ? ... " | 733 | print "GitLab Shell version >= #{required_version} ? ... " |
lib/tasks/gitlab/shell.rake
@@ -34,14 +34,18 @@ namespace :gitlab do | @@ -34,14 +34,18 @@ namespace :gitlab do | ||
34 | 34 | ||
35 | Gitlab::Shell.new.remove_all_keys | 35 | Gitlab::Shell.new.remove_all_keys |
36 | 36 | ||
37 | - Key.find_each(batch_size: 1000) do |key| | ||
38 | - if Gitlab::Shell.new.add_key(key.shell_id, key.key) | 37 | + Gitlab::Shell.new.batch_add_keys do |adder| |
38 | + Key.find_each(batch_size: 1000) do |key| | ||
39 | + adder.add_key(key.shell_id, key.key) | ||
39 | print '.' | 40 | print '.' |
40 | - else | ||
41 | - print 'F' | ||
42 | end | 41 | end |
43 | end | 42 | end |
44 | 43 | ||
44 | + unless $?.success? | ||
45 | + puts "Failed to add keys...".red | ||
46 | + exit 1 | ||
47 | + end | ||
48 | + | ||
45 | rescue Gitlab::TaskAbortedByUserError | 49 | rescue Gitlab::TaskAbortedByUserError |
46 | puts "Quitting...".red | 50 | puts "Quitting...".red |
47 | exit 1 | 51 | exit 1 |