archived projects
This commit is contained in:
parent
10d29624ba
commit
d36f3347f1
@ -22,10 +22,15 @@ module Connectors
|
|||||||
list
|
list
|
||||||
end
|
end
|
||||||
|
|
||||||
def projects ids=nil, type=nil, fields=[]
|
def projects ids=nil, type=nil, fields=[], archived=false
|
||||||
query = {}
|
query = {}
|
||||||
query['_id'] = {'$in' => ids} if ids
|
query['_id'] = {'$in' => ids} if ids
|
||||||
query['type'] = 'multi' if type == :multi
|
query['type'] = 'multi' if type == :multi
|
||||||
|
if archived
|
||||||
|
query["archived"] = true
|
||||||
|
else
|
||||||
|
query["archived"] = {"$exists" => false}
|
||||||
|
end
|
||||||
list(query, fields: fields)
|
list(query, fields: fields)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -74,6 +79,14 @@ module Connectors
|
|||||||
list('deploy_envs.users' => user)
|
list('deploy_envs.users' => user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def archive_project id
|
||||||
|
@collection.update({"_id" => id}, {"$set" => {"archived" => true}})
|
||||||
|
end
|
||||||
|
|
||||||
|
def unarchive_project id
|
||||||
|
@collection.update({"_id" => id}, {"$unset" => {"archived" => ""}})
|
||||||
|
end
|
||||||
|
|
||||||
def check_project_auth(project_id, env, user_id)
|
def check_project_auth(project_id, env, user_id)
|
||||||
project = show(project_id)
|
project = show(project_id)
|
||||||
raise InvalidPrivileges.new("User '#{user_id}' unauthorized to work with project '#{project_id}'") unless project.check_authorization(user_id, env)
|
raise InvalidPrivileges.new("User '#{user_id}' unauthorized to work with project '#{project_id}'") unless project.check_authorization(user_id, env)
|
||||||
|
|||||||
@ -8,21 +8,24 @@ require "json"
|
|||||||
|
|
||||||
class Project < MongoModel
|
class Project < MongoModel
|
||||||
|
|
||||||
attr_accessor :id, :deploy_envs, :type
|
attr_accessor :id, :deploy_envs, :type, :archived, :description
|
||||||
|
|
||||||
types :id => {:type => String, :empty => false},
|
types :id => {:type => String, :empty => false},
|
||||||
:deploy_envs => {:type => Array, :value_type => false, :empty => false}
|
:deploy_envs => {:type => Array, :value_type => false, :empty => false},
|
||||||
|
:description => {:type => String, :empty => true, :nil => true}
|
||||||
|
|
||||||
MULTI_TYPE = "multi"
|
MULTI_TYPE = "multi"
|
||||||
|
|
||||||
def self.fields
|
def self.fields
|
||||||
["deploy_envs", "type"]
|
["deploy_envs", "type", "description"]
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize p={}
|
def initialize p={}
|
||||||
self.id = p["name"]
|
self.id = p["name"]
|
||||||
#raise InvalidRecord.new "No deploy envirenments for project #{self.id}" if p["deploy_envs"].nil? or p["deploy_envs"].empty?
|
#raise InvalidRecord.new "No deploy envirenments for project #{self.id}" if p["deploy_envs"].nil? or p["deploy_envs"].empty?
|
||||||
self.type = p["type"]
|
self.type = p["type"]
|
||||||
|
self.description = p["description"]
|
||||||
|
self.archived = p["archived"] || false
|
||||||
env_class = ( self.multi? ? DeployEnvMulti : DeployEnvFactory )
|
env_class = ( self.multi? ? DeployEnvMulti : DeployEnvFactory )
|
||||||
unless p["deploy_envs"].nil?
|
unless p["deploy_envs"].nil?
|
||||||
self.deploy_envs = []
|
self.deploy_envs = []
|
||||||
@ -116,6 +119,8 @@ class Project < MongoModel
|
|||||||
def to_hash_without_id
|
def to_hash_without_id
|
||||||
h = {}
|
h = {}
|
||||||
h["deploy_envs"] = self.deploy_envs.map {|e| e.to_hash} unless self.deploy_envs.nil?
|
h["deploy_envs"] = self.deploy_envs.map {|e| e.to_hash} unless self.deploy_envs.nil?
|
||||||
|
h["archived"] = self.archived
|
||||||
|
h["description"] = self.description
|
||||||
if self.multi?
|
if self.multi?
|
||||||
h["type"] = MULTI_TYPE
|
h["type"] = MULTI_TYPE
|
||||||
end
|
end
|
||||||
|
|||||||
@ -37,6 +37,14 @@ class DevopsService
|
|||||||
Devops::Routes.route "/sidekiq", Sidekiq::Web
|
Devops::Routes.route "/sidekiq", Sidekiq::Web
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# steps:
|
||||||
|
# 1. init db
|
||||||
|
# 2. load application handlers
|
||||||
|
# 3. load plugins
|
||||||
|
# 4. load application routes
|
||||||
|
# 5. add plugins routes
|
||||||
|
# 6. init all routes classes
|
||||||
|
# 7. register routes for all classes
|
||||||
def init
|
def init
|
||||||
# init database
|
# init database
|
||||||
Devops::Db.init
|
Devops::Db.init
|
||||||
|
|||||||
@ -76,8 +76,6 @@ module Devops
|
|||||||
settings.mongo.create_root_user
|
settings.mongo.create_root_user
|
||||||
::Provider::ProviderFactory.init(config)
|
::Provider::ProviderFactory.init(config)
|
||||||
#set_up_providers_keys!(::Provider::ProviderFactory.all, mongo)
|
#set_up_providers_keys!(::Provider::ProviderFactory.all, mongo)
|
||||||
Wisper::GlobalListeners.subscribe(TestSubscriber2.new)
|
|
||||||
Wisper.subscribe(TestSubscriber.new)
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,8 @@ module Devops
|
|||||||
fields.push k if params["fields"].include?(k)
|
fields.push k if params["fields"].include?(k)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
json settings.mongo.projects(nil, nil, fields).map {|p| p.to_hash}
|
archived = params.include?("archived")
|
||||||
|
json settings.mongo.projects(nil, nil, fields, archived).map {|p| p.to_hash}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -199,12 +200,45 @@ module Devops
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.archive_project
|
||||||
|
lambda {
|
||||||
|
check_privileges("project", "w")
|
||||||
|
project = settings.mongo.project(params[:project])
|
||||||
|
if project.nil?
|
||||||
|
create_response("Project '#{params[:project]}' not found", nil, 404)
|
||||||
|
else
|
||||||
|
settings.mongo.archive_project(params[:project])
|
||||||
|
info = "Project '#{params[:project]}' has been archived"
|
||||||
|
create_response(info)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.unarchive_project
|
||||||
|
lambda {
|
||||||
|
check_privileges("project", "w")
|
||||||
|
project = settings.mongo.project(params[:project])
|
||||||
|
if project.nil?
|
||||||
|
create_response("Project '#{params[:project]}' not found", nil, 404)
|
||||||
|
else
|
||||||
|
settings.mongo.unarchive_project(params[:project])
|
||||||
|
info = "Project '#{params[:project]}' has been unarchived"
|
||||||
|
create_response(info)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def self.test_project
|
def self.test_project
|
||||||
lambda {
|
lambda {
|
||||||
check_privileges("project", "r")
|
check_privileges("project", "r")
|
||||||
project = settings.mongo.project(params[:id])
|
project = settings.mongo.project(params[:id])
|
||||||
env = project.deploy_env params[:env]
|
env = project.deploy_env params[:env]
|
||||||
logger.info "Test project '#{project.id}' and environment '#{env.identifier}'"
|
logger.info "Test project '#{project.id}' and environment '#{env.identifier}'"
|
||||||
|
if env.provider == Provider::Static::PROVIDER
|
||||||
|
msg = "Can not test environment with provider '#{Provider::Static::PROVIDER}'"
|
||||||
|
Logger.warn msg
|
||||||
|
return [400, msg]
|
||||||
|
end
|
||||||
|
|
||||||
dir = DevopsService.config[:report_dir_v2]
|
dir = DevopsService.config[:report_dir_v2]
|
||||||
uri = URI.parse(request.url)
|
uri = URI.parse(request.url)
|
||||||
@ -214,6 +248,7 @@ module Devops
|
|||||||
:user => request.env['REMOTE_USER']
|
:user => request.env['REMOTE_USER']
|
||||||
}
|
}
|
||||||
jid = ProjectTestWorker.perform_async(dir, p, DevopsService.config)
|
jid = ProjectTestWorker.perform_async(dir, p, DevopsService.config)
|
||||||
|
Worker.set_status jid, Worker::STATUS::IN_QUEUE
|
||||||
logger.info "Job '#{jid}' has been created"
|
logger.info "Job '#{jid}' has been created"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
files = [uri.to_s]
|
files = [uri.to_s]
|
||||||
|
|||||||
@ -120,6 +120,7 @@ module Devops
|
|||||||
h = s.to_hash
|
h = s.to_hash
|
||||||
h["options"] = s.options
|
h["options"] = s.options
|
||||||
jid = CreateServerWorker.perform_async(dir, env.provider, h, request.env['REMOTE_USER'], DevopsService.config)
|
jid = CreateServerWorker.perform_async(dir, env.provider, h, request.env['REMOTE_USER'], DevopsService.config)
|
||||||
|
Worker.set_status jid, Worker::STATUS::IN_QUEUE
|
||||||
logger.info "Job '#{jid}' has been started"
|
logger.info "Job '#{jid}' has been started"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
files.push uri.to_s
|
files.push uri.to_s
|
||||||
@ -163,7 +164,6 @@ module Devops
|
|||||||
else
|
else
|
||||||
halt_response("Server with instance ID '#{s.id}' and node name '#{params[:node_name]}' can not be unpaused, It in state '#{r}'", 409)
|
halt_response("Server with instance ID '#{s.id}' and node name '#{params[:node_name]}' can not be unpaused, It in state '#{r}'", 409)
|
||||||
end
|
end
|
||||||
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -179,7 +179,6 @@ module Devops
|
|||||||
s.reserved_by = user
|
s.reserved_by = user
|
||||||
settings.mongo.server_update(s)
|
settings.mongo.server_update(s)
|
||||||
create_response("Server '#{params[:node_name]}' has been reserved")
|
create_response("Server '#{params[:node_name]}' has been reserved")
|
||||||
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -262,6 +261,7 @@ module Devops
|
|||||||
h["options"] = s.options
|
h["options"] = s.options
|
||||||
h["_id"] = s.id
|
h["_id"] = s.id
|
||||||
jid = BootstrapWorker.perform_async(dir, d.provider, h, request.env['REMOTE_USER'], DevopsService.config)
|
jid = BootstrapWorker.perform_async(dir, d.provider, h, request.env['REMOTE_USER'], DevopsService.config)
|
||||||
|
Worker.set_status jid, Worker::STATUS::IN_QUEUE
|
||||||
logger.info "Job '#{jid}' has been started"
|
logger.info "Job '#{jid}' has been started"
|
||||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||||
uri.query = nil
|
uri.query = nil
|
||||||
|
|||||||
@ -248,6 +248,22 @@ module Devops
|
|||||||
# * *Returns* : text stream
|
# * *Returns* : text stream
|
||||||
app.post_with_headers "/project/:id/deploy", :headers => [:content_type], &Devops::Version2_0::Handler::Project.deploy_project
|
app.post_with_headers "/project/:id/deploy", :headers => [:content_type], &Devops::Version2_0::Handler::Project.deploy_project
|
||||||
|
|
||||||
|
# Set project to archivated state
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : POST
|
||||||
|
# - headers :
|
||||||
|
# - Content-Type: application/json
|
||||||
|
app.post_with_headers "/project/:project/archive", :headers => [:content_type], &Devops::Version2_0::Handler::Project.archive_project
|
||||||
|
|
||||||
|
# Set project to normal state
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : POST
|
||||||
|
# - headers :
|
||||||
|
# - Content-Type: application/json
|
||||||
|
app.post_with_headers "/project/:project/unarchive", :headers => [:content_type], &Devops::Version2_0::Handler::Project.unarchive_project
|
||||||
|
|
||||||
# Test project environment
|
# Test project environment
|
||||||
#
|
#
|
||||||
# Run tests:
|
# Run tests:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user