class Repol::Exporter

Public Class Methods

new(client, options = {}) click to toggle source
# File lib/repol/exporter.rb, line 4
def initialize(client, options = {})
  @client = client
  @options = options
end

Public Instance Methods

export() click to toggle source
# File lib/repol/exporter.rb, line 9
def export
  export_repositories.sort_array!
end

Private Instance Methods

export_repositories() click to toggle source
# File lib/repol/exporter.rb, line 15
def export_repositories
  result = {}
  repositories = get_repositories
  concurrency = @options[:request_concurrency]

  Parallel.each(repositories, in_threads: concurrency) do |repository|
    name = repository.repository_name
    next unless matched?(name)
    policy = export_repository_policy(repository)
    result[name] = policy
  end

  result
end
export_repository_policy(repository) click to toggle source
# File lib/repol/exporter.rb, line 30
def export_repository_policy(repository)
  name = repository.repository_name
  resp = @client.get_repository_policy(repository_name: name)
  JSON.parse(resp.policy_text)
rescue Aws::ECR::Errors::RepositoryPolicyNotFoundException
  nil
end
get_repositories() click to toggle source
# File lib/repol/exporter.rb, line 38
def get_repositories
  repositories = []
  next_token = nil

  loop do
    resp = @client.describe_repositories(next_token: next_token)
    repositories.concat(resp.repositories)
    next_token = resp.next_token
    break unless next_token
  end

  repositories
end