class Chef::Provider::Launchd
Public Instance Methods
action_create()
click to toggle source
# File lib/chef/provider/launchd.rb, line 58 def action_create manage_plist(:create) end
action_create_if_missing()
click to toggle source
# File lib/chef/provider/launchd.rb, line 62 def action_create_if_missing manage_plist(:create_if_missing) end
action_delete()
click to toggle source
# File lib/chef/provider/launchd.rb, line 66 def action_delete # If you delete a service you want to make sure its not loaded or # the service will be in memory and you wont be able to stop it. if ::File.exists?(@path) manage_service(:disable) end manage_plist(:delete) end
action_disable()
click to toggle source
# File lib/chef/provider/launchd.rb, line 83 def action_disable manage_service(:disable) end
action_enable()
click to toggle source
# File lib/chef/provider/launchd.rb, line 75 def action_enable if manage_plist(:create) manage_service(:restart) else manage_service(:enable) end end
action_restart()
click to toggle source
# File lib/chef/provider/launchd.rb, line 87 def action_restart manage_service(:restart) end
content()
click to toggle source
# File lib/chef/provider/launchd.rb, line 175 def content plist_hash = new_resource.plist_hash || gen_hash Plist::Emit.dump(plist_hash) unless plist_hash.nil? end
content?()
click to toggle source
# File lib/chef/provider/launchd.rb, line 171 def content? !!content end
cookbook_file_resource()
click to toggle source
# File lib/chef/provider/launchd.rb, line 148 def cookbook_file_resource res = Chef::Resource::CookbookFile.new(@path, run_context) res.cookbook_name = cookbook if cookbook res.name(@path) if @path res.backup(backup) if backup res.group(group) if group res.mode(mode) if mode res.owner(owner) if owner res.source(source) if source res end
define_resource_requirements()
click to toggle source
# File lib/chef/provider/launchd.rb, line 160 def define_resource_requirements requirements.assert( :create, :create_if_missing, :delete, :enable, :disable ) do |a| type = new_resource.type a.assertion { %w{daemon agent}.include?(type.to_s) } error_msg = "type must be daemon or agent." a.failure_message Chef::Exceptions::ValidationFailed, error_msg end end
file_resource()
click to toggle source
# File lib/chef/provider/launchd.rb, line 137 def file_resource res = Chef::Resource::File.new(@path, run_context) res.name(@path) if @path res.backup(backup) if backup res.content(content) if content? res.group(group) if group res.mode(mode) if mode res.owner(owner) if owner res end
gen_hash()
click to toggle source
# File lib/chef/provider/launchd.rb, line 180 def gen_hash return nil unless new_resource.program || new_resource.program_arguments { "label" => "Label", "program" => "Program", "program_arguments" => "ProgramArguments", "abandon_process_group" => "AbandonProcessGroup", "debug" => "Debug", "disabled" => "Disabled", "enable_globbing" => "EnableGlobbing", "enable_transactions" => "EnableTransactions", "environment_variables" => "EnvironmentVariables", "exit_timeout" => "ExitTimeout", "ld_group" => "GroupName", "hard_resource_limits" => "HardreSourceLimits", "inetd_compatibility" => "inetdCompatibility", "init_groups" => "InitGroups", "keep_alive" => "KeepAlive", "launch_events" => "LaunchEvents", "launch_only_once" => "LaunchOnlyOnce", "limit_load_from_hosts" => "LimitLoadFromHosts", "limit_load_to_hosts" => "LimitLoadToHosts", "limit_load_to_session_type" => "LimitLoadToSessionType", "low_priority_io" => "LowPriorityIO", "mach_services" => "MachServices", "nice" => "Nice", "on_demand" => "OnDemand", "process_type" => "ProcessType", "queue_directories" => "QueueDirectories", "root_directory" => "RootDirectory", "run_at_load" => "RunAtLoad", "sockets" => "Sockets", "soft_resource_limits" => "SoftResourceLimits", "standard_error_path" => "StandardErrorPath", "standard_in_path" => "StandardInPath", "standard_out_path" => "StandardOutPath", "start_calendar_interval" => "StartCalendarInterval", "start_interval" => "StartInterval", "start_on_mount" => "StartOnMount", "throttle_interval" => "ThrottleInterval", "time_out" => "TimeOut", "umask" => "Umask", "username" => "UserName", "wait_for_debugger" => "WaitForDebugger", "watch_paths" => "WatchPaths", "working_directory" => "WorkingDirectory", }.each_with_object({}) do |(key, val), memo| memo[val] = new_resource.send(key) if new_resource.send(key) end end
gen_path_from_type()
click to toggle source
# File lib/chef/provider/launchd.rb, line 50 def gen_path_from_type types = { "daemon" => "/Library/LaunchDaemons/#{label}.plist", "agent" => "/Library/LaunchAgents/#{label}.plist", } types[type] end
load_current_resource()
click to toggle source
# File lib/chef/provider/launchd.rb, line 45 def load_current_resource current_resource = Chef::Resource::Launchd.new(new_resource.name) @path = path ? path : gen_path_from_type end
manage_agent?(action)
click to toggle source
# File lib/chef/provider/launchd.rb, line 110 def manage_agent?(action) # Gets UID of console_user and converts to string. console_user = Etc.getpwuid(::File.stat("/dev/console").uid).name root = console_user == "root" agent = type == "agent" invalid_action = [:delete, :disable, :enable, :restart].include?(action) lltstype = "" if new_resource.limit_load_to_session_type lltstype = new_resource.limit_load_to_session_type end invalid_type = lltstype != "LoginWindow" if root && agent && invalid_action && invalid_type logger.trace("#{label}: Aqua LaunchAgents shouldn't be loaded as root") return false end true end
manage_plist(action)
click to toggle source
# File lib/chef/provider/launchd.rb, line 91 def manage_plist(action) return unless manage_agent?(action) if source res = cookbook_file_resource else res = file_resource end res.run_action(action) new_resource.updated_by_last_action(true) if res.updated? res.updated end
manage_service(action)
click to toggle source
# File lib/chef/provider/launchd.rb, line 103 def manage_service(action) return unless manage_agent?(action) res = service_resource res.run_action(action) new_resource.updated_by_last_action(true) if res.updated? end
service_resource()
click to toggle source
# File lib/chef/provider/launchd.rb, line 128 def service_resource res = Chef::Resource::MacosxService.new(label, run_context) res.name(label) if label res.service_name(label) if label res.plist(@path) if @path res.session_type(session_type) if session_type res end