Class: Puppet::ResourceApi::SimpleProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/resource_api/simple_provider.rb

Overview

This class provides a default implementation for set(), when your resource does not benefit from batching. Instead of processing changes yourself, the create, update, and delete functions, are called for you, with proper logging already set up. Note that your type needs to use name as its namevar, and ensure in the conventional way to signal presence and absence of resources.

Instance Method Summary collapse

Instance Method Details

#create(_context, _name, _should) ⇒ Object



41
42
43
# File 'lib/puppet/resource_api/simple_provider.rb', line 41

def create(_context, _name, _should)
  raise "#{self.class} has not implemented `create`"
end

#delete(_context, _name) ⇒ Object



49
50
51
# File 'lib/puppet/resource_api/simple_provider.rb', line 49

def delete(_context, _name)
  raise "#{self.class} has not implemented `delete`"
end

#set(context, changes) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/puppet/resource_api/simple_provider.rb', line 9

def set(context, changes)
  changes.each do |name, change|
    is = if context.type.feature?('simple_get_filter')
           change.key?(:is) ? change[:is] : (get(context, [name]) || []).find { |r| r[:name] == name }
         else
           change.key?(:is) ? change[:is] : (get(context) || []).find { |r| r[:name] == name }
         end
    context.type.check_schema(is) unless change.key?(:is)

    should = change[:should]

    raise 'SimpleProvider cannot be used with a Type that is not ensurable' unless context.type.ensurable?

    is = { name: name, ensure: 'absent' } if is.nil?
    should = { name: name, ensure: 'absent' } if should.nil?

    if is[:ensure].to_s == 'absent' && should[:ensure].to_s == 'present'
      context.creating(name) do
        create(context, name, should)
      end
    elsif is[:ensure].to_s == 'present' && should[:ensure].to_s == 'present'
      context.updating(name) do
        update(context, name, should)
      end
    elsif is[:ensure].to_s == 'present' && should[:ensure].to_s == 'absent'
      context.deleting(name) do
        delete(context, name)
      end
    end
  end
end

#update(_context, _name, _should) ⇒ Object



45
46
47
# File 'lib/puppet/resource_api/simple_provider.rb', line 45

def update(_context, _name, _should)
  raise "#{self.class} has not implemented `update`"
end