class Repol::Client

Public Class Methods

new(options = {}) click to toggle source
# File lib/repol/client.rb, line 5
def initialize(options = {})
  @options = options
  @client = @options[:client] || Aws::ECR::Client.new
  @driver = Repol::Driver.new(@client, @options)
  @exporter = Repol::Exporter.new(@client, @options)
end

Public Instance Methods

apply(file) click to toggle source
# File lib/repol/client.rb, line 16
def apply(file)
  walk(file)
end
export() click to toggle source
# File lib/repol/client.rb, line 12
def export
  @exporter.export
end

Private Instance Methods

load_file(file) click to toggle source
# File lib/repol/client.rb, line 76
def load_file(file)
  if file.kind_of?(String)
    open(file) do |f|
      Repol::DSL.parse(f.read, file)
    end
  elsif file.respond_to?(:read)
    Repol::DSL.parse(file.read, file.path)
  else
    raise TypeError, "can't convert #{file} into File"
  end
end
walk(file) click to toggle source
# File lib/repol/client.rb, line 22
def walk(file)
  expected = load_file(file)
  actual = @exporter.export

  updated = walk_repositories(expected, actual)

  if @options[:dry_run]
    false
  else
    updated
  end
end
walk_policy(repository_name, expected_policy, actual_policy) click to toggle source
# File lib/repol/client.rb, line 60
def walk_policy(repository_name, expected_policy, actual_policy)
  updated = false

  if expected_policy
    if expected_policy != actual_policy
      @driver.update_policy(repository_name, expected_policy, actual_policy)
      updated = true
    end
  else
    @driver.delete_policy(repository_name)
    updated = true
  end

  updated
end
walk_repositories(expected, actual) click to toggle source
# File lib/repol/client.rb, line 35
def walk_repositories(expected, actual)
  updated = false

  expected.each do |repository_name,  expected_policy|
    next unless matched?(repository_name)

    actual_policy = actual[repository_name]

    if actual_policy
      updated = walk_policy(repository_name, expected_policy, actual_policy) || updated
    elsif actual.has_key?(repository_name)
      actual.delete(repository_name)

      if expected_policy
        @driver.create_policy(repository_name, expected_policy)
        updated = true
      end
    else
      log(:warn, "No such repository: #{repository_name}")
    end
  end

  updated
end