56 lines
1.5 KiB
Ruby
56 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
namespace :gitlab do
|
|
namespace :praefect do
|
|
def int?(string)
|
|
true if Integer(string) rescue false
|
|
end
|
|
|
|
def print_checksums(header, row)
|
|
header.each_with_index do |val, i|
|
|
width = [val.length, row[i].length].max
|
|
header[i] = header[i].ljust(width)
|
|
row[i] = row[i].ljust(width)
|
|
end
|
|
|
|
header_str = header.join(' | ')
|
|
puts header_str
|
|
puts '-' * header_str.length
|
|
puts row.join(' | ')
|
|
end
|
|
|
|
desc 'GitLab | Praefect | Check replicas'
|
|
task :replicas, [:project_id] => :gitlab_environment do |t, args|
|
|
warn_user_is_not_gitlab
|
|
|
|
unless int?(args.project_id)
|
|
puts 'argument must be a valid project_id'
|
|
next
|
|
end
|
|
|
|
project = Project.find_by_id(args.project_id)
|
|
if project.nil?
|
|
puts 'No project was found with that id'
|
|
next
|
|
end
|
|
|
|
begin
|
|
replicas_resp = project.repository.replicas
|
|
|
|
sorted_replicas = replicas_resp.replicas.sort_by { |r| r.repository.storage_name }
|
|
|
|
header = ['Project name'] << "#{replicas_resp.primary.repository.storage_name} (primary)"
|
|
header.concat(sorted_replicas.map { |r| r.repository.storage_name })
|
|
|
|
row = [project.name] << replicas_resp.primary.checksum
|
|
row.concat(sorted_replicas.map {|r| r.checksum})
|
|
rescue
|
|
puts 'Something went wrong when getting replicas.'
|
|
next
|
|
end
|
|
|
|
puts "\n"
|
|
print_checksums(header, row)
|
|
end
|
|
end
|
|
end
|