require 'dply/helper' require 'dply/util' require 'dply/setup' require 'dply/yum' require 'dply/release' require 'dply/release_helper' require 'forwardable' module Dply module Strategy class Archive extend Forwardable include Helper attr_reader :config, :options def_delegators :config, :target, :branch, :revision, :name, :config_map, :dir_map, :build_url, :meta_conf def initialize(config, options) @config = config @options = options || {} end def deploy error "revision not specified( use -r)" if not revision setup.archive if release.already_deployed? && release.current? logger.info "revision #{revision} is currently deployed" current_version = previous_version = get_release prune_releases util.report_changes(current_version, previous_version) return end generate_meta_config install_release previous_version = get_release release.make_current Dir.chdir current_dir do util.run "deploy:#{deploy_target}", render_config: true end release.record_deployment current_version = get_release prune_releases util.report_changes(previous_version, current_version) end def reload generate_meta_config Dir.chdir current_dir do link_all util.run :reload, render_config: true end end private def generate_meta_config meta_conf.generate if meta_conf end def deploy_target @deploy_target ||= (target || :archive) end def current_dir @current_dir ||= "#{config.dir}/current" end def get_release return "NA" if not File.symlink? current_dir File.basename (File.readlink current_dir) end def release @release ||= Release.find_or_create( revision: revision, branch: branch, app_name: config.name, url: config.build_url ) end def install_release release.verify_checksum = config.verify_checksum release.install Dir.chdir release.path do link_all util.install_pkgs end end def link_all util.link "#{config.dir}/shared", dir_map util.link "#{config.dir}/config", config_map end def setup @setup ||= Setup.new(@config) end def util @util ||= Util.new end def prune_releases ReleaseHelper.new.prune_releases end end end end