Knife-Zero doesn't include Berkshelf support, so vendoring everything in the repo is convenient again
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| module Ark
 | |
|   class ResourceDefaults
 | |
|     def extension
 | |
|       resource.extension || generate_extension_from_url(resource.url.clone)
 | |
|     end
 | |
| 
 | |
|     def prefix_bin
 | |
|       resource.prefix_bin || prefix_bin_from_node_in_run_context
 | |
|     end
 | |
| 
 | |
|     def prefix_root
 | |
|       resource.prefix_root || prefix_root_from_node_in_run_context
 | |
|     end
 | |
| 
 | |
|     def home_dir
 | |
|       if resource.home_dir.nil? || resource.home_dir.empty?
 | |
|         prefix_home = resource.prefix_home || prefix_home_from_node_in_run_context
 | |
|         ::File.join(prefix_home, resource.name)
 | |
|       else
 | |
|         resource.home_dir
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     def version
 | |
|       resource.version || default_version
 | |
|     end
 | |
| 
 | |
|     def path
 | |
|       if windows?
 | |
|         resource.win_install_dir
 | |
|       else
 | |
|         ::File.join(resource.prefix_root, "#{resource.name}-#{resource.version}")
 | |
|       end
 | |
|     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_from_node_in_run_context
 | |
|       ::File.join(partial_path, resource.name)
 | |
|     end
 | |
| 
 | |
|     def release_file
 | |
|       release_filename = "#{resource.name}-#{resource.version}.#{resource.extension}"
 | |
|       ::File.join(file_cache_path, release_filename)
 | |
|     end
 | |
| 
 | |
|     def release_file_without_version
 | |
|       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 prefix_bin_from_node_in_run_context
 | |
|       node_in_run_context['ark']['prefix_bin']
 | |
|     end
 | |
| 
 | |
|     def prefix_root_from_node_in_run_context
 | |
|       node_in_run_context['ark']['prefix_root']
 | |
|     end
 | |
| 
 | |
|     def prefix_home_from_node_in_run_context
 | |
|       node_in_run_context['ark']['prefix_home']
 | |
|     end
 | |
| 
 | |
|     def default_version
 | |
|       '1'
 | |
|     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 nil unless result.each.count > 0
 | |
|       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
 |