class Puppet::Forge::ModuleRelease
Attributes
install_dir[R]
metadata[R]
Public Class Methods
new(source, data)
click to toggle source
Calls superclass method
# File lib/puppet/forge.rb 125 def initialize(source, data) 126 @data = data 127 @metadata = meta = data['metadata'] 128 129 name = meta['name'].tr('/', '-') 130 version = SemanticPuppet::Version.parse(meta['version']) 131 release = "#{name}@#{version}" 132 133 if meta['dependencies'] 134 dependencies = meta['dependencies'].collect do |dep| 135 begin 136 Puppet::ModuleTool::Metadata.new.add_dependency(dep['name'], dep['version_requirement'], dep['repository']) 137 Puppet::ModuleTool.parse_module_dependency(release, dep)[0..1] 138 rescue ArgumentError => e 139 raise ArgumentError, _("Malformed dependency: %{name}.") % { name: dep['name'] } + 140 ' ' + _("Exception was: %{detail}") % { detail: e } 141 end 142 end 143 else 144 dependencies = [] 145 end 146 147 super(source, name, version, Hash[dependencies]) 148 end
Public Instance Methods
install(dir)
click to toggle source
# File lib/puppet/forge.rb 150 def install(dir) 151 staging_dir = self.prepare 152 153 module_dir = dir + name[/-(.*)/, 1] 154 module_dir.rmtree if module_dir.exist? 155 156 # Make sure unpacked module has the same ownership as the folder we are moving it into. 157 Puppet::ModuleTool::Applications::Unpacker.harmonize_ownership(dir, staging_dir) 158 159 FileUtils.mv(staging_dir, module_dir) 160 @install_dir = dir 161 162 # Return the Pathname object representing the directory where the 163 # module release archive was unpacked the to. 164 return module_dir 165 ensure 166 staging_dir.rmtree if staging_dir.exist? 167 end
prepare()
click to toggle source
# File lib/puppet/forge.rb 169 def prepare 170 return @unpacked_into if @unpacked_into 171 172 Puppet.warning "#{@metadata['name']} has been deprecated by its author! View module on Puppet Forge for more info." if deprecated? 173 174 download(@data['file_uri'], tmpfile) 175 checksum = @data['file_sha256'] 176 if checksum 177 validate_checksum(tmpfile, checksum, Digest::SHA256) 178 else 179 checksum = @data['file_md5'] 180 if checksum 181 validate_checksum(tmpfile, checksum, Digest::MD5) 182 else 183 raise _("Forge module is missing SHA256 and MD5 checksums") 184 end 185 end 186 187 unpack(tmpfile, tmpdir) 188 189 @unpacked_into = Pathname.new(tmpdir) 190 end
Private Instance Methods
deprecated?()
click to toggle source
# File lib/puppet/forge.rb 233 def deprecated? 234 @data['module'] && (@data['module']['deprecated_at'] != nil) 235 end
download(uri, destination)
click to toggle source
# File lib/puppet/forge.rb 207 def download(uri, destination) 208 response = @source.make_http_request(uri, destination) 209 destination.flush and destination.close 210 unless response.code == 200 211 raise Puppet::Forge::Errors::ResponseError.new(:uri => response.url, :response => response) 212 end 213 end
tmpdir()
click to toggle source
Obtain a suitable temporary path for unpacking tarballs
@return [Pathname] path to temporary unpacking location
# File lib/puppet/forge.rb 197 def tmpdir 198 @dir ||= Dir.mktmpdir(name, Puppet::Forge::Cache.base_path) 199 end
tmpfile()
click to toggle source
# File lib/puppet/forge.rb 201 def tmpfile 202 @file ||= Tempfile.new(name, Puppet::Forge::Cache.base_path).tap do |f| 203 f.binmode 204 end 205 end
unpack(file, destination)
click to toggle source
# File lib/puppet/forge.rb 225 def unpack(file, destination) 226 begin 227 Puppet::ModuleTool::Applications::Unpacker.unpack(file.path, destination) 228 rescue Puppet::ExecutionFailure => e 229 raise RuntimeError, _("Could not extract contents of module archive: %{message}") % { message: e.message } 230 end 231 end
validate_checksum(file, checksum, digest_class)
click to toggle source
# File lib/puppet/forge.rb 215 def validate_checksum(file, checksum, digest_class) 216 if Facter.value(:fips_enabled) && digest_class == Digest::MD5 217 raise _("Module install using MD5 is prohibited in FIPS mode.") 218 end 219 220 if digest_class.file(file.path).hexdigest != checksum 221 raise RuntimeError, _("Downloaded release for %{name} did not match expected checksum %{checksum}") % { name: name, checksum: checksum } 222 end 223 end