31: def perform_changes(resource)
32: current = resource.retrieve_resource
33:
34: cache resource, :checked, Time.now
35:
36: return [] if ! allow_changes?(resource)
37:
38: current_values = current.to_hash
39: historical_values = Puppet::Util::Storage.cache(resource).dup
40: desired_values = {}
41: resource.properties.each do |property|
42: desired_values[property.name] = property.should
43: end
44: audited_params = (resource[:audit] || []).map { |p| p.to_sym }
45: synced_params = []
46:
47:
48: audited_params.each do |param|
49: cache(resource, param, current_values[param])
50: end
51:
52:
53: events = []
54: ensure_param = resource.parameter(:ensure)
55: if desired_values[:ensure] && !ensure_param.safe_insync?(current_values[:ensure])
56: events << apply_parameter(ensure_param, current_values[:ensure], audited_params.include?(:ensure), historical_values[:ensure])
57: synced_params << :ensure
58: elsif current_values[:ensure] != :absent
59: work_order = resource.properties
60: work_order.each do |param|
61: if desired_values[param.name] && !param.safe_insync?(current_values[param.name])
62: events << apply_parameter(param, current_values[param.name], audited_params.include?(param.name), historical_values[param.name])
63: synced_params << param.name
64: end
65: end
66: end
67:
68:
69: audited_params.each do |param_name|
70: if historical_values.include?(param_name)
71: if historical_values[param_name] != current_values[param_name] && !synced_params.include?(param_name)
72: event = create_change_event(resource.parameter(param_name), current_values[param_name], true, historical_values[param_name])
73: event.send_log
74: events << event
75: end
76: else
77: resource.property(param_name).notice "audit change: newly-recorded value #{current_values[param_name]}"
78: end
79: end
80:
81: events
82: end