class Roadworker::Batch::Operation

Attributes

dry_run[R]
health_checks[R]
hosted_zone[R]
logger[R]
rrset[R]

Public Class Methods

new(hosted_zone, rrset, health_checks:, dry_run:, logger:) click to toggle source

@param [Roadworker::Route53Wrapper::HostedzoneWrapper] hosted_zone @param [Roadworker::DSL::ResourceRecordSet] rrset @param [Roadworker::HealthCheck] health_checks @param [Logger] logger

# File lib/roadworker/batch.rb, line 118
def initialize(hosted_zone, rrset, health_checks:, dry_run:, logger:)
  @hosted_zone = hosted_zone
  @rrset = rrset
  @health_checks = health_checks
  @dry_run = dry_run
  @logger = logger
end

Public Instance Methods

changes() click to toggle source

@return [Array<Hash>]

# File lib/roadworker/batch.rb, line 180
def changes
  raise NotImplementedError
end
cname_first?() click to toggle source

CNAME should always be created/updated later, as CNAME doesn't permit other records See also Roadworker::Batch::Delete#cname_first?

# File lib/roadworker/batch.rb, line 148
def cname_first?
  false
end
desired_rrset() click to toggle source

@return [Hash]

# File lib/roadworker/batch.rb, line 185
def desired_rrset
  raise NotImplementedError
end
diff!(dry_run: false) click to toggle source
# File lib/roadworker/batch.rb, line 194
def diff!(dry_run: false)
  raise NotImplementedError
end
inspect() click to toggle source
# File lib/roadworker/batch.rb, line 198
def inspect
  "#<#{self.class.name} @changes=#{changes.inspect}>"
end
op_size() click to toggle source

Count of operational size docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests-changeresourcerecordsets

See also: Batch#slice_operations @return [Integer]

# File lib/roadworker/batch.rb, line 173
def op_size
  changes.map do |change|
    change[:action] == 'UPSERT' ? 2 : 1
  end.sum || 0
end
present_rrset() click to toggle source

@return [Roadworker::Route53Wrapper::ResourceRecordSetWrapper]

# File lib/roadworker/batch.rb, line 190
def present_rrset
  hosted_zone.find_resource_record_set(rrset.name, rrset.type, rrset.set_identifier) or raise "record not present"
end
sort_key() click to toggle source
# File lib/roadworker/batch.rb, line 130
def sort_key
  # See Operation#cname_first?
  cname_precedence = if rrset.type == 'CNAME'
                       cname_first? ? 0 : 2
                     else
                       1
                     end
  # Alias target may be created in the same change batch. Let's do operations for non-alias records first.
  alias_precedence = if rrset.dns_name
                       1
                     else
                       0
                     end
  [rrset.name, cname_precedence, alias_precedence, rrset.type, rrset.set_identifier]
end
to_s() click to toggle source
# File lib/roadworker/batch.rb, line 202
def to_s
  inspect
end
value_size() click to toggle source

Count total length of RR “Value” included in changes docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests-changeresourcerecordsets

See also: Batch#slice_operations @return [Integer]

# File lib/roadworker/batch.rb, line 157
def value_size
  changes.map do |change|
    upsert_multiplier = change[:action] == 'UPSERT' ? 2 : 1
    rrset = change[:resource_record_set]
    next 0 unless rrset
    rrs = rrset[:resource_records]
    next 0 unless rrs
    (rrs.map { |_| _[:value]&.size || 0 }.sum) * upsert_multiplier
  end.sum || 0
end

Private Instance Methods

get_alias_target(dns_name, options) click to toggle source

@param [String] dns_name @param [Hash] options @return [?]

# File lib/roadworker/batch.rb, line 211
def get_alias_target(dns_name, options)
  Aws::Route53.dns_name_to_alias_target(dns_name, options, hosted_zone.id, hosted_zone.name)
end
get_health_check(check) click to toggle source

@param [?] health_check @return [?]

# File lib/roadworker/batch.rb, line 217
def get_health_check(check)
  check ? health_checks.find_or_create(check) : nil
end