require 'logger' require 'pathname' require 'yaml' module KPM class Installer < BaseInstaller def self.from_file(config_path=nil, logger=nil) if config_path.nil? # Install Kill Bill, Kaui and the KPM plugin by default config = {'killbill' => {'version' => 'LATEST', 'plugins' => {'ruby' => [{'name' => 'kpm'}]}}, 'kaui' => {'version' => 'LATEST'}} else config = YAML::load_file(config_path) end Installer.new(config, logger) end def initialize(raw_config, logger=nil) @config = raw_config['killbill'] @kaui_config = raw_config['kaui'] if logger.nil? logger = Logger.new(STDOUT) logger.level = Logger::INFO end nexus_config = !@config.nil? ? @config['nexus'] : (!@kaui_config.nil? ? @kaui_config['nexus'] : nil) nexus_ssl_verify = !nexus_config.nil? ? nexus_config['ssl_verify'] : true super(logger, nexus_config, nexus_ssl_verify) end def install(force_download=false, verify_sha1=true) help = nil unless @config.nil? help = install_tomcat if @config['webapp_path'].nil? install_killbill_server(@config['group_id'], @config['artifact_id'], @config['packaging'], @config['classifier'], @config['version'], @config['webapp_path'], force_download, verify_sha1) install_plugins(force_download, verify_sha1) unless @config['default_bundles'] == false install_default_bundles(@config['plugins_dir'], @config['default_bundles_version'], @config['version'], force_download, verify_sha1) end end unless @kaui_config.nil? if @kaui_config['webapp_path'].nil? @logger.warn('No webapp_path specified for Kaui, aborting installation') return end install_kaui(@kaui_config['group_id'], @kaui_config['artifact_id'], @kaui_config['packaging'], @kaui_config['classifier'], @kaui_config['version'], @kaui_config['webapp_path'], force_download, verify_sha1) end help end private def install_tomcat(dir=Dir.pwd) # Download and unpack Tomcat manager = KPM::TomcatManager.new(dir, @logger) manager.download # Update main config root_war_path = manager.setup @config['webapp_path'] = root_war_path unless @kaui_config.nil? @kaui_config['webapp_path'] = Pathname.new(File.dirname(root_war_path)).join('kaui.war').to_s end # Help message manager.help end def install_plugins(force_download, verify_sha1) install_java_plugins(force_download, verify_sha1) install_ruby_plugins(force_download, verify_sha1) end def install_java_plugins(force_download, verify_sha1) return if @config['plugins'].nil? or @config['plugins']['java'].nil? infos = [] @config['plugins']['java'].each do |plugin| infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'java', force_download, verify_sha1, false) end infos end def install_ruby_plugins(force_download, verify_sha1) return if @config['plugins'].nil? or @config['plugins']['ruby'].nil? verify_jruby_jar=true infos = [] @config['plugins']['ruby'].each do |plugin| infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'ruby', force_download, verify_sha1, verify_jruby_jar) verify_jruby_jar=false end infos end end end