Class: Chef::Provider

Inherits:
Object show all
Includes:
DSL::Recipe, 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/group.rb,
lib/chef/provider/mdadm.rb,
lib/chef/provider/mount.rb,
lib/chef/provider/deploy.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/erl_call.rb,
lib/chef/provider/group/pw.rb,
lib/chef/provider/ifconfig.rb,
lib/chef/provider/template.rb,
lib/chef/provider/directory.rb,
lib/chef/provider/group/aix.rb,
lib/chef/provider/lwrp_base.rb,
lib/chef/provider/user/dscl.rb,
lib/chef/provider/breakpoint.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/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/cron/solaris.rb,
lib/chef/provider/http_request.rb,
lib/chef/provider/package/dpkg.rb,
lib/chef/provider/registry_key.rb,
lib/chef/provider/service/init.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/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/deploy/revision.rb,
lib/chef/provider/package/freebsd.rb,
lib/chef/provider/package/portage.rb,
lib/chef/provider/package/smartos.rb,
lib/chef/provider/package/solaris.rb,
lib/chef/provider/resource_update.rb,
lib/chef/provider/service/freebsd.rb,
lib/chef/provider/service/insserv.rb,
lib/chef/provider/service/solaris.rb,
lib/chef/provider/service/upstart.rb,
lib/chef/provider/template_finder.rb,
lib/chef/provider/package/macports.rb,
lib/chef/provider/package/rubygems.rb,
lib/chef/provider/remote_directory.rb,
lib/chef/provider/service/invokercd.rb,
lib/chef/provider/deploy/timestamped.rb,
lib/chef/provider/package/easy_install.rb

Defined Under Namespace

Classes: Breakpoint, CookbookFile, Cron, Deploy, Directory, Env, ErlCall, Execute, File, Git, Group, HttpRequest, Ifconfig, LWRPBase, Link, Log, Mdadm, Mount, Ohai, Package, RegistryKey, RemoteDirectory, RemoteFile, ResourceUpdate, Route, RubyBlock, Script, Service, Subversion, Template, TemplateFinder, User

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from DSL::Recipe

#method_missing

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename

Constructor Details

#initialize(new_resource, run_context) ⇒ Provider

Returns a new instance of Provider.



41
42
43
44
45
46
47
# File 'lib/chef/provider.rb', line 41

def initialize(new_resource, run_context)
  @new_resource = new_resource
  @action = action
  @current_resource = nil
  @run_context = run_context
  @converge_actions = nil
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Chef::DSL::Recipe

Instance Attribute Details

#actionObject

– 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.



39
40
41
# File 'lib/chef/provider.rb', line 39

def action
  @action
end

#current_resourceObject

Returns the value of attribute current_resource.



31
32
33
# File 'lib/chef/provider.rb', line 31

def current_resource
  @current_resource
end

#new_resourceObject

Returns the value of attribute new_resource.



30
31
32
# File 'lib/chef/provider.rb', line 30

def new_resource
  @new_resource
end

#run_contextObject

Returns the value of attribute run_context.



32
33
34
# File 'lib/chef/provider.rb', line 32

def run_context
  @run_context
end

Instance Method Details

#action_nothingObject



80
81
82
83
# File 'lib/chef/provider.rb', line 80

def action_nothing
  Chef::Log.debug("Doing nothing for #{@new_resource.to_s}")
  true
end

#cleanup_after_convergeObject



77
78
# File 'lib/chef/provider.rb', line 77

def cleanup_after_converge
end

#cookbook_nameObject



66
67
68
# File 'lib/chef/provider.rb', line 66

def cookbook_name
  new_resource.cookbook_name
end

#define_resource_requirementsObject



74
75
# File 'lib/chef/provider.rb', line 74

def define_resource_requirements
end

#eventsObject



85
86
87
# File 'lib/chef/provider.rb', line 85

def events
  run_context.events
end

#load_current_resourceObject



70
71
72
# File 'lib/chef/provider.rb', line 70

def load_current_resource
  raise Chef::Exceptions::Override, "You must override load_current_resource in #{self.to_s}"
end

#nodeObject



57
58
59
# File 'lib/chef/provider.rb', line 57

def node
  run_context && run_context.node
end

#process_resource_requirementsObject



126
127
128
129
# File 'lib/chef/provider.rb', line 126

def process_resource_requirements
  requirements.run(:all_actions) unless @action == :nothing
  requirements.run(@action)
end

#requirementsObject



140
141
142
# File 'lib/chef/provider.rb', line 140

def requirements
  @requirements ||= ResourceRequirements.new(@new_resource, run_context)
end

#resource_collectionObject

Used by providers supporting embedded recipes



62
63
64
# File 'lib/chef/provider.rb', line 62

def resource_collection
  run_context && run_context.resource_collection
end

#run_action(action = nil) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/chef/provider.rb', line 89

def run_action(action=nil)
  @action = action unless action.nil?

  # TODO: it would be preferable to get the action to be executed in the
  # constructor...

  # user-defined LWRPs may include unsafe load_current_resource methods that cannot be run in whyrun mode
  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

  # user-defined providers including LWRPs may 
  # not include whyrun support - if they don't support it
  # we can't execute any actions while we're running in
  # whyrun mode. Instead we 'fake' whyrun by documenting that
  # we can't execute the action.
  # in non-whyrun mode, this will still cause the action to be
  # executed normally.
  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_statusObject



131
132
133
134
135
136
137
138
# File 'lib/chef/provider.rb', line 131

def set_updated_status
  if converge_actions.empty? && !@new_resource.updated_by_last_action?
    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

Returns:

  • (Boolean)


49
50
51
# File 'lib/chef/provider.rb', line 49

def whyrun_mode?
  Chef::Config[:why_run]
end

#whyrun_supported?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/chef/provider.rb', line 53

def whyrun_supported?
  false
end