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