71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "commands/deploy"
 | |
| require "commands/status"
 | |
| require "workers/deploy_worker"
 | |
| 
 | |
| module Devops
 | |
|   module Version2_0
 | |
|     module Handler
 | |
|       class Deploy
 | |
|         extend DeployCommands
 | |
|         extend StatusCommands
 | |
| 
 | |
|         def self.deploy
 | |
|           lambda {
 | |
|             check_privileges("server", "x")
 | |
|             # TODO: send message
 | |
|             #broadcast(:devops_deploy, "deploy")
 | |
|             r = create_object_from_json_body
 | |
|             names = check_array(r["names"], "Parameter 'names' should be a not empty array of strings")
 | |
|             tags = check_array(r["tags"], "Parameter 'tags' should be an array of strings", String, true) || []
 | |
| 
 | |
|             servers = settings.mongo.servers(nil, nil, names, true)
 | |
|             halt(404, "No reserved servers found for names '#{names.join("', '")}'") if servers.empty?
 | |
|             keys = {}
 | |
|             servers.sort_by!{|s| names.index(s.chef_node_name)}
 | |
|             if r.key?("trace")
 | |
|               stream() do |out|
 | |
|                 status = []
 | |
|                 begin
 | |
|                   servers.each do |s|
 | |
|                     project = begin
 | |
|                       settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
 | |
|                     rescue InvalidPrivileges, RecordNotFound  => e
 | |
|                       out << e.message + "\n"
 | |
|                       status.push 2
 | |
|                       next
 | |
|                     end
 | |
|                     res = deploy_server_proc.call(out, s, settings.mongo, tags)
 | |
|                     status.push(res)
 | |
|                   end
 | |
|                   out << create_status(status)
 | |
|                 rescue IOError => e
 | |
|                   logger.error e.message
 | |
|                   break
 | |
|                 end
 | |
|               end # stream
 | |
|             else
 | |
|               dir = DevopsService.config[:report_dir_v2]
 | |
|               files = []
 | |
|               uri = URI.parse(request.url)
 | |
|               servers.each do |s|
 | |
|                 project = begin
 | |
|                   settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
 | |
|                 rescue InvalidPrivileges, RecordNotFound  => e
 | |
|                   next
 | |
|                 end
 | |
|                 jid = DeployWorker.perform_async(dir, s.to_hash, tags, request.env['REMOTE_USER'], DevopsService.config)
 | |
|                 logger.info "Job '#{jid}' has been started"
 | |
|                 uri.path = "#{DevopsService.config[:url_prefix]}/v2.0/report/" + jid
 | |
|                 files.push uri.to_s
 | |
|               end
 | |
|               sleep 1
 | |
|               json files
 | |
|             end
 | |
|           }
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | 
