class Roadworker::Batch::Update

Public Instance Methods

changes() click to toggle source
# File lib/roadworker/batch.rb, line 324
def changes
  [
    {
      action: 'DELETE',
      resource_record_set: present_rrset.to_h,
    },
    {
      action: 'CREATE',
      resource_record_set: desired_rrset.to_h,
    },
  ]
end
desired_rrset() click to toggle source
# File lib/roadworker/batch.rb, line 302
def desired_rrset
  return @desired_rrset if defined? @desired_rrset
  @desired_rrset = {name: rrset[:name]}

  Route53Wrapper::RRSET_ATTRS_WITH_TYPE.each do |attribute|
    value = rrset[attribute]
    next unless value

    case attribute
    when :dns_name
      dns_name, dns_name_opts = value
      @desired_rrset[:alias_target] = get_alias_target(dns_name, dns_name_opts)
    when :health_check
      @desired_rrset[:health_check_id] = get_health_check(value)
    else
      @desired_rrset[attribute] = value
    end
  end

  @desired_rrset
end
diff!() click to toggle source
# File lib/roadworker/batch.rb, line 337
def diff!
  log(:info, 'Update ResourceRecordSet', :green) do
    "#{present_rrset.name} #{present_rrset.type}#{ present_rrset.set_identifier && " (#{present_rrset.set_identifier})" }"
  end

  # Note that desired_rrset is directly for Route 53, and present_record is also from Route 53
  # Only given +rrset+ is brought from DSL, and dns_name & health_check is only valid in our DSL
  Route53Wrapper::RRSET_ATTRS_WITH_TYPE.each do |attribute|
    case attribute
    when :dns_name
      present = normalize_attribute_for_diff(attribute, present_rrset[:alias_target] && present_rrset[:alias_target][:dns_name])
      desired = normalize_attribute_for_diff(attribute, desired_rrset[:alias_target] && desired_rrset[:alias_target][:dns_name])
    when :health_check
      present = normalize_attribute_for_diff(attribute, present_rrset[:health_check_id])
      desired = normalize_attribute_for_diff(attribute, desired_rrset[:health_check_id])
    else
      present = normalize_attribute_for_diff(attribute, present_rrset[attribute])
      desired = normalize_attribute_for_diff(attribute, desired_rrset[attribute])
    end

    if desired != present
      color = String.colorize # XXX:
      log(:info, "  #{attribute}:\n".green + Roadworker::Utils.diff(present, desired, color: color, indent: '    '), false)
    end
  end
end

Private Instance Methods

normalize_attribute_for_diff(attribute, value) click to toggle source
# File lib/roadworker/batch.rb, line 366
def normalize_attribute_for_diff(attribute, value)
  if value.is_a?(Array)
    value = Aws::Route53.sort_rrset_values(attribute, value)
    value = nil if value.empty?
  end
  value
end