fluke/devops-service/db/mongo/models/deploy_env/deploy_env_base.rb
2015-10-05 14:54:47 +03:00

81 lines
2.2 KiB
Ruby

require "db/mongo/models/mongo_model"
require "providers/provider_factory"
require "db/mongo/models/model_with_provider"
require "db/validators/deploy_env/run_list"
require "db/validators/deploy_env/expiration"
require "db/validators/deploy_env/users"
module Devops
module Model
class DeployEnvBase < MongoModel
include ModelWithProvider
attr_accessor :identifier, :run_list, :expires, :users
set_validators ::Validators::DeployEnv::RunList,
::Validators::DeployEnv::Expiration,
::Validators::DeployEnv::Users
def initialize d={}
self.identifier = d["identifier"]
b = d["run_list"] || []
self.run_list = b.uniq
self.expires = d["expires"]
self.provider = d["provider"]
b = d["users"] || []
self.users = b.uniq
end
def to_hash
{
"identifier" => self.identifier,
"run_list" => self.run_list,
"expires" => self.expires,
"provider" => self.provider,
"users" => self.users
}
end
def add_users users
self.users = (self.users + users).uniq
end
def build_error_message(message)
"Deploy environment '#{self.identifier}'. " + message
end
def create_role project_id
knife = KnifeFactory.instance
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
return {error: msg}
end
role_name = knife.role_name(project_id, self.identifier)
begin
if all_roles.include? role_name
info[:exist] = role_name
else
knife.create_role role_name, project_id, self.identifier
info[:new] = role_name
DevopsLogger.logger.info "Role '#{role_name}' created"
end
self.run_list << "role[#{role_name}]"
rescue => er
info[:error] = role_name
DevopsLogger.logger.error "Role '#{role_name}' can not be created: #{er.message}"
end
info
end
end
end
end