summaryrefslogtreecommitdiff
path: root/tooling/lib/tooling/kubernetes_client.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tooling/lib/tooling/kubernetes_client.rb')
-rw-r--r--tooling/lib/tooling/kubernetes_client.rb49
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
[]