diff options
author | Sanad Liaquat <sliaquat@gitlab.com> | 2019-01-22 13:49:24 +0500 |
---|---|---|
committer | Sanad Liaquat <sliaquat@gitlab.com> | 2019-01-22 13:49:24 +0500 |
commit | 2ff8063e836676cc9bd1b29136dbd9912dbd0813 (patch) | |
tree | 7e65ed46fee8c7f4059938bf2979be820ef6ac02 | |
parent | 63107df8f351e7a3c3b96e5903e71dd4c9bcbbf7 (diff) | |
download | gitlab-ce-staging-26-fix_add_deploy_key_spec.tar.gz |
Better loggingstaging-26-fix_add_deploy_key_spec
-rw-r--r-- | qa/Gemfile.lock | 2 | ||||
-rw-r--r-- | qa/qa/resource/deploy_key.rb | 1 | ||||
-rw-r--r-- | qa/qa/support/api.rb | 9 | ||||
-rw-r--r-- | qa/qa/tools/delete_project_deploy_keys.rb | 53 |
4 files changed, 50 insertions, 15 deletions
diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock index 419cacdb2af..9f84bdc3828 100644 --- a/qa/Gemfile.lock +++ b/qa/Gemfile.lock @@ -97,7 +97,7 @@ DEPENDENCIES airborne (~> 0.2.13) capybara (~> 2.16.1) capybara-screenshot (~> 1.0.18) - nokogiri (~> 1.10.0) + nokogiri (~> 1.10.1) pry-byebug (~> 3.5.1) rake (~> 12.3.0) rspec (~> 3.7) diff --git a/qa/qa/resource/deploy_key.rb b/qa/qa/resource/deploy_key.rb index d892281956b..28d28dd3f05 100644 --- a/qa/qa/resource/deploy_key.rb +++ b/qa/qa/resource/deploy_key.rb @@ -20,7 +20,6 @@ module QA end end - def remove_via_api! project_id = project.api_response[:id] diff --git a/qa/qa/support/api.rb b/qa/qa/support/api.rb index 67a24f5a647..8aa7d6812ac 100644 --- a/qa/qa/support/api.rb +++ b/qa/qa/support/api.rb @@ -29,6 +29,15 @@ module QA e.response end + def head(url) + RestClient::Request.execute( + method: :head, + url: url, + verify_ssl: false) + rescue RestClient::ExceptionWithResponse => e + e.response + end + def parse_body(response) JSON.parse(response.body, symbolize_names: true) end diff --git a/qa/qa/tools/delete_project_deploy_keys.rb b/qa/qa/tools/delete_project_deploy_keys.rb index 75abee865fe..b12721bf77d 100644 --- a/qa/qa/tools/delete_project_deploy_keys.rb +++ b/qa/qa/tools/delete_project_deploy_keys.rb @@ -2,40 +2,54 @@ require_relative '../../qa' -# This script deletes all deploy keys for all project under subgroups of a group provided specified by ENV['GROUP_NAME_OR_PATH'] +# This script deletes all deploy keys for all project under subgroups of a group specified by ENV['GROUP_NAME_OR_PATH'] # Required environment variables: PERSONAL_ACCESS_TOKEN and GITLAB_ADDRESS # Optional environment variable: GROUP_NAME_OR_PATH (defaults to 'gitlab-qa-sandbox-group') # Run `rake delete_all_project_deploy_keys` +# rubocop:disable Metrics/AbcSize module QA module Tools class DeleteProjectDeployKeys include Support::Api - def run + def initialize raise ArgumentError, "Please provide GITLAB_ADDRESS" unless ENV['GITLAB_ADDRESS'] raise ArgumentError, "Please provide PERSONAL_ACCESS_TOKEN" unless ENV['PERSONAL_ACCESS_TOKEN'] + @api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['PERSONAL_ACCESS_TOKEN']) + end + + def run STDOUT.puts 'Running...' # Fetch group's id - api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['PERSONAL_ACCESS_TOKEN']) - group_search_response = get Runtime::API::Request.new(api_client, "/groups", search: ENV['GROUP_NAME_OR_PATH'] || 'gitlab-qa-sandbox-group').url - group_id = JSON.parse(group_search_response.body).first["id"] + group_id = fetch_group_id + + sub_groups_head_response = get Runtime::API::Request.new(@api_client, "/groups/#{group_id}/subgroups", per_page: "100", page: "1").url + total_sub_groups = sub_groups_head_response.headers[:x_total] + total_sub_group_pages = sub_groups_head_response.headers[:x_total_pages] + + STDOUT.puts "total_sub_groups: #{total_sub_groups}" + STDOUT.puts "total_sub_group_pages: #{total_sub_group_pages}" # Fetch all subgroups for the top level group next_sub_group_page = "1" while next_sub_group_page != "" - sub_groups_response = get Runtime::API::Request.new(api_client, "/groups/#{group_id}/subgroups", per_page: "100", page: next_sub_group_page).url + sub_groups_response = get Runtime::API::Request.new(@api_client, "/groups/#{group_id}/subgroups", per_page: "100", page: next_sub_group_page).url next_sub_group_page = sub_groups_response.headers[:x_next_page] + current_sub_group_page = sub_groups_response.headers[:x_page] + + STDOUT.puts "\n\n==== current_sub_group_page: #{current_sub_group_page} ====\n\n" sub_group_ids = JSON.parse(sub_groups_response.body).map { |subgroup| subgroup["id"] } # For each subgroup, fetch all projects + sub_group_counter = 0 sub_group_ids.each do |subgroup_id| next_project_page = "1" while next_project_page != "" - project_response = get Runtime::API::Request.new(api_client, "/groups/#{subgroup_id}/projects", per_page: "100", page: next_project_page).url + project_response = get Runtime::API::Request.new(@api_client, "/groups/#{subgroup_id}/projects", per_page: "100", page: next_project_page).url next_project_page = project_response.headers[:x_next_page] project_ids = JSON.parse(project_response.body).map { |project| project["id"] } @@ -44,24 +58,37 @@ module QA project_ids.each do |project_id| next_deploy_key_page = "1" while next_deploy_key_page != "" - deploy_keys_response = get Runtime::API::Request.new(api_client, "/projects/#{project_id}/deploy_keys", per_page: "100", page: next_deploy_key_page).url + deploy_keys_response = get Runtime::API::Request.new(@api_client, "/projects/#{project_id}/deploy_keys", per_page: "100", page: next_deploy_key_page).url next_deploy_key_page = deploy_keys_response.headers[:x_next_page] deploy_keys_ids = JSON.parse(deploy_keys_response.body).map { |deploy_key| deploy_key["id"] } - STDOUT.puts "project_id: #{project_id} deploy_keys_ids: #{deploy_keys_ids}" + STDOUT.puts "project_id: #{project_id} deploy_keys_ids: #{deploy_keys_ids}" if deploy_keys_ids.any? # Delete each deploy key - deploy_keys_ids.each do |deploy_keys_id| - STDOUT.puts "Deleting deploy key with id: #{deploy_keys_id}" - delete Runtime::API::Request.new(api_client, "/projects/#{project_id}/deploy_keys/#{deploy_keys_id}").url - end + delete_deploy_keys(deploy_keys_ids, project_id) end end end + STDOUT.puts "#{sub_group_counter += 1} ==== Done subgroup_id: #{subgroup_id} ====" end + STDOUT.puts "== Done current_sub_group_page: #{current_sub_group_page} ====" end end + + private + + def delete_deploy_keys(deploy_keys_ids, project_id) + deploy_keys_ids.each do |deploy_keys_id| + STDOUT.puts "Deleting deploy key with id: #{deploy_keys_id}" + delete Runtime::API::Request.new(@api_client, "/projects/#{project_id}/deploy_keys/#{deploy_keys_id}").url + end + end + + def fetch_group_id + group_search_response = get Runtime::API::Request.new(@api_client, "/groups", search: ENV['GROUP_NAME_OR_PATH'] || 'gitlab-qa-sandbox-group').url + JSON.parse(group_search_response.body).first["id"] + end end end end |