diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index 6eb4cbd..bd27bf8 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -79,12 +79,14 @@ module Devops end def pause_server node_name - s = Server.get_server_by_key(node_name, parser.instance_key) + s = get_server_by_key(node_name, parser.instance_key) ## Authorization Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user provider = s.provider_instance r = provider.pause_server s if r.nil? + set_last_operation_type_and_save(s, Devops::Model::Server::OperationType::PAUSE) + "Server with instance ID '#{s.id}' and node name '#{node_name}' is paused" else raise ConflictException.new("Server with instance ID '#{s.id}' and node name '#{node_name}' can not be paused, It in state '#{r}'", 409) @@ -92,12 +94,14 @@ module Devops end def unpause_server node_name - s = Server.get_server_by_key(node_name, parser.instance_key) + s = get_server_by_key(node_name, parser.instance_key) ## Authorization Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user provider = s.provider_instance r = provider.unpause_server s if r.nil? + set_last_operation_type_and_save(s, Devops::Model::Server::OperationType::UNPAUSE) + "Server with instance ID '#{s.id}' and node name '#{node_name}' is unpaused" else raise ConflictException.new("Server with instance ID '#{s.id}' and node name '#{node_name}' can not be unpaused, It in state '#{r}'") @@ -110,7 +114,7 @@ module Devops Devops::Db.connector.check_project_auth s.project, s.deploy_env, user raise ConflictException.new("Server '#{node_name}' already reserved") unless s.reserved_by.nil? s.reserved_by = user - Devops::Db.connector.server_update(s) + set_last_operation_type_and_save(s, Devops::Model::Server::OperationType::RESERVE) end def unreserve_server node_name @@ -118,7 +122,7 @@ module Devops Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user raise ConflictException.new("Server '#{node_name}' is not reserved") if s.reserved_by.nil? s.reserved_by = nil - Devops::Db.connector.server_update(s) + set_last_operation_type_and_save(s, Devops::Model::Server::OperationType::UNRESERVE) end # TODO: check bootstrap template name @@ -284,6 +288,11 @@ module Devops end end + def set_last_operation_type_and_save(server, operation_type) + server.set_last_operation(operation_type) + Devops::Db.connector.server_update(server) + end + end end end diff --git a/devops-service/db/mongo/connectors/server.rb b/devops-service/db/mongo/connectors/server.rb index 4ab4fea..12f9e2a 100644 --- a/devops-service/db/mongo/connectors/server.rb +++ b/devops-service/db/mongo/connectors/server.rb @@ -63,17 +63,14 @@ module Connectors end def server_insert(server) - #server.validate! server.created_at = Time.now collection.insert(server.to_mongo_hash) end - # somewhy servers are not validated in previous version of code. I leave this until I know, why. def server_update(server) collection.update({'_id' => server.id}, server.to_hash_without_id) end - # somewhy servers are not validated in previous version of code. I leave this until I know, why. def server_set_chef_node_name(server) collection.update({'_id' => server.id}, {'$set' => {'chef_node_name' => server.chef_node_name}}) end diff --git a/devops-service/db/mongo/models/server.rb b/devops-service/db/mongo/models/server.rb index c9fc4f9..91ec775 100644 --- a/devops-service/db/mongo/models/server.rb +++ b/devops-service/db/mongo/models/server.rb @@ -9,8 +9,17 @@ module Devops include ModelWithProvider + module OperationType + CREATION = :creation + DEPLOY = :deploy + RESERVE = :reserve + UNRESERVE = :unreserve + PAUSE = :pause + UNPAUSE = :unpause + end + attr_accessor :chef_node_name, :id, :remote_user, :project, :deploy_env, :private_ip, :public_ip, :created_at, :without_bootstrap, :created_by, :reserved_by, :stack, :run_list - attr_accessor :key + attr_accessor :key, :last_operation_at, :last_operation_type types :id => {:type => String, :empty => false}, :provider => {:type => String, :empty => false}, @@ -29,7 +38,8 @@ module Devops set_validators ::Validators::DeployEnv::RunList def self.fields - ["chef_node_name", "project", "deploy_env", "provider", "remote_user", "private_ip", "public_ip", "created_at", "created_by", "key", "reserved_by", "run_list", "stack"] + ["chef_node_name", "project", "deploy_env", "provider", "remote_user", "private_ip", "public_ip", "created_at", "created_by", "key", "reserved_by", "run_list", "stack", + "last_operation_type", "last_operation_at"] end def initialize s={} @@ -47,6 +57,8 @@ module Devops self.reserved_by = s["reserved_by"] self.stack = s["stack"] self.run_list = s["run_list"] || [] + self.last_operation_at = s["last_operation_at"] + self.last_operation_type = s["last_operation_type"] self end @@ -77,7 +89,9 @@ module Devops "key" => self.key, "reserved_by" => self.reserved_by, "stack" => stack, - "run_list" => self.run_list + "run_list" => self.run_list, + "last_operation_at" => self.last_operation_at, + "last_operation_type" => self.last_operation_type }.merge(provider_hash).delete_if { |k,v| v.nil? } end @@ -100,6 +114,11 @@ module Devops self.provider == Provider::Static::PROVIDER end + def set_last_operation(operation_type) + self.last_operation_type = operation_type + self.last_operation_at = Time.now + end + end end end diff --git a/devops-service/db/validators/all.rb b/devops-service/db/validators/all.rb index 37f2e28..dc27475 100644 --- a/devops-service/db/validators/all.rb +++ b/devops-service/db/validators/all.rb @@ -12,5 +12,5 @@ require "db/validators/base" 'db/validators/key/*.rb', 'db/validators/image/*.rb' ].each do |files_regexp| - Dir[files_regexp].each {|file| require file } + Dir[File.join(Devops::Application.root, files_regexp)].each {|file| require file } end diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index d53539d..886d399 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -76,6 +76,7 @@ module Devops def create_server options @server = Devops::Model::Server.new({"project" => @project.id, "deploy_env" => @deploy_env.identifier, "created_by" => options["created_by"], "provider" => @deploy_env.provider, "provider_account" => @deploy_env.provider_account}) + @server.set_last_operation(Devops::Model::Server::OperationType::CREATION) provider = @deploy_env.provider_instance mongo = ::Devops::Db.connector begin @@ -378,6 +379,10 @@ module Devops @out << "\nAfter deploy hooks...\n" res = self.run_hook(:after_deploy, @out, deploy_info) @out << "Done\n" + + @server.set_last_operation(Devops::Model::Server::OperationType::DEPLOY) + Devops::Db.connector.server_update(@server) + 0 end end