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