Class: Kontena::PluginManager
- Inherits:
-
Object
- Object
- Kontena::PluginManager
- Includes:
- Singleton
- Defined in:
- lib/kontena/plugin_manager.rb,
lib/kontena/plugin_manager/rubygems_client.rb
Defined Under Namespace
Classes: RubygemsClient
Constant Summary collapse
- CLI_GEM =
'kontena-cli'.freeze
- MIN_CLI_VERSION =
'0.15.99'.freeze
Instance Method Summary collapse
-
#cleanup_plugin(plugin_name) ⇒ Object
Runs gem cleanup, removes remains from previous versions.
-
#gem_versions(plugin_name) ⇒ Object
Retrieve plugin versions from rubygems.
-
#init ⇒ Object
Initialize plugin manager.
-
#install_dir ⇒ String
Gem installation directory.
-
#install_plugin(plugin_name, pre: false, version: nil) ⇒ Object
Install a plugin.
-
#installed(plugin_name) ⇒ Object
Find a plugin by name from installed plugins.
-
#latest_version(plugin_name, pre: false) ⇒ Object
Get the latest version number from rubygems.
- #plugins ⇒ Array<Gem::Specification>
-
#search_plugins(pattern = nil) ⇒ Object
Search rubygems for kontena plugins.
-
#uninstall_plugin(plugin_name) ⇒ Object
Uninstall a plugin.
-
#upgrade_plugin(plugin_name, pre: false) ⇒ Object
Upgrade an installed plugin.
Instance Method Details
#cleanup_plugin(plugin_name) ⇒ Object
Runs gem cleanup, removes remains from previous versions
108 109 110 111 112 113 114 115 116 117 |
# File 'lib/kontena/plugin_manager.rb', line 108 def cleanup_plugin(plugin_name) cmd = Gem::Commands::CleanupCommand.new = [] += ['-q', '--no-verbose'] unless ENV["DEBUG"] cmd. cmd.execute rescue Gem::SystemExitException => e return true if e.exit_code == 0 raise end |
#gem_versions(plugin_name) ⇒ Object
Retrieve plugin versions from rubygems
68 69 70 |
# File 'lib/kontena/plugin_manager.rb', line 68 def gem_versions(plugin_name) RubygemsClient.new.versions(prefix(plugin_name)) end |
#init ⇒ Object
Initialize plugin manager
20 21 22 23 24 25 26 |
# File 'lib/kontena/plugin_manager.rb', line 20 def init ENV["GEM_HOME"] = install_dir Gem.paths = ENV plugins use_dummy_ui unless ENV["DEBUG"] true end |
#install_dir ⇒ String
Gem installation directory
121 122 123 124 125 126 127 128 129 |
# File 'lib/kontena/plugin_manager.rb', line 121 def install_dir return @install_dir if @install_dir install_dir = File.join(Dir.home, '.kontena', 'gems', RUBY_VERSION) unless File.directory?(install_dir) require 'fileutils' FileUtils.mkdir_p(install_dir, mode: 0700) end @install_dir = install_dir end |
#install_plugin(plugin_name, pre: false, version: nil) ⇒ Object
Install a plugin
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/kontena/plugin_manager.rb', line 32 def install_plugin(plugin_name, pre: false, version: nil) cmd = Gem::DependencyInstaller.new( document: false, force: true, prerelease: pre, minimal_deps: true ) plugin_version = version.nil? ? Gem::Requirement.default : Gem::Requirement.new(version) cmd.install(prefix(plugin_name), plugin_version) cmd.installed_gems end |
#installed(plugin_name) ⇒ Object
Find a plugin by name from installed plugins
82 83 84 85 |
# File 'lib/kontena/plugin_manager.rb', line 82 def installed(plugin_name) search = prefix(plugin_name) plugins.find {|plugin| plugin.name == search } end |
#latest_version(plugin_name, pre: false) ⇒ Object
Get the latest version number from rubygems
75 76 77 78 |
# File 'lib/kontena/plugin_manager.rb', line 75 def latest_version(plugin_name, pre: false) return gem_versions(plugin_name).first if pre gem_versions(plugin_name).find { |version| !version.prerelease? } end |
#plugins ⇒ Array<Gem::Specification>
133 134 135 |
# File 'lib/kontena/plugin_manager.rb', line 133 def plugins @plugins ||= load_plugins end |
#search_plugins(pattern = nil) ⇒ Object
Search rubygems for kontena plugins
62 63 64 |
# File 'lib/kontena/plugin_manager.rb', line 62 def search_plugins(pattern = nil) RubygemsClient.new.search(prefix(pattern)) end |
#uninstall_plugin(plugin_name) ⇒ Object
Uninstall a plugin
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/kontena/plugin_manager.rb', line 46 def uninstall_plugin(plugin_name) installed = installed(plugin_name) raise "Plugin #{plugin_name} not installed" unless installed cmd = Gem::Uninstaller.new( installed.name, all: true, executables: true, force: true, install_dir: installed.base_dir ) cmd.uninstall end |
#upgrade_plugin(plugin_name, pre: false) ⇒ Object
Upgrade an installed plugin
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/kontena/plugin_manager.rb', line 90 def upgrade_plugin(plugin_name, pre: false) installed = installed(plugin_name) if installed.version.prerelease? pre = true end if installed latest = latest_version(plugin_name, pre: pre) if latest > installed.version install_plugin(plugin_name, version: latest.to_s) end else raise "Plugin #{plugin_name} not installed" end end |