fluke/devops-service/db/mongo/models/server.rb

129 lines
4.5 KiB
Ruby
Raw Normal View History

2014-05-08 15:34:26 +04:00
require "db/mongo/models/mongo_model"
2015-08-04 12:36:10 +03:00
require "db/mongo/models/model_with_provider"
2015-08-26 13:59:04 +03:00
require "db/validators/deploy_env/run_list"
2015-11-03 11:46:54 +03:00
require "providers/static"
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
module Devops
module Model
class Server < MongoModel
2014-05-08 15:34:26 +04:00
2015-08-04 12:36:10 +03:00
include ModelWithProvider
2015-07-30 15:37:43 +03:00
2015-11-09 18:57:22 +03:00
module OperationType
# we store strings in mongo, so it's better not to use symbols
CREATION = 'creation'
DEPLOY = 'deploy'
RESERVE = 'reserve'
UNRESERVE = 'unreserve'
PAUSE = 'pause'
UNPAUSE = 'unpause'
def self.supported_type?(value)
return false unless value.is_a?(String)
[CREATION, DEPLOY, RESERVE, UNRESERVE, PAUSE, UNPAUSE].include?(value)
end
2015-11-09 18:57:22 +03:00
end
2015-08-04 12:36:10 +03:00
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, :last_operation
attr_accessor :stack_info # hash like {mask: '', incrementers_values: {'master' => 3}}
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
types :id => {:type => String, :empty => false},
:provider => {:type => String, :empty => false},
:remote_user => {:type => String, :empty => false},
:project => {:type => String, :empty => false},
:deploy_env => {:type => String, :empty => false},
:private_ip => {:type => String, :empty => false},
:public_ip => {:type => String, :empty => true, :nil => true},
:key => {:type => String, :empty => false},
:created_by => {:type => String, :empty => false},
:chef_node_name => {:type => String, :empty => true},
2015-07-30 02:14:45 +03:00
:reserved_by => {:type => String, :empty => true},
2015-08-04 12:36:10 +03:00
:stack => {:type => String, :nil => true},
:run_list => {:type => Array, :value_type => String, :empty => true, :nil => false}
set_validators ::Validators::DeployEnv::RunList
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
def self.fields
2015-11-09 18:57:22 +03:00
["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"]
2015-03-06 12:20:30 +03:00
end
2014-08-26 10:09:30 +04:00
2015-03-06 12:20:30 +03:00
def initialize s={}
self.set_provider(s)
2015-03-06 12:20:30 +03:00
self.chef_node_name = s["chef_node_name"]
self.id = s["_id"] || s['id']
2015-03-06 12:20:30 +03:00
self.remote_user = s["remote_user"]
self.project = s["project"]
self.deploy_env = s["deploy_env"]
self.public_ip = s["public_ip"]
self.private_ip = s["private_ip"]
self.created_at = s["created_at"]
self.created_by = s["created_by"]
self.key = s["key"]
self.reserved_by = s["reserved_by"]
2015-07-30 02:14:45 +03:00
self.stack = s["stack"]
2015-08-04 13:20:35 +03:00
self.run_list = s["run_list"] || []
self.last_operation = s["last_operation"]
self.stack_info = s["stack_info"] || {}
self
2015-03-06 12:20:30 +03:00
end
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
def validate!
2015-11-03 11:46:54 +03:00
# remove it after updating from .types to validators
validate_fields_types
2015-03-06 12:20:30 +03:00
super
true
end
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
def to_hash_without_id
{
"chef_node_name" => self.chef_node_name,
"remote_user" => self.remote_user,
"project" => self.project,
"deploy_env" => self.deploy_env,
"private_ip" => self.private_ip,
"public_ip" => self.public_ip,
"created_at" => self.created_at,
"created_by" => self.created_by,
"key" => self.key,
2015-07-30 02:14:45 +03:00
"reserved_by" => self.reserved_by,
2015-08-04 12:36:10 +03:00
"stack" => stack,
2015-11-09 18:57:22 +03:00
"run_list" => self.run_list,
"last_operation" => self.last_operation,
"stack_info" => self.stack_info
}.merge(provider_hash).delete_if { |k,v| v.nil? }
2015-03-06 12:20:30 +03:00
end
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
def self.build_from_bson s
Server.new(s)
end
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
def info
str = "Instance Name: #{self.chef_node_name}\n"
str << "Instance ID: #{self.id}\n"
str << "Private IP: #{self.private_ip}\n"
str << "Public IP: #{self.public_ip}\n" unless self.public_ip.nil?
str << "Remote user: #{self.remote_user}\n"
str << "Project: #{self.project} - #{self.deploy_env}\n"
str << "Created by: #{self.created_by}"
str
end
2014-05-08 15:34:26 +04:00
2015-03-06 12:20:30 +03:00
def static?
self.provider == Provider::Static::PROVIDER
2015-03-06 12:20:30 +03:00
end
2014-10-22 15:01:55 +04:00
def set_last_operation(operation_type, user)
raise ArgumentError unless OperationType.supported_type?(operation_type)
self.last_operation = {
'type' => operation_type,
'date' => Time.now,
'user' => user
}
2015-11-09 18:57:22 +03:00
end
2015-03-06 12:20:30 +03:00
end
end
2014-05-08 15:34:26 +04:00
end