require 'fileutils' require 'app42/command/base' require 'terminal-table' module App42 module Command class App < Base # will collect all required attributes for new VM spawn def setup_infra app_name = get_app_name_and_check_app_url_availability vm_type = get_vm_types iaas = get_iaas_providers app_name, source_url = get_app_source app_name, iaas, vm_type end # will collect all required attributes for app deploy def deploy @options[:name] = get_app_name if @options[:name].nil? response = interactive_get 'info', 'app/uploadtypes' if is_app_exist? @options[:name] app_source_type = response['sourceTypes'] if response['sourceTypes'].count > 1 # TODO, for future release # get_git_url else status = get_binary_url @options[:name] end exit! if status end # @param app_name # @return binary # @return deployment path # def get_binary_url app_name app_source, source_url = collect_app_source app_name status = upload_binary app_name, app_source, source_url return status end # # @param app_name # @param iaas # @param vm_type # @return host name # def collect_vm_details app_name, iaas, vm_type runtime = get_runtime framework = get_framework iaas, vm_type, runtime webserver = get_webserver iaas, vm_type, runtime, framework os = get_os_for_app iaas, vm_type, runtime, framework, webserver # FIXME, may be configure out later # instance = get_instance 'new_vm' vmconfig = get_vmconfig vm_type, iaas setup_infra_res = App42::Command::Base.new.create_infrastructure app_name, iaas, vm_type, runtime, framework, webserver, os, vmconfig exit! if setup_infra_res end # # @param deployment path # @param app_name # @return true/SystemExit # def is_binary_exist? source_url, app_name path = escape_path(source_url) app_file_name = nil @binary_retry ||= 1 no_of_file = [] Dir["#{path}/*"].collect {|f| app_file_name = f and no_of_file << f if f.include?('.zip') || f.include?('.war') || f.include?('.tar.gz') || f.include?('.gzip') } if no_of_file.count > 1 message "#{Message::MORE_THAN_ONE_BINARY}", true, 'red' app_file_name = input "Please Select Binary", no_of_file, true elsif app_file_name.nil? message "#{Message::NO_BINARY}", true, 'red' exit! if (@binary_retry +=1 ) >= 4 get_binary_url app_name end return app_file_name end # # ask existing app url for deploy # def ask_existing_app_url input "Enter App URL", [], true end # @param app_source_url def ask_app_source app_source_type input "Choose Source Type", app_source_type, true end # # @param binary/git # @return path # def get_source_path app_source path = ask(Paint["#{app_source.capitalize} Deployment Path", :cyan]) return path.strip end # # collect git URL from user # def get_git_url(prompt = Paint["Deployment Path?", :cyan]) ask(prompt) {|q| q.each = true} end # # Will scale app by no of instance # def scale @options[:name] = get_app_name if @options[:name].nil? @options[:instance] = get_instance __method__ if is_app_exist? @options[:name] and @options[:instance].nil? scale_or_descal_res = scale_or_descale_app __method__, @options[:instance], @options[:name] exit! if scale_or_descal_res end # # Will descale app by no of instance # def descale @options[:name] = get_app_name if @options[:name].nil? @options[:instance] = get_instance __method__ if is_app_exist? @options[:name] and @options[:instance].nil? scale_or_descal_res = scale_or_descale_app __method__, @options[:instance], @options[:name] exit! if scale_or_descal_res end # app42 start # # will start the app, return true or error code/message # def start @options[:name] = get_app_name if @options[:name].nil? app_operation_req = app_operation __method__, @options[:name] if is_app_exist? @options[:name] exit! if app_operation_req end # app42 stop # # will stop the app, return true or error code/message # def stop @options[:name] = get_app_name if @options[:name].nil? app_operation_req = app_operation __method__, @options[:name] if is_app_exist? @options[:name] exit! if app_operation_req end # app42 start # # will restart the app, return true or error code/message # def restart @options[:name] = get_app_name if @options[:name].nil? app_operation_req = app_operation __method__, @options[:name] if is_app_exist? @options[:name] exit! if app_operation_req end # # will delete the app, return true or error code/message # def delete @options[:name] = get_app_name if @options[:name].nil? app_operation_req = app_operation __method__, @options[:name] if is_app_exist? @options[:name] exit! if app_operation_req end # # List deployed applications # def apps response = build_get_request params, 'app', nil rows, rows_header_final, rows_header = [], [], nil unless response['apps'].nil? response['apps'].each do |e| rows_header = e.keys rows << e.values end else message "#{Message::NO_APP}", true, 'red' exit! end rows_header.map { |e| rows_header_final << camel_case_to_whitespace(e) } table = Terminal::Table.new :title => Paint["=== My Apps ===", :green], :headings => rows_header_final, :rows => rows puts table end end end end