add KeepDisk resource
[arvados.git] / services / api / app / models / keep_disk.rb
1 class KeepDisk < ArvadosModel
2   include AssignUuid
3   include KindAndEtag
4   include CommonApiTemplate
5   before_validation :ensure_ping_secret
6
7   api_accessible :superuser, :extend => :common do |t|
8     t.add :node_uuid
9     t.add :filesystem_uuid
10     t.add :ping_secret
11     t.add :bytes_total
12     t.add :bytes_free
13     t.add :is_readable
14     t.add :is_writable
15     t.add :last_read_at
16     t.add :last_write_at
17     t.add :last_ping_at
18   end
19
20   def ping(o)
21     raise "must have :ip and :ping_secret" unless o[:ip] and o[:ping_secret]
22
23     if o[:ping_secret] != self.ping_secret
24       logger.info "Ping: secret mismatch: received \"#{o[:ping_secret]}\" != \"#{self.info[:ping_secret]}\""
25       return nil
26     end
27     self.last_ping_at = Time.now
28
29     @bypass_arvados_authorization = true
30
31     save!
32   end
33
34   protected
35
36   def ensure_ping_secret
37     self.ping_secret ||= rand(2**256).to_s(36)
38   end
39
40   def permission_to_update
41     @bypass_arvados_authorization or super
42   end
43
44   def permission_to_create
45     current_user and current_user.is_admin
46   end
47 end