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



52
53
54
# File 'lib/puppet/resource_api/simple_provider.rb', line 52

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

#delete(_context, _name) ⇒ Object



60
61
62
# File 'lib/puppet/resource_api/simple_provider.rb', line 60

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
40
41
42
43
44
45
46
47
48
49
50
# 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?

    name_hash = if context.type.namevars.length > 1
                  # pass a name_hash containing the values of all namevars
                  name_hash = { title: name }
                  context.type.namevars.each do |namevar|
                    name_hash[namevar] = change[:should][namevar]
                  end
                  name_hash
                else
                  name
                end

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

#update(_context, _name, _should) ⇒ Object



56
57
58
# File 'lib/puppet/resource_api/simple_provider.rb', line 56

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