class Puppet::ModuleTool::Applications::Uninstaller
Public Class Methods
new(name, options)
click to toggle source
# File lib/puppet/module_tool/applications/uninstaller.rb 7 def initialize(name, options) 8 @name = name 9 @options = options 10 @errors = Hash.new {|h, k| h[k] = {}} 11 @unfiltered = [] 12 @installed = [] 13 @suggestions = [] 14 @environment = options[:environment_instance] 15 @ignore_changes = options[:force] || options[:ignore_changes] 16 end
Public Instance Methods
run()
click to toggle source
# File lib/puppet/module_tool/applications/uninstaller.rb 18 def run 19 results = { 20 :module_name => @name, 21 :requested_version => @version, 22 } 23 24 begin 25 find_installed_module 26 validate_module 27 28 FileUtils.rm_rf(@installed.first.path, :secure => true) 29 30 results[:affected_modules] = @installed 31 results[:result] = :success 32 rescue ModuleToolError => err 33 results[:error] = { 34 :oneline => err.message, 35 :multiline => err.multiline, 36 } 37 rescue => e 38 results[:error] = { 39 :oneline => e.message, 40 :multiline => e.respond_to?(:multiline) ? e.multiline : [e.to_s, e.backtrace].join("\n") 41 } 42 ensure 43 results[:result] ||= :failure 44 end 45 46 results 47 end
Private Instance Methods
find_installed_module()
click to toggle source
# File lib/puppet/module_tool/applications/uninstaller.rb 51 def find_installed_module 52 @environment.modules_by_path.values.flatten.each do |mod| 53 mod_name = (mod.forge_name || mod.name).tr('/', '-') 54 if mod_name == @name 55 @unfiltered << { 56 :name => mod_name, 57 :version => mod.version, 58 :path => mod.modulepath, 59 } 60 if @options[:version] && mod.version 61 next unless Puppet::Module.parse_range(@options[:version]).include?(SemanticPuppet::Version.parse(mod.version)) 62 end 63 @installed << mod 64 elsif mod_name =~ /#{@name}/ 65 @suggestions << mod_name 66 end 67 end 68 69 if @installed.length > 1 70 raise MultipleInstalledError, 71 :action => :uninstall, 72 :module_name => @name, 73 :installed_modules => @installed.sort_by { |mod| @environment.modulepath.index(mod.modulepath) } 74 elsif @installed.empty? 75 if @unfiltered.empty? 76 raise NotInstalledError, 77 :action => :uninstall, 78 :suggestions => @suggestions, 79 :module_name => @name 80 else 81 raise NoVersionMatchesError, 82 :installed_modules => @unfiltered.sort_by { |mod| @environment.modulepath.index(mod[:path]) }, 83 :version_range => @options[:version], 84 :module_name => @name 85 end 86 end 87 end
validate_module()
click to toggle source
# File lib/puppet/module_tool/applications/uninstaller.rb 89 def validate_module 90 mod = @installed.first 91 92 unless @ignore_changes 93 raise _("Either the `--ignore_changes` or `--force` argument must be specified to uninstall modules when running in FIPS mode.") if Puppet.runtime[:facter].value(:fips_enabled) 94 95 changes = begin 96 Puppet::ModuleTool::Applications::Checksummer.run(mod.path) 97 rescue ArgumentError 98 [] 99 end 100 101 if mod.has_metadata? && !changes.empty? 102 raise LocalChangesError, 103 :action => :uninstall, 104 :module_name => (mod.forge_name || mod.name).tr('/', '-'), 105 :requested_version => @options[:version], 106 :installed_version => mod.version 107 end 108 end 109 110 if !@options[:force] && !mod.required_by.empty? 111 raise ModuleIsRequiredError, 112 :module_name => (mod.forge_name || mod.name).tr('/', '-'), 113 :required_by => mod.required_by, 114 :requested_version => @options[:version], 115 :installed_version => mod.version 116 end 117 end