def resolve_destination(app, gear, destination_container, destination_district_uuid, allow_change_district)
source_container = gear.container
source_container = gear.get_proxy if source_container.nil?
source_district_uuid = source_container.get_district_uuid
if destination_container.nil?
unless allow_change_district
if destination_district_uuid && destination_district_uuid != source_district_uuid
raise OpenShift::UserException.new("Error moving app. Cannot change district from '#{source_district_uuid}' to '#{destination_district_uuid}' without allow_change_district flag.", 1)
else
destination_district_uuid = source_district_uuid unless source_district_uuid == 'NONE'
end
end
destination_container = MCollectiveApplicationContainerProxy.find_available_impl(gear.node_profile, destination_district_uuid)
log_debug "DEBUG: Destination container: #{destination_container.id}"
destination_district_uuid = destination_container.get_district_uuid
else
if destination_district_uuid
log_debug "DEBUG: Destination district uuid '#{destination_district_uuid}' is being ignored in favor of destination container #{destination_container.id}"
end
destination_district_uuid = destination_container.get_district_uuid
unless allow_change_district || (source_district_uuid == destination_district_uuid)
raise OpenShift::UserException.new("Resulting move would change districts from '#{source_district_uuid}' to '#{destination_district_uuid}'. You can use the 'allow_change_district' option if you really want this to happen.", 1)
end
end
log_debug "DEBUG: Source district uuid: #{source_district_uuid}"
log_debug "DEBUG: Destination district uuid: #{destination_district_uuid}"
keep_uid = destination_district_uuid == source_district_uuid && destination_district_uuid && destination_district_uuid != 'NONE'
log_debug "DEBUG: District unchanged keeping uid" if keep_uid
if source_container.id == destination_container.id
raise OpenShift::UserException.new("Error moving app. Old and new servers are the same: #{source_container.id}", 1)
end
return [destination_container, destination_district_uuid, keep_uid]
end