class Luban::Deployment::Package::Base
Attributes
current_version[R]
Public Class Methods
apply_to(version, &blk)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 23 def apply_to(version, &blk) dependencies.apply_to(version, &blk) end
decompose_version(version)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 51 def decompose_version(version) { major_version: version, patch_level: '' } end
dependencies()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 19 def dependencies @dependencies ||= DependencySet.new end
get_latest_version()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 63 def get_latest_version raise NotImplementedError, "#{self.class.name}#get_latest_version is an abstract method." end
inherited(subclass)
click to toggle source
Calls superclass method
Luban::Deployment::Command::inherited
# File lib/luban/deployment/cli/package/base.rb, line 8 def inherited(subclass) super # Ensure package dependencies from base class # got inherited to its subclasses subclass.instance_variable_set( '@dependencies', Marshal.load(Marshal.dump(dependencies)) ) end
latest_version()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 57 def latest_version version_mutex.synchronize do @latest_version ||= get_latest_version end end
package_class(package)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 31 def package_class(package) require_path = package_require_path(package) require require_path.to_s package_base_class(require_path) rescue LoadError => e abort "Aborted! Failed to load package #{require_path}: #{e.message}" end
required_packages_for(version)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 27 def required_packages_for(version) dependencies.dependencies_for(version) end
version_mutex()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 55 def version_mutex; @version_mutex ||= Mutex.new; end
worker_class(worker, package: self)
click to toggle source
Calls superclass method
Luban::Deployment::Command::worker_class
# File lib/luban/deployment/cli/package/base.rb, line 39 def worker_class(worker, package: self) if package.is_a?(Class) if package == self super(worker) else package.worker_class(worker) end else package_class(package).worker_class(worker) end end
Protected Class Methods
package_base_class(path)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 77 def package_base_class(path) Object.const_get(path.to_s.camelcase, false) end
package_require_path(package_name)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 69 def package_require_path(package_name) package_require_root.join(package_name.to_s.gsub(':', '/')) end
package_require_root()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 73 def package_require_root @default_package_root ||= Pathname.new("luban/deployment/packages") end
Public Instance Methods
binstubs(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 163 def binstubs(args:, opts:) if current_version update_binstubs(args: args, opts: opts.merge(version: current_version)) else versions.each do |v| update_binstubs(args: args, opts: opts.merge(version: v)) end end end
cleanup(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 157 def cleanup(args:, opts:) versions.each do |v| cleanup_all(args: args, opts: opts.merge(version: v)) end end
deprecated_versions()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 112 def deprecated_versions; package_options.select { |v, o| o[:deprecated] }.keys; end
find_application(name = nil)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 89 def find_application(name = nil) name.nil? ? parent : find_project.apps[name.to_sym] end
find_project()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 88 def find_project; parent.parent; end
has_version?(version)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 107 def has_version?(version) package_options.has_key?(version) end
install(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 123 def install(args:, opts:) result = download_package(args: args, opts: opts) unless result.nil? or result.status == :failed install_package(args: args, opts: opts) end end
install_all(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 130 def install_all(args:, opts:) installable_versions.each do |v| install(args: args, opts: opts.merge(version: v)) end deprecated_versions.each do |v| uninstall(args: args, opts: opts.merge(version: v)) end end
installable_versions()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 113 def installable_versions; package_options.select { |v, o| !o[:deprecated] }.keys; end
monitorable?()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 86 def monitorable?; false; end
package_options()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 95 def package_options; @package_options ||= {}; end
show_current(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 173 def show_current(args:, opts:) if current_version print_summary(get_summary(args: args, opts: opts.merge(version: current_version))) else puts " Warning! No current version of #{display_name} is specified." end end
show_summary(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 181 def show_summary(args:, opts:) versions.each do |v| print_summary(get_summary(args: args, opts: opts.merge(version: v))) end end
uninstall(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 146 def uninstall(args:, opts:) servers = select_servers(opts[:roles], opts[:hosts]) apps = parent.other_package_users_for(name, opts[:version], servers: servers) if apps.empty? or opts[:force] uninstall!(args: args, opts: opts) else puts " Skipped! #{name}-#{opts[:version]} is being used by #{apps.join(', ')}. " + "use -f to force uninstalling if necessary." end end
Also aliased as: uninstall!
uninstall_all(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 139 def uninstall_all(args:, opts:) versions.each do |v| uninstall(args: args, opts: opts.merge(version: v)) end end
update_package_options(version, **opts)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 97 def update_package_options(version, **opts) unless has_version?(version) version = self.class.package_class(name).latest_version if version == 'latest' package_options[version] = { name: name.to_s }.merge!(self.class.decompose_version(version)) end @current_version = version if opts[:current] package_options[version].merge!(opts) end
versions()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 111 def versions; package_options.keys; end
whence(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 195 def whence(args:, opts:) versions.each do |v| print_summary(whence_origin(args: args, opts: opts.merge(version: v))) end end
which(args:, opts:)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 187 def which(args:, opts:) if current_version print_summary(which_current(args: args, opts: opts.merge(version: current_version))) else puts " Warning! No current version of #{display_name} is specified." end end
Protected Instance Methods
compose_task_options(opts)
click to toggle source
Calls superclass method
Luban::Deployment::Command#compose_task_options
# File lib/luban/deployment/cli/package/base.rb, line 212 def compose_task_options(opts) opts = super version = opts[:version] unless version.nil? # Merge package options into task options without nil ones opts = package_options[version].merge(opts.reject { |_, v| v.nil? }) end opts end
print_summary(result)
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 270 def print_summary(result) Array(result).each do |entry| s = entry[:summary] puts " [#{entry[:hostname]}] #{s[:status]} #{s[:name]} (#{s[:installed]})" puts " [#{entry[:hostname]}] #{s[:executable]}" unless s[:executable].nil? puts " [#{entry[:hostname]}] #{s[:alert]}" unless s[:alert].nil? end end
set_parameters()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 203 def set_parameters self.config = parent.config end
setup_descriptions()
click to toggle source
# File lib/luban/deployment/cli/package/base.rb, line 222 def setup_descriptions desc "Manage package #{display_name}" long_desc "Manage the deployment of package #{display_name} in #{parent.class.name}" end
setup_provision_tasks()
click to toggle source
Calls superclass method
Luban::Deployment::Command::Tasks::Provision#setup_provision_tasks
# File lib/luban/deployment/cli/package/base.rb, line 227 def setup_provision_tasks super commands[:provision].undef_task :setup commands[:provision].undef_task :build commands[:provision].undef_task :destroy _package = self commands[:provision].alter do task :install do desc "Install a given version" long_desc "Install a given version in #{_package.parent.class.name}" option :version, "Version to install", short: :v, required: true, assure: ->(v){ _package.versions.include?(v) } switch :force, "Force to install", short: :f action! :install end task :install_all do desc "Install all versions" long_desc "Install all versions in #{_package.parent.class.name}" switch :force, "Force to install", short: :f action! :install_all end task :uninstall do desc "Uninstall a given version" long_desc "Uninstall a given version in #{_package.parent.class.name}" option :version, "Version to uninstall", short: :v, required: true, assure: ->(v){ _package.versions.include?(v) } switch :force, "Force to uninstall", short: :f action! :uninstall end task :uninstall_all do desc "Uninstall all versions" long_desc "Uninstall all versions in #{_package.parent.class.name}" switch :force, "Force to uninstall", short: :f, required: true action! :uninstall_all end end end
setup_tasks()
click to toggle source
Calls superclass method
Luban::Deployment::Command#setup_tasks
# File lib/luban/deployment/cli/package/base.rb, line 207 def setup_tasks super setup_provision_tasks end