-
-
Notifications
You must be signed in to change notification settings - Fork 176
Expand file tree
/
Copy pathresource_defaults.rb
More file actions
106 lines (85 loc) · 3.01 KB
/
resource_defaults.rb
File metadata and controls
106 lines (85 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
module Ark
class ResourceDefaults
def extension
resource.extension || generate_extension_from_url(resource.url.clone)
end
def prefix_bin
resource.prefix_bin || ::Ark::PlatformDefaults.prefix_bin
end
def prefix_root
resource.prefix_root || ::Ark::PlatformDefaults.prefix_root
end
def home_dir
if resource.home_dir.nil? || resource.home_dir.empty?
prefix_home = resource.prefix_home || ::Ark::PlatformDefaults.prefix_home
::File.join(prefix_home, resource.name)
else
resource.home_dir
end
end
def version
resource.version || ::Ark::PlatformDefaults.version
end
def path
return resource.path unless resource.path.nil? || resource.path.empty?
return resource.win_install_dir if windows?
::File.join(prefix_root, "#{resource.name}-#{version}")
end
def owner
resource.owner || default_owner
end
def windows?
node_in_run_context['platform_family'] == 'windows'
end
def path_without_version
partial_path = resource.path || prefix_root
::File.join(partial_path, resource.name)
end
def release_file
return resource.release_file unless resource.release_file.nil? || resource.release_file.empty?
release_filename = "#{resource.name}-#{version}.#{resource.extension}"
::File.join(file_cache_path, release_filename)
end
def release_file_without_version
return resource.release_file unless resource.release_file.nil? || resource.release_file.empty?
release_filename = "#{resource.name}.#{resource.extension}"
::File.join(file_cache_path, release_filename)
end
def initialize(resource)
@resource = resource
end
private
attr_reader :resource
def generate_extension_from_url(url)
# purge any trailing redirect
url =~ %r{^https?:\/\/.*(.bin|bz2|gz|jar|tbz|tgz|txz|war|xz|zip|7z)(\/.*\/)}
url.gsub!(Regexp.last_match(2), '') unless Regexp.last_match(2).nil?
# remove trailing query string
release_basename = ::File.basename(url.gsub(/\?.*\z/, '')).gsub(/-bin\b/, '')
# (\?.*)? accounts for a trailing querystring
Chef::Log.debug("DEBUG: release_basename is #{release_basename}")
release_basename =~ /^(.+?)\.(jar|tar\.bz2|tar\.gz|tar\.xz|tbz|tgz|txz|war|zip|tar|7z)(\?.*)?/
Chef::Log.debug("DEBUG: file_extension is #{Regexp.last_match(2)}")
Regexp.last_match(2)
end
def default_owner
if windows?
wmi_property_from_query(:name, "select * from Win32_UserAccount where sid like 'S-1-5-21-%-500' and LocalAccount=True")
else
'root'
end
end
def wmi_property_from_query(wmi_property, wmi_query)
@wmi = ::WIN32OLE.connect('winmgmts://')
result = @wmi.ExecQuery(wmi_query)
return unless result.each.any?
result.each.next.send(wmi_property)
end
def file_cache_path
Chef::Config[:file_cache_path]
end
def node_in_run_context
resource.run_context.node
end
end
end