archived projects
This commit is contained in:
parent
10d29624ba
commit
d36f3347f1
@ -22,10 +22,15 @@ module Connectors
|
||||
list
|
||||
end
|
||||
|
||||
def projects ids=nil, type=nil, fields=[]
|
||||
def projects ids=nil, type=nil, fields=[], archived=false
|
||||
query = {}
|
||||
query['_id'] = {'$in' => ids} if ids
|
||||
query['type'] = 'multi' if type == :multi
|
||||
if archived
|
||||
query["archived"] = true
|
||||
else
|
||||
query["archived"] = {"$exists" => false}
|
||||
end
|
||||
list(query, fields: fields)
|
||||
end
|
||||
|
||||
@ -74,6 +79,14 @@ module Connectors
|
||||
list('deploy_envs.users' => user)
|
||||
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)
|
||||
project = show(project_id)
|
||||
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
|
||||
|
||||
attr_accessor :id, :deploy_envs, :type
|
||||
attr_accessor :id, :deploy_envs, :type, :archived, :description
|
||||
|
||||
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"
|
||||
|
||||
def self.fields
|
||||
["deploy_envs", "type"]
|
||||
["deploy_envs", "type", "description"]
|
||||
end
|
||||
|
||||
def initialize p={}
|
||||
self.id = p["name"]
|
||||
#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.description = p["description"]
|
||||
self.archived = p["archived"] || false
|
||||
env_class = ( self.multi? ? DeployEnvMulti : DeployEnvFactory )
|
||||
unless p["deploy_envs"].nil?
|
||||
self.deploy_envs = []
|
||||
@ -116,6 +119,8 @@ class Project < MongoModel
|
||||
def to_hash_without_id
|
||||
h = {}
|
||||
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?
|
||||
h["type"] = MULTI_TYPE
|
||||
end
|
||||
|
||||
@ -37,6 +37,14 @@ class DevopsService
|
||||
Devops::Routes.route "/sidekiq", Sidekiq::Web
|
||||
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
|
||||
# init database
|
||||
Devops::Db.init
|
||||
|
||||
@ -76,8 +76,6 @@ module Devops
|
||||
settings.mongo.create_root_user
|
||||
::Provider::ProviderFactory.init(config)
|
||||
#set_up_providers_keys!(::Provider::ProviderFactory.all, mongo)
|
||||
Wisper::GlobalListeners.subscribe(TestSubscriber2.new)
|
||||
Wisper.subscribe(TestSubscriber.new)
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -22,7 +22,8 @@ module Devops
|
||||
fields.push k if params["fields"].include?(k)
|
||||
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
|
||||
|
||||
@ -199,12 +200,45 @@ module Devops
|
||||
}
|
||||
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
|
||||
lambda {
|
||||
check_privileges("project", "r")
|
||||
project = settings.mongo.project(params[:id])
|
||||
env = project.deploy_env params[:env]
|
||||
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]
|
||||
uri = URI.parse(request.url)
|
||||
@ -214,6 +248,7 @@ module Devops
|
||||
:user => request.env['REMOTE_USER']
|
||||
}
|
||||
jid = ProjectTestWorker.perform_async(dir, p, DevopsService.config)
|
||||
Worker.set_status jid, Worker::STATUS::IN_QUEUE
|
||||
logger.info "Job '#{jid}' has been created"
|
||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||
files = [uri.to_s]
|
||||
|
||||
@ -120,6 +120,7 @@ module Devops
|
||||
h = s.to_hash
|
||||
h["options"] = s.options
|
||||
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"
|
||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||
files.push uri.to_s
|
||||
@ -163,7 +164,6 @@ module Devops
|
||||
else
|
||||
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
|
||||
|
||||
@ -179,7 +179,6 @@ module Devops
|
||||
s.reserved_by = user
|
||||
settings.mongo.server_update(s)
|
||||
create_response("Server '#{params[:node_name]}' has been reserved")
|
||||
|
||||
}
|
||||
end
|
||||
|
||||
@ -262,6 +261,7 @@ module Devops
|
||||
h["options"] = s.options
|
||||
h["_id"] = s.id
|
||||
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"
|
||||
uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
|
||||
uri.query = nil
|
||||
|
||||
@ -248,6 +248,22 @@ module Devops
|
||||
# * *Returns* : text stream
|
||||
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
|
||||
#
|
||||
# Run tests:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user