4533: Merge branch 'master' into 4533-remote-reset
[arvados.git] / services / api / app / controllers / arvados / v1 / nodes_controller.rb
index 5bfeff06f5c11200c08258eba53489b594aa1e3f..0ca588625e33b52b4a3af311fce1632169dd4958 100644 (file)
@@ -3,15 +3,15 @@ class Arvados::V1::NodesController < ApplicationController
   skip_before_filter :find_object_by_uuid, :only => :ping
   skip_before_filter :render_404_if_no_object, :only => :ping
 
-  def create
-    @object = Node.new
-    @object.save!
-    @object.start!(lambda { |h| ping_arvados_v1_node_url(h) })
-    show
+  def update
+    if resource_attrs[:job_uuid]
+      @object.job_readable = readable_job_uuids(resource_attrs[:job_uuid]).any?
+    end
+    super
   end
 
   def self._ping_requires_parameters
-    { ping_secret: true }
+    { ping_secret: {required: true} }
   end
 
   def ping
@@ -45,5 +45,16 @@ class Arvados::V1::NodesController < ApplicationController
       # recently) working
       @objects = model_class.where('last_ping_at >= ?', Time.now - 1.hours)
     end
+    assigned_nodes = @objects.select(&:job_uuid)
+    assoc_jobs = readable_job_uuids(*assigned_nodes.map(&:job_uuid))
+    assigned_nodes.each do |node|
+      node.job_readable = assoc_jobs.include?(node.job_uuid)
+    end
+  end
+
+  protected
+
+  def readable_job_uuids(*uuids)
+    Job.readable_by(*@read_users).select(:uuid).where(uuid: uuids).map(&:uuid)
   end
 end