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