Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F8391308
ruby.rb
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
ruby.rb
View Options
begin
require
'puppet_x/bodeco/archive'
require
'puppet_x/bodeco/util'
rescue
LoadError
require
'pathname'
# WORK_AROUND #14073 and #7788
archive
=
Puppet
::
Module
.
find
(
'archive'
,
Puppet
[
:environment
].
to_s
)
raise
(
LoadError
,
"Unable to find archive module in modulepath
#{
Puppet
[
:basemodulepath
]
||
Puppet
[
:modulepath
]
}
"
)
unless
archive
require
File
.
join
archive
.
path
,
'lib/puppet_x/bodeco/archive'
require
File
.
join
archive
.
path
,
'lib/puppet_x/bodeco/util'
end
require
'securerandom'
require
'tempfile'
Puppet
::
Type
.
type
(
:archive
)
.
provide
(
:ruby
)
do
defaultfor
:feature
=>
:microsoft_windows
attr_reader
:archive_checksum
def
exists?
if
extracted?
if
File
.
exist?
archive_filepath
checksum?
else
cleanup
true
end
else
checksum?
end
end
def
create
transfer_download
(
archive_filepath
)
unless
checksum?
extract
cleanup
end
def
destroy
FileUtils
.
rm_f
(
archive_filepath
)
if
File
.
exist?
(
archive_filepath
)
end
def
archive_filepath
resource
[
:path
]
end
def
tempfile_name
if
resource
[
:checksum
]
==
'none'
"
#{
resource
[
:filename
]
}
_
#{
SecureRandom
.
base64
}
"
else
"
#{
resource
[
:filename
]
}
_
#{
resource
[
:checksum
]
}
"
end
end
def
creates
if
resource
[
:extract
]
==
:true
extracted?
?
resource
[
:creates
]
:
'archive not extracted'
else
resource
[
:creates
]
end
end
def
creates=
(
_value
)
extract
end
def
checksum
resource
[
:checksum
]
||
remote_checksum
end
def
remote_checksum
@remote_checksum
||=
begin
PuppetX
::
Bodeco
::
Util
.
content
(
resource
[
:checksum_url
]
,
:username
=>
resource
[
:username
]
,
:password
=>
resource
[
:password
]
,
:cookie
=>
resource
[
:cookie
]
)
[
/\b[\da-f]{32,128}\b/i
]
if
resource
[
:checksum_url
]
end
end
# Private: See if local archive checksum matches.
# returns boolean
def
checksum?
(
store_checksum
=
true
)
archive_exist
=
File
.
exist?
archive_filepath
if
archive_exist
&&
resource
[
:checksum_type
]
!=
:none
archive
=
PuppetX
::
Bodeco
::
Archive
.
new
(
archive_filepath
)
archive_checksum
=
archive
.
checksum
(
resource
[
:checksum_type
]
)
@archive_checksum
=
archive_checksum
if
store_checksum
checksum
==
archive_checksum
else
archive_exist
end
end
def
cleanup
return
unless
extracted?
&&
resource
[
:cleanup
]
==
:true
Puppet
.
debug
(
"Cleanup archive
#{
archive_filepath
}
"
)
destroy
end
def
extract
return
unless
resource
[
:extract
]
==
:true
raise
(
ArgumentError
,
'missing archive extract_path'
)
unless
resource
[
:extract_path
]
PuppetX
::
Bodeco
::
Archive
.
new
(
archive_filepath
)
.
extract
(
resource
[
:extract_path
]
,
:custom_command
=>
resource
[
:extract_command
]
,
:options
=>
resource
[
:extract_flags
]
,
:uid
=>
resource
[
:user
]
,
:gid
=>
resource
[
:group
]
)
end
def
extracted?
resource
[
:creates
]
&&
File
.
exist?
(
resource
[
:creates
]
)
end
def
transfer_download
(
archive_filepath
)
tempfile
=
Tempfile
.
new
(
tempfile_name
)
temppath
=
tempfile
.
path
tempfile
.
close!
case
resource
[
:source
]
when
/^(http|ftp)/
download
(
temppath
)
when
/^file/
uri
=
URI
(
resource
[
:source
]
)
FileUtils
.
copy
(
Puppet
::
Util
.
uri_to_path
(
uri
),
temppath
)
else
raise
(
Puppet
::
Error
,
"Source file:
#{
resource
[
:source
]
}
does not exists."
)
unless
File
.
exist?
(
resource
[
:source
]
)
FileUtils
.
copy
(
resource
[
:source
]
,
temppath
)
end
# conditionally verify checksum:
if
resource
[
:checksum_verify
]
==
:true
&&
resource
[
:checksum_type
]
!=
:none
archive
=
PuppetX
::
Bodeco
::
Archive
.
new
(
temppath
)
raise
(
Puppet
::
Error
,
'Download file checksum mismatch'
)
unless
archive
.
checksum
(
resource
[
:checksum_type
]
)
==
checksum
end
FileUtils
.
mkdir_p
(
File
.
dirname
(
archive_filepath
))
FileUtils
.
mv
(
temppath
,
archive_filepath
)
end
def
download
(
filepath
)
PuppetX
::
Bodeco
::
Util
.
download
(
resource
[
:source
]
,
filepath
,
:username
=>
resource
[
:username
]
,
:password
=>
resource
[
:password
]
,
:cookie
=>
resource
[
:cookie
]
,
:proxy_server
=>
resource
[
:proxy_server
]
,
:proxy_type
=>
resource
[
:proxy_type
]
)
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Jun 4 2025, 6:42 PM (14 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3398711
Attached To
R144 puppet-puppet-archive
Event Timeline
Log In to Comment