Puppet Function: ensure_resource

Defined in:
vendor_modules/stdlib/lib/puppet/parser/functions/ensure_resource.rb
Function type:
Ruby 3.x API

Summary

Takes a resource type, title, and a list of attributes that describe a resource.

Overview

ensure_resource()Any

user { 'dan':

ensure => present,

}

Examples:

Example usage


Creates the resource if it does not already exist:

  ensure_resource('user', 'dan', {'ensure' => 'present' })

If the resource already exists but does not match the specified parameters,
this function will attempt to recreate the resource leading to a duplicate
resource definition error.

An array of resources can also be passed in and each will be created with
the type and parameters specified if it doesn't already exist.

  ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})

Returns:

  • (Any)

    created or recreated the passed resource with the passed type and attributes



6
7
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'vendor_modules/stdlib/lib/puppet/parser/functions/ensure_resource.rb', line 6

Puppet::Parser::Functions.newfunction(:ensure_resource, type: :statement, doc: <<-DOC
  @summary
    Takes a resource type, title, and a list of attributes that describe a
    resource.

  user { 'dan':
    ensure => present,
  }

  @return
    created or recreated the passed resource with the passed type and attributes

  @example Example usage

    Creates the resource if it does not already exist:

      ensure_resource('user', 'dan', {'ensure' => 'present' })

    If the resource already exists but does not match the specified parameters,
    this function will attempt to recreate the resource leading to a duplicate
    resource definition error.

    An array of resources can also be passed in and each will be created with
    the type and parameters specified if it doesn't already exist.

      ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})

DOC
) do |vals|
  type, title, params = vals
  raise(ArgumentError, 'Must specify a type') unless type
  raise(ArgumentError, 'Must specify a title') unless title
  params ||= {}

  items = [title].flatten

  items.each do |item|
    Puppet::Parser::Functions.function(:defined_with_params)
    if function_defined_with_params(["#{type}[#{item}]", params])
      Puppet.debug("Resource #{type}[#{item}] with params #{params} not created because it already exists")
    else
      Puppet.debug("Create new resource #{type}[#{item}] with params #{params}")
      Puppet::Parser::Functions.function(:create_resources)
      function_create_resources([type.capitalize, { item => params }])
    end
  end
end