def change_resource_record_sets(zone_id, change_batch, options = {})
response = Excon::Response.new
errors = []
if (zone = self.data[:zones][zone_id])
response.status = 200
change_id = Fog::AWS::Mock.change_id
change_batch.each do |change|
change_name = change[:name]
change_name = change_name + "." unless change_name.end_with?(".")
case change[:action]
when "CREATE"
if zone[:records][change[:type]].nil?
zone[:records][change[:type]] = {}
end
if !record_exist?(zone, change, change_name)
new_record =
if change[:alias_target]
record = {
:alias_target => change[:alias_target]
}
else
record = {
:ttl => change[:ttl].to_s,
}
end
new_record = {
:change_id => change_id,
:resource_records => change[:resource_records] || [],
:name => change_name,
:type => change[:type],
:set_identifier => change[:set_identifier],
:weight => change[:weight]
}.merge(record)
if change[:set_identifier].nil?
zone[:records][change[:type]][change_name] = new_record
else
zone[:records][change[:type]][change_name] = {} if zone[:records][change[:type]][change_name].nil?
zone[:records][change[:type]][change_name][SET_PREFIX + change[:set_identifier]] = new_record
end
else
errors << "Tried to create resource record set #{change[:name]}. type #{change[:type]}, but it already exists"
end
when "DELETE"
action_performed = false
if !zone[:records][change[:type]].nil? && !zone[:records][change[:type]][change_name].nil? && !change[:set_identifier].nil?
action_performed = true unless zone[:records][change[:type]][change_name].delete(SET_PREFIX + change[:set_identifier]).nil?
zone[:records][change[:type]].delete(change_name) if zone[:records][change[:type]][change_name].empty?
elsif !zone[:records][change[:type]].nil?
action_performed = true unless zone[:records][change[:type]].delete(change_name).nil?
end
if !action_performed
errors << "Tried to delete resource record set #{change[:name]}. type #{change[:type]}, but it was not found"
end
end
end
if errors.empty?
change = {
:id => change_id,
:status => 'PENDING',
:submitted_at => Time.now.utc.iso8601
}
self.data[:changes][change[:id]] = change
response.body = {
'Id' => change[:id],
'Status' => change[:status],
'SubmittedAt' => change[:submitted_at]
}
response
else
raise Fog::DNS::AWS::Error.new("InvalidChangeBatch => #{errors.join(", ")}")
end
else
raise Fog::DNS::AWS::NotFound.new("NoSuchHostedZone => A hosted zone with the specified hosted zone ID does not exist.")
end
end