diff options
Diffstat (limited to 'tooling/lib/tooling/kubernetes_client.rb')
-rw-r--r-- | tooling/lib/tooling/kubernetes_client.rb | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/tooling/lib/tooling/kubernetes_client.rb b/tooling/lib/tooling/kubernetes_client.rb index 9bc5626db6b..12c4ee0039f 100644 --- a/tooling/lib/tooling/kubernetes_client.rb +++ b/tooling/lib/tooling/kubernetes_client.rb @@ -27,6 +27,13 @@ module Tooling delete_by_exact_names(resource_type: resource_type, resource_names: resource_names, wait: wait) end + def cleanup_review_app_namespaces(created_before:, wait: true) + namespaces = review_app_namespaces_created_before(created_before: created_before) + return if namespaces.empty? + + delete_namespaces_by_exact_names(resource_names: namespaces, wait: wait) + end + private def delete_by_selector(release_name:, wait:) @@ -66,6 +73,19 @@ module Tooling run_command(command) end + def delete_namespaces_by_exact_names(resource_names:, wait:) + command = [ + 'delete', + 'namespace', + '--now', + '--ignore-not-found', + %(--wait=#{wait}), + resource_names.join(' ') + ] + + run_command(command) + end + def delete_by_matching_name(release_name:) resource_names = raw_resource_names command = [ @@ -101,9 +121,32 @@ module Tooling ] response = run_command(command) - JSON.parse(response)['items'] # rubocop:disable Gitlab/Json - .map { |resource| resource.dig('metadata', 'name') if Time.parse(resource.dig('metadata', 'creationTimestamp')) < created_before } - .compact + + resources_created_before_date(response, created_before) + end + + def review_app_namespaces_created_before(created_before:) + command = [ + 'get', + 'namespace', + "-l tls=review-apps-tls", # Get only namespaces used for review-apps + "--sort-by='{.metadata.creationTimestamp}'", + '-o json' + ] + + response = run_command(command) + + resources_created_before_date(response, created_before) + end + + def resources_created_before_date(response, date) + items = JSON.parse(response)['items'] # rubocop:disable Gitlab/Json + + items.filter_map do |item| + item_created_at = Time.parse(item.dig('metadata', 'creationTimestamp')) + + item.dig('metadata', 'name') if item_created_at < date + end rescue ::JSON::ParserError => ex puts "Ignoring this JSON parsing error: #{ex}\n\nResponse was:\n#{response}" # rubocop:disable Rails/Output [] |