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