X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9f0425e75ee9b29b2567b6717b5ddd5c02e285f1..a326799df9f652cd3bbee7956ea8a912d6acc4bd:/app/models/node.rb?ds=sidebyside diff --git a/app/models/node.rb b/app/models/node.rb index 67a14384c6..2333d80544 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -1,5 +1,7 @@ -class Node < ActiveRecord::Base +class Node < OrvosModel include AssignUuid + include KindAndEtag + include CommonApiTemplate serialize :info, Hash before_validation :ensure_ping_secret after_update :dnsmasq_update @@ -14,23 +16,17 @@ class Node < ActiveRecord::Base nil end @@domain = Rails.configuration.compute_node_domain rescue `hostname --domain`.strip + @@nameservers = Rails.configuration.compute_node_nameservers - acts_as_api - api_accessible :superuser do |t| - t.add :uuid - t.add :created_by_client - t.add :created_by_user - t.add :created_at - t.add :modified_by_client - t.add :modified_by_user - t.add :modified_at + api_accessible :superuser, :extend => :common do |t| t.add :hostname t.add :domain t.add :ip_address t.add :first_ping_at t.add :last_ping_at t.add :info - t.add :updated_at + t.add :status + t.add lambda { |x| @@nameservers }, :as => :nameservers end def info @@ -73,7 +69,10 @@ class Node < ActiveRecord::Base end # Record instance ID if not already known - self.info[:ec2_instance_id] ||= o[:ec2_instance_id] + if !self.info[:ec2_instance_id] and o[:ec2_instance_id] + self.info[:ec2_instance_id] = o[:ec2_instance_id] + `ec2-create-tags #{self.info[:ec2_instance_id]} --tag 'Name=#{self.uuid}'` + end # Assign hostname if self.slot_number.nil? @@ -89,6 +88,9 @@ class Node < ActiveRecord::Base raise "No available node slots" if try_slot == MAX_SLOTS end while true self.hostname = self.class.hostname_for_slot(self.slot_number) + if info[:ec2_instance_id] + `ec2-create-tags #{self.info[:ec2_instance_id]} --tag 'hostname=#{self.hostname}'` + end end save @@ -99,7 +101,8 @@ class Node < ActiveRecord::Base cmd = ["ec2-run-instances", "--user-data '#{ping_url}'", "-t c1.xlarge -n 1 -g orvos-compute", - "ami-68ca6901" + "--client-token", self.uuid, + Rails.configuration.compute_node_ami ].join(' ') self.info[:ec2_start_command] = cmd logger.info "#{self.uuid} ec2_start_command= #{cmd.inspect}" @@ -107,7 +110,9 @@ class Node < ActiveRecord::Base self.info[:ec2_start_result] = result logger.info "#{self.uuid} ec2_start_result= #{result.inspect}" result.match(/INSTANCE\s*(i-[0-9a-f]+)/) do |m| - self.info[:ec2_instance_id] = m[1] + instance_id = m[1] + self.info[:ec2_instance_id] = instance_id + `ec2-create-tags #{instance_id} --tag 'Name=#{self.uuid}'` end self.save! end