#780: add new project environment path

This commit is contained in:
amartynov 2015-10-05 14:54:47 +03:00
parent 03e3b16aca
commit f256b6545f
5 changed files with 77 additions and 1 deletions

View File

@ -80,6 +80,20 @@ module Devops
"Updated project '#{project.id}' with components '#{body["components"].inspect}'" "Updated project '#{project.id}' with components '#{body["components"].inspect}'"
end end
def add_deploy_env id
project = Devops::Db.connector.project(id)
env = parser.add_deploy_env
env.add_users [parser.current_user]
env.validate!
begin
db_env = project.deploy_env(env.identifier)
raise InvalidRecord.new("Can not add new environment for project '#{id}'. Environment '#{env.identifier}' already exist")
rescue RecordNotFound => e
res = project.add_deploy_env env
return "Deploy environment '#{env.identifier}' has been added to project '#{project.id}'." + res, env
end
end
def add_or_update_deploy_env id, deploy_env def add_or_update_deploy_env id, deploy_env
project = Devops::Db.connector.project(id) project = Devops::Db.connector.project(id)
env = parser.add_or_update_deploy_env env = parser.add_or_update_deploy_env

View File

@ -45,6 +45,11 @@ module Devops
c c
end end
def add_deploy_env
body = create_object_from_json_body
Devops::Model::DeployEnvFactory.create(body)
end
def add_or_update_deploy_env def add_or_update_deploy_env
body = create_object_from_json_body body = create_object_from_json_body
rl = check_array(body["run_list"], "Parameter 'run_list' should be an array of string", String, false, true) rl = check_array(body["run_list"], "Parameter 'run_list' should be an array of string", String, false, true)

View File

@ -211,6 +211,18 @@ module Devops
json Devops::API2_0::Handler::Project.new(request).project_deploy_envs(project) json Devops::API2_0::Handler::Project.new(request).project_deploy_envs(project)
end end
# Add project deploy environment
#
# * *Request*
# - method : POST
# - headers :
# - Accept: application/json
app.post_with_headers "/project/:project/deploy_env", :headers => [:accept, :content_type] do |project|
check_privileges("project", "w")
res, env = Devops::API2_0::Handler::Project.new(request).add_deploy_env(project)
create_response(res, {environment: env.to_hash}, 200)
end
deploy_env_hash = {} deploy_env_hash = {}
# Get project deploy environment # Get project deploy environment
# #

View File

@ -45,6 +45,36 @@ module Devops
"Deploy environment '#{self.identifier}'. " + message "Deploy environment '#{self.identifier}'. " + message
end 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 end
end end

View File

@ -19,6 +19,8 @@ module Devops
define_hook :before_delete define_hook :before_delete
define_hook :after_delete define_hook :after_delete
#define_hook :after_add_deploy_env
attr_accessor :id, :deploy_envs, :type, :archived, :description, :run_list attr_accessor :id, :deploy_envs, :type, :archived, :description, :run_list
types :id => {:type => String, :empty => false}, types :id => {:type => String, :empty => false},
@ -63,8 +65,9 @@ module Devops
end end
def add_deploy_env deploy_env def add_deploy_env deploy_env
res = deploy_env.create_role(self.id)
Devops::Db.connector.add_deploy_env_to_project self.id, deploy_env Devops::Db.connector.add_deploy_env_to_project self.id, deploy_env
"" create_roles_response(res)
end end
def add_authorized_user user, env=nil def add_authorized_user user, env=nil
@ -207,6 +210,18 @@ module Devops
end end
end end
def create_roles_response roles
if roles.is_a?(String)
roles
else
info = ""
info += " Project roles '#{roles[:new].join("', '")}' have been automaticaly created" unless roles[:new].empty?
info += " Project roles '#{roles[:exist].join("', '")}' weren't created because they exist" unless roles[:exist].empty?
info += " Project roles '#{roles[:error].join("', '")}' weren't created because of internal error" unless roles[:error].empty?
info
end
end
end end
end end
end end