def remove_dependency(dep)
reply = ResultIO.new
self.class.notify_observers(:before_remove_dependency, {:application => self, :dependency => dep, :reply => reply})
self.embedded = {} unless self.embedded
raise OpenShift::UserException.new("#{dep} not embedded in '#{@name}', try adding it first", 135) unless self.embedded.include? dep
raise OpenShift::UserException.new("#{dep} is not allowed to be removed from '#{@name}'. It is a required dependency for a scalable application.", 137) if (self.scalable and self.proxy_cartridge==dep)
remove_from_requires_feature(dep)
elaborate_descriptor { |removed_component_instances|
removed_component_instances.each do |comp_inst_name|
comp_inst = self.comp_instance_map[comp_inst_name]
next if comp_inst.parent_cart_name == self.name
group_inst = self.group_instance_map[comp_inst.group_instance_name]
s,f = run_on_gears(group_inst.gears, reply, false) do |gear, r|
unless gear.configured_components.length == 1 && gear.configured_components.first == comp_inst.name
reply.append gear.deconfigure(comp_inst)
process_cartridge_commands(r)
end
end
f.each do |failed_data|
Rails.logger.debug("Failed to deconfigure cartridge #{comp_inst.parent_cart_name} on gear #{failed_data[:gear].server_identity}:#{failed_data[:gear].uuid}")
Rails.logger.debug("Exception #{failed_data[:exception].message}")
Rails.logger.debug("#{failed_data[:exception].backtrace.inspect}")
end
run_on_gears(group_inst.gears, reply, false) do |gear, r|
if gear.configured_components.empty? || (gear.configured_components.length == 1 && gear.configured_components.first == comp_inst.name)
reply.append group_inst.remove_gear(gear)
end
end
end
}
self.save
self.class.notify_observers(:after_remove_dependency, {:application => self, :dependency => dep, :reply => reply})
reply
end