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



37
38
39
# File 'lib/puppet/resource_api/simple_provider.rb', line 37

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

#delete(_context, _name) ⇒ Object



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

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

#set(context, changes) ⇒ Object



8
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
# File 'lib/puppet/resource_api/simple_provider.rb', line 8

def set(context, changes)
  changes.each do |name, change|
    is = if context.feature_support?('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

    should = change[:should]

    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



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

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