diff options
Diffstat (limited to 'lib/quality')
-rw-r--r-- | lib/quality/helm3_client.rb | 6 | ||||
-rw-r--r-- | lib/quality/helm_client.rb | 114 | ||||
-rw-r--r-- | lib/quality/test_level.rb | 1 |
3 files changed, 2 insertions, 119 deletions
diff --git a/lib/quality/helm3_client.rb b/lib/quality/helm3_client.rb index f5eb0834386..afea73cbc50 100644 --- a/lib/quality/helm3_client.rb +++ b/lib/quality/helm3_client.rb @@ -17,10 +17,6 @@ module Quality @revision ||= self[:revision].to_i end - def status - @status ||= self[:status].downcase - end - def last_update @last_update ||= Time.parse(self[:last_update]) end @@ -29,7 +25,7 @@ module Quality # A single page of data and the corresponding page number. Page = Struct.new(:releases, :number) - def initialize(namespace:, tiller_namespace: nil) + def initialize(namespace:) @namespace = namespace end diff --git a/lib/quality/helm_client.rb b/lib/quality/helm_client.rb deleted file mode 100644 index fc4e1ca2d18..00000000000 --- a/lib/quality/helm_client.rb +++ /dev/null @@ -1,114 +0,0 @@ -# frozen_string_literal: true - -require 'time' -require_relative '../gitlab/popen' unless defined?(Gitlab::Popen) - -module Quality - class HelmClient - CommandFailedError = Class.new(StandardError) - - attr_reader :tiller_namespace, :namespace - - RELEASE_JSON_ATTRIBUTES = %w[Name Revision Updated Status Chart AppVersion Namespace].freeze - - Release = Struct.new(:name, :revision, :last_update, :status, :chart, :app_version, :namespace) do - def revision - @revision ||= self[:revision].to_i - end - - def last_update - @last_update ||= Time.parse(self[:last_update]) - end - end - - # A single page of data and the corresponding page number. - Page = Struct.new(:releases, :number) - - def initialize(tiller_namespace:, namespace:) - @tiller_namespace = tiller_namespace - @namespace = namespace - end - - def releases(args: []) - each_release(args) - end - - def delete(release_name:) - run_command([ - 'delete', - %(--tiller-namespace "#{tiller_namespace}"), - '--purge', - release_name - ]) - end - - private - - def run_command(command) - final_command = ['helm', *command].join(' ') - puts "Running command: `#{final_command}`" # rubocop:disable Rails/Output - - result = Gitlab::Popen.popen_with_detail([final_command]) - - if result.status.success? - result.stdout.chomp.freeze - else - raise CommandFailedError, "The `#{final_command}` command failed (status: #{result.status}) with the following error:\n#{result.stderr}" - end - end - - def raw_releases(args = []) - command = [ - 'list', - %(--namespace "#{namespace}"), - %(--tiller-namespace "#{tiller_namespace}" --output json), - *args - ] - json = JSON.parse(run_command(command)) - - releases = json['Releases'].map do |json_release| - Release.new(*json_release.values_at(*RELEASE_JSON_ATTRIBUTES)) - end - - [releases, json['Next']] - rescue JSON::ParserError => ex - puts "Ignoring this JSON parsing error: #{ex}" # rubocop:disable Rails/Output - [[], nil] - end - - # Fetches data from Helm and yields a Page object for every page - # of data, without loading all of them into memory. - # - # method - The Octokit method to use for getting the data. - # args - Arguments to pass to the `helm list` command. - def each_releases_page(args, &block) - return to_enum(__method__, args) unless block_given? - - page = 1 - offset = '' - - loop do - final_args = args.dup - final_args << "--offset #{offset}" unless offset.to_s.empty? - collection, offset = raw_releases(final_args) - - yield Page.new(collection, page += 1) - - break if offset.to_s.empty? - end - end - - # Iterates over all of the releases. - # - # args - Any arguments to pass to the `helm list` command. - def each_release(args, &block) - return to_enum(__method__, args) unless block_given? - - each_releases_page(args) do |page| - page.releases.each do |release| - yield release - end - end - end - end -end diff --git a/lib/quality/test_level.rb b/lib/quality/test_level.rb index bbd8b4dcc3f..97b86fa8c2e 100644 --- a/lib/quality/test_level.rb +++ b/lib/quality/test_level.rb @@ -14,6 +14,7 @@ module Quality ], unit: %w[ bin + channels config db dependencies |