fluke/devops-client/lib/devops-client/handler/project.rb
Tim Lianov 03dc3d8d99 v3
2018-04-04 22:44:39 +03:00

171 lines
4.1 KiB
Ruby

require "devops-client/handler/provider"
require "devops-client/handler/image"
require "devops-client/handler/user"
require "devops-client/handler/helpers/validators"
require "devops-client/options/project_options"
require "json"
require "set"
require "devops-client/output/project"
class Project < Handler
output_with Output::Project
def initialize(host, def_options={})
@host = host
@options_parser = ProjectOptions.new(ARGV, def_options)
end
def handle
@command, @options, @args = @options_parser.parse_options_for!
extract_parameters
case @command
when :create
create_handler
when :delete
delete_handler
when :list
list_handler
output
when :servers
servers_handler
output
when :stacks
stacks_handler
output
when :set_run_list
set_run_list_handler
when :show
show_handler
output
when :update
puts "TODO: update"
exit
update_handler
when :user_add
user_add_handler
when :user_delete
user_delete_handler
when :archive
archive_handler
when :unarchive
unarchive_handler
when "test"
test_handler
end
end
def list_handler
@list = get "/projects"
end
def delete_handler
delete "/project/#{@project_id}" if question(I18n.t("handler.project.question.delete", :name => @project_id))
end
def show_handler
@show = get("/project/#{@project_id}")
end
def archive_handler
post "/project/#{@project_id}/archive"
end
def unarchive_handler
post "/project/#{@project_id}/unarchive"
end
def update_handler
r = inspect_parameters @options_parser.update_params, args[2], args[3]
unless r.nil?
@options_parser.invalid_update_command
abort(r)
end
update_object_from_file "project", args[2], args[3]
end
def create_handler
file = self.options[:file]
unless file.nil?
json = File.read(file)
begin
JSON.parse(json)
rescue JSON::ParserError => e
abort(I18n.t("handler.project.create.invalid_json", :file => file))
end
post_body("/project", json)
else
create_project
end
end
def servers_handler
@list = get "/project/#{@project_id}/servers"
end
def stacks_handler
@list = get "/project/#{@project_id}/stacks"
end
def user_add_handler
post "/project/#{@project_id}/users/add", @user_name
end
def user_delete_handler
post "/project/#{@project_id}/users/delete", @user_name
end
def set_run_list_handler
run_list = @run_list || []
if run_list.empty?
exit unless question(I18n.t("handler.project.question.run_list.empty"))
else
exit unless Validators.validate_run_list(run_list)
end
post "/project/#{@project_id}/run_list", run_list
end
def test_handler args
r = inspect_parameters @options_parser.test_params, args[2], args[3]
unless r.nil?
@options_parser.invalid_test_command
abort(r)
end
job_ids = post "/project/test/#{args[2]}/#{args[3]}"
reports_urls(job_ids)
end
protected
def create_project
project = {:environments => [], :id => @project_id}
project[:description] = options[:description] || enter_parameter_or_empty(I18n.t("handler.project.create.description") + ": ")
project[:project_users] = if options[:project_users]
options[:project_users]
else
if question(I18n.t("handler.project.create.question.users_choose"))
#choose
resources_selector.select_available_users(label: I18n.t("handler.project.create.users"))
else
#enter
get_comma_separated_list(I18n.t("input.message.input_list", cmd: I18n.t("input.user.list")))
end
end
project[:run_list] = if self.options[:run_list]
abort("Invalid run list: '#{self.options[:run_list].join(",")}'") unless Validators.validate_run_list(self.options[:run_list])
self.options[:run_list]
else
input_run_list
end
json = JSON.pretty_generate(project)
post_body("/project", json) if question(I18n.t("handler.project.question.create")){puts json}
end
def data_to_output
@list || @show || @test
end
end