Class: Chef::Provider
- Inherits:
-
Object
show all
- Extended by:
- Mixin::Provides
- Includes:
- Mixin::ShellOut, Mixin::WhyRun
- Defined in:
- lib/chef/provider.rb,
lib/chef/provider/env.rb,
lib/chef/provider/git.rb,
lib/chef/provider/log.rb,
lib/chef/provider/cron.rb,
lib/chef/provider/file.rb,
lib/chef/provider/link.rb,
lib/chef/provider/ohai.rb,
lib/chef/provider/user.rb,
lib/chef/provider/batch.rb,
lib/chef/provider/group.rb,
lib/chef/provider/mdadm.rb,
lib/chef/provider/mount.rb,
lib/chef/provider/deploy.rb,
lib/chef/provider/reboot.rb,
lib/chef/provider/script.rb,
lib/chef/provider/execute.rb,
lib/chef/provider/package.rb,
lib/chef/provider/service.rb,
lib/chef/provider/user/pw.rb,
lib/chef/provider/cron/aix.rb,
lib/chef/provider/erl_call.rb,
lib/chef/provider/group/pw.rb,
lib/chef/provider/ifconfig.rb,
lib/chef/provider/template.rb,
lib/chef/provider/user/aix.rb,
lib/chef/provider/cron/unix.rb,
lib/chef/provider/directory.rb,
lib/chef/provider/group/aix.rb,
lib/chef/provider/lwrp_base.rb,
lib/chef/provider/mount/aix.rb,
lib/chef/provider/user/dscl.rb,
lib/chef/provider/breakpoint.rb,
lib/chef/provider/dsc_script.rb,
lib/chef/provider/group/dscl.rb,
lib/chef/provider/group/suse.rb,
lib/chef/provider/ruby_block.rb,
lib/chef/provider/subversion.rb,
lib/chef/provider/env/windows.rb,
lib/chef/provider/mount/mount.rb,
lib/chef/provider/package/aix.rb,
lib/chef/provider/package/apt.rb,
lib/chef/provider/package/ips.rb,
lib/chef/provider/package/rpm.rb,
lib/chef/provider/package/yum.rb,
lib/chef/provider/remote_file.rb,
lib/chef/provider/service/aix.rb,
lib/chef/provider/dsc_resource.rb,
lib/chef/provider/file/content.rb,
lib/chef/provider/http_request.rb,
lib/chef/provider/ifconfig/aix.rb,
lib/chef/provider/package/dpkg.rb,
lib/chef/provider/registry_key.rb,
lib/chef/provider/service/init.rb,
lib/chef/provider/user/solaris.rb,
lib/chef/provider/user/useradd.rb,
lib/chef/provider/user/windows.rb,
lib/chef/provider/cookbook_file.rb,
lib/chef/provider/group/gpasswd.rb,
lib/chef/provider/group/usermod.rb,
lib/chef/provider/group/windows.rb,
lib/chef/provider/mount/solaris.rb,
lib/chef/provider/mount/windows.rb,
lib/chef/provider/group/groupadd.rb,
lib/chef/provider/group/groupmod.rb,
lib/chef/provider/package/pacman.rb,
lib/chef/provider/package/zypper.rb,
lib/chef/provider/service/debian.rb,
lib/chef/provider/service/macosx.rb,
lib/chef/provider/service/redhat.rb,
lib/chef/provider/service/simple.rb,
lib/chef/provider/windows_script.rb,
lib/chef/provider/deploy/revision.rb,
lib/chef/provider/ifconfig/debian.rb,
lib/chef/provider/ifconfig/redhat.rb,
lib/chef/provider/package/openbsd.rb,
lib/chef/provider/package/paludis.rb,
lib/chef/provider/package/portage.rb,
lib/chef/provider/package/smartos.rb,
lib/chef/provider/package/solaris.rb,
lib/chef/provider/package/windows.rb,
lib/chef/provider/remote_file/ftp.rb,
lib/chef/provider/resource_update.rb,
lib/chef/provider/service/aixinit.rb,
lib/chef/provider/service/freebsd.rb,
lib/chef/provider/service/insserv.rb,
lib/chef/provider/service/openbsd.rb,
lib/chef/provider/service/solaris.rb,
lib/chef/provider/service/upstart.rb,
lib/chef/provider/template_finder.rb,
lib/chef/provider/package/homebrew.rb,
lib/chef/provider/package/macports.rb,
lib/chef/provider/package/rubygems.rb,
lib/chef/provider/remote_directory.rb,
lib/chef/provider/remote_file/http.rb,
lib/chef/provider/template/content.rb,
lib/chef/provider/powershell_script.rb,
lib/chef/provider/service/invokercd.rb,
lib/chef/provider/deploy/timestamped.rb,
lib/chef/provider/package/freebsd/pkg.rb,
lib/chef/provider/package/windows/msi.rb,
lib/chef/provider/remote_file/content.rb,
lib/chef/provider/remote_file/fetcher.rb,
lib/chef/provider/package/easy_install.rb,
lib/chef/provider/package/freebsd/base.rb,
lib/chef/provider/package/freebsd/port.rb,
lib/chef/provider/cookbook_file/content.rb,
lib/chef/provider/package/freebsd/pkgng.rb,
lib/chef/provider/remote_file/local_file.rb,
lib/chef/provider/whyrun_safe_ruby_block.rb,
lib/chef/provider/remote_file/cache_control_data.rb
Direct Known Subclasses
Breakpoint, Cron, Deploy, DscResource, DscScript, Env, ErlCall, Execute, File, Git, Group, HttpRequest, Ifconfig, LWRPBase, Link, Log::ChefLog, Mdadm, Mount, Ohai, Package, Reboot, RegistryKey, Route, RubyBlock, Service, Subversion, User
Defined Under Namespace
Classes: Batch, Breakpoint, CookbookFile, Cron, Deploy, Directory, DscResource, DscScript, Env, ErlCall, Execute, File, Git, Group, HttpRequest, Ifconfig, LWRPBase, Link, Log, Mdadm, Mount, Ohai, Package, PowershellScript, Reboot, RegistryKey, RemoteDirectory, RemoteFile, ResourceUpdate, Route, RubyBlock, Script, Service, Subversion, Template, TemplateFinder, User, WhyrunSafeRubyBlock, WindowsScript
Constant Summary
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
node_map, provides, provides?
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!
Constructor Details
#initialize(new_resource, run_context) ⇒ Provider
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/chef/provider.rb', line 54
def initialize(new_resource, run_context)
@new_resource = new_resource
@action = action
@current_resource = nil
@run_context = run_context
@converge_actions = nil
@recipe_name = nil
@cookbook_name = nil
end
|
Instance Attribute Details
#action ⇒ Object
– TODO: this should be a reader, and the action should be passed in the constructor; however, many/most subclasses override the constructor so changing the arity would be a breaking change. Change this at the next break, e.g., Chef 11.
52
53
54
|
# File 'lib/chef/provider.rb', line 52
def action
@action
end
|
#cookbook_name ⇒ Object
Returns the value of attribute cookbook_name.
45
46
47
|
# File 'lib/chef/provider.rb', line 45
def cookbook_name
@cookbook_name
end
|
#current_resource ⇒ Object
Returns the value of attribute current_resource.
41
42
43
|
# File 'lib/chef/provider.rb', line 41
def current_resource
@current_resource
end
|
#new_resource ⇒ Object
Returns the value of attribute new_resource.
40
41
42
|
# File 'lib/chef/provider.rb', line 40
def new_resource
@new_resource
end
|
#recipe_name ⇒ Object
Returns the value of attribute recipe_name.
44
45
46
|
# File 'lib/chef/provider.rb', line 44
def recipe_name
@recipe_name
end
|
#run_context ⇒ Object
Returns the value of attribute run_context.
42
43
44
|
# File 'lib/chef/provider.rb', line 42
def run_context
@run_context
end
|
Class Method Details
.supports?(resource, action) ⇒ Boolean
supports the given resource and action (late binding)
36
37
38
|
# File 'lib/chef/provider.rb', line 36
def self.supports?(resource, action)
true
end
|
Instance Method Details
#action_nothing ⇒ Object
96
97
98
99
|
# File 'lib/chef/provider.rb', line 96
def action_nothing
Chef::Log.debug("Doing nothing for #{@new_resource.to_s}")
true
end
|
#cleanup_after_converge ⇒ Object
93
94
|
# File 'lib/chef/provider.rb', line 93
def cleanup_after_converge
end
|
#converge_by(descriptions, &block) ⇒ Object
164
165
166
|
# File 'lib/chef/provider.rb', line 164
def converge_by(descriptions, &block)
converge_actions.add_action(descriptions, &block)
end
|
#define_resource_requirements ⇒ Object
90
91
|
# File 'lib/chef/provider.rb', line 90
def define_resource_requirements
end
|
#events ⇒ Object
101
102
103
|
# File 'lib/chef/provider.rb', line 101
def events
run_context.events
end
|
#load_current_resource ⇒ Object
86
87
88
|
# File 'lib/chef/provider.rb', line 86
def load_current_resource
raise Chef::Exceptions::Override, "You must override load_current_resource in #{self.to_s}"
end
|
#node ⇒ Object
73
74
75
|
# File 'lib/chef/provider.rb', line 73
def node
run_context && run_context.node
end
|
#process_resource_requirements ⇒ Object
142
143
144
145
|
# File 'lib/chef/provider.rb', line 142
def process_resource_requirements
requirements.run(:all_actions) unless @action == :nothing
requirements.run(@action)
end
|
#requirements ⇒ Object
160
161
162
|
# File 'lib/chef/provider.rb', line 160
def requirements
@requirements ||= ResourceRequirements.new(@new_resource, run_context)
end
|
#resource_collection ⇒ Object
Used by providers supporting embedded recipes
78
79
80
|
# File 'lib/chef/provider.rb', line 78
def resource_collection
run_context && run_context.resource_collection
end
|
#resource_updated? ⇒ Boolean
147
148
149
|
# File 'lib/chef/provider.rb', line 147
def resource_updated?
!converge_actions.empty? || @new_resource.updated_by_last_action?
end
|
#run_action(action = nil) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# File 'lib/chef/provider.rb', line 105
def run_action(action=nil)
@action = action unless action.nil?
if !whyrun_mode? || whyrun_supported?
load_current_resource
events.resource_current_state_loaded(@new_resource, @action, @current_resource)
elsif whyrun_mode? && !whyrun_supported?
events.resource_current_state_load_bypassed(@new_resource, @action, @current_resource)
end
define_resource_requirements
process_resource_requirements
if whyrun_supported? && !requirements.action_blocked?(@action)
send("action_#{@action}")
elsif whyrun_mode?
events.resource_bypassed(@new_resource, @action, self)
else
send("action_#{@action}")
end
set_updated_status
cleanup_after_converge
end
|
#set_updated_status ⇒ Object
151
152
153
154
155
156
157
158
|
# File 'lib/chef/provider.rb', line 151
def set_updated_status
if !resource_updated?
events.resource_up_to_date(@new_resource, @action)
else
events.resource_updated(@new_resource, @action)
new_resource.updated_by_last_action(true)
end
end
|
#whyrun_mode? ⇒ Boolean
65
66
67
|
# File 'lib/chef/provider.rb', line 65
def whyrun_mode?
Chef::Config[:why_run]
end
|
#whyrun_supported? ⇒ Boolean
69
70
71
|
# File 'lib/chef/provider.rb', line 69
def whyrun_supported?
false
end
|