2014-06-24 13:40:52 +04:00
|
|
|
require "db/mongo/models/mongo_model"
|
2015-02-12 13:01:05 +03:00
|
|
|
require "providers/provider_factory"
|
2015-08-04 12:36:10 +03:00
|
|
|
require "db/mongo/models/model_with_provider"
|
2014-06-24 13:40:52 +04:00
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
module Devops
|
|
|
|
|
module Model
|
|
|
|
|
class DeployEnvBase < MongoModel
|
2014-06-24 13:40:52 +04:00
|
|
|
|
2015-08-04 12:36:10 +03:00
|
|
|
include ModelWithProvider
|
2014-06-24 13:40:52 +04:00
|
|
|
|
2015-08-13 15:49:37 +03:00
|
|
|
attr_accessor :identifier, :run_list, :expires, :users
|
|
|
|
|
|
|
|
|
|
set_validators ::Validators::DeployEnv::RunList,
|
|
|
|
|
::Validators::DeployEnv::Expiration,
|
|
|
|
|
::Validators::DeployEnv::Users
|
2014-06-24 13:40:52 +04:00
|
|
|
|
2015-10-06 13:50:26 +03:00
|
|
|
set_field_validators :identifier, ::Validators::FieldValidator::NotNil,
|
|
|
|
|
::Validators::FieldValidator::FieldType::String,
|
|
|
|
|
::Validators::FieldValidator::NotEmpty,
|
|
|
|
|
::Validators::FieldValidator::Name
|
|
|
|
|
|
|
|
|
|
set_field_validators :run_list, ::Validators::FieldValidator::NotNil,
|
|
|
|
|
::Validators::FieldValidator::FieldType::Array,
|
|
|
|
|
::Validators::FieldValidator::RunList
|
|
|
|
|
|
|
|
|
|
set_field_validators :users, ::Validators::FieldValidator::NotNil,
|
|
|
|
|
::Validators::FieldValidator::FieldType::Array
|
|
|
|
|
|
|
|
|
|
set_field_validators :expires, ::Validators::FieldValidator::Nil,
|
|
|
|
|
::Validators::FieldValidator::FieldType::String,
|
|
|
|
|
::Validators::FieldValidator::Expires
|
|
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
def initialize d={}
|
|
|
|
|
self.identifier = d["identifier"]
|
|
|
|
|
b = d["run_list"] || []
|
2015-08-13 15:49:37 +03:00
|
|
|
self.run_list = b.uniq
|
2015-03-06 12:20:30 +03:00
|
|
|
self.expires = d["expires"]
|
|
|
|
|
self.provider = d["provider"]
|
|
|
|
|
b = d["users"] || []
|
2015-08-13 15:49:37 +03:00
|
|
|
self.users = b.uniq
|
2015-03-06 12:20:30 +03:00
|
|
|
end
|
2014-06-24 13:40:52 +04:00
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
def to_hash
|
|
|
|
|
{
|
|
|
|
|
"identifier" => self.identifier,
|
|
|
|
|
"run_list" => self.run_list,
|
|
|
|
|
"expires" => self.expires,
|
|
|
|
|
"provider" => self.provider,
|
|
|
|
|
"users" => self.users
|
|
|
|
|
}
|
|
|
|
|
end
|
2014-06-24 13:40:52 +04:00
|
|
|
|
2015-09-22 14:30:52 +03:00
|
|
|
def add_users users
|
|
|
|
|
self.users = (self.users + users).uniq
|
|
|
|
|
end
|
|
|
|
|
|
2015-10-06 13:50:26 +03:00
|
|
|
def rename project_id, new_name
|
|
|
|
|
old_name = self.identifier
|
|
|
|
|
self.identifier = new_name
|
|
|
|
|
self.validate_identifier!
|
|
|
|
|
begin
|
|
|
|
|
project = Devops::Db.connector.project(project_id)
|
|
|
|
|
project.deploy_env(self.identifier)
|
|
|
|
|
raise InvalidRecord.new("Environment with identifier '#{new_name}' already exist in project '#{project_id}'")
|
|
|
|
|
rescue RecordNotFound => e
|
|
|
|
|
res = create_role(project_id)
|
|
|
|
|
knife = knife_instance
|
|
|
|
|
old_role_name = knife.role_name(project_id, old_name)
|
|
|
|
|
self.run_list.delete("role[#{old_role_name}]")
|
|
|
|
|
role = res[:new] || res[:exist]
|
|
|
|
|
self.run_list << "role[#{role[0]}]" unless role.nil?
|
|
|
|
|
Devops::Db.connector.set_project_deploy_env_field(project_id, old_name, {"identifier" => new_name, "run_list" => self.run_list})
|
|
|
|
|
msg = "Project '#{project_id}': environment '#{old_name}' has been renamed to '#{new_name}'." + Project.create_roles_response(res)
|
|
|
|
|
DevopsLogger.logger.info(msg)
|
|
|
|
|
msg
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update_field project_id, field, value
|
|
|
|
|
self.send(field + "=", value)
|
|
|
|
|
self.send("validate_" + field + "!")
|
|
|
|
|
Devops::Db.connector.set_project_deploy_env_field(project_id, self.identifier, {field => value})
|
|
|
|
|
end
|
|
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
def build_error_message(message)
|
|
|
|
|
"Deploy environment '#{self.identifier}'. " + message
|
|
|
|
|
end
|
2015-02-12 13:01:05 +03:00
|
|
|
|
2015-10-05 14:54:47 +03:00
|
|
|
def create_role project_id
|
2015-10-06 13:50:26 +03:00
|
|
|
knife = knife_instance
|
2015-10-05 14:54:47 +03:00
|
|
|
if knife.nil?
|
|
|
|
|
DevopsLogger.logger.error "Can not get knife instance"
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
all_roles = knife.roles
|
|
|
|
|
info = {}
|
|
|
|
|
if all_roles.nil?
|
|
|
|
|
msg = "Can't get roles list from chef"
|
|
|
|
|
DevopsLogger.logger.error msg
|
2015-10-06 13:50:26 +03:00
|
|
|
return {error: [msg]}
|
2015-10-05 14:54:47 +03:00
|
|
|
end
|
|
|
|
|
role_name = knife.role_name(project_id, self.identifier)
|
|
|
|
|
begin
|
|
|
|
|
if all_roles.include? role_name
|
2015-10-06 13:50:26 +03:00
|
|
|
info[:exist] = [role_name]
|
2015-10-05 14:54:47 +03:00
|
|
|
else
|
|
|
|
|
knife.create_role role_name, project_id, self.identifier
|
2015-10-06 13:50:26 +03:00
|
|
|
info[:new] = [role_name]
|
2015-10-05 14:54:47 +03:00
|
|
|
DevopsLogger.logger.info "Role '#{role_name}' created"
|
|
|
|
|
end
|
|
|
|
|
self.run_list << "role[#{role_name}]"
|
|
|
|
|
rescue => er
|
2015-10-06 13:50:26 +03:00
|
|
|
info[:error] = [role_name]
|
2015-10-05 14:54:47 +03:00
|
|
|
DevopsLogger.logger.error "Role '#{role_name}' can not be created: #{er.message}"
|
|
|
|
|
end
|
|
|
|
|
info
|
|
|
|
|
end
|
|
|
|
|
|
2015-10-06 13:50:26 +03:00
|
|
|
def knife_instance
|
|
|
|
|
KnifeFactory.instance
|
|
|
|
|
end
|
|
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
end
|
|
|
|
|
end
|
2014-06-24 13:40:52 +04:00
|
|
|
end
|