Puppet Function: cfweb::limits_merge

Defined in:
lib/puppet/functions/cfweb/limits_merge.rb
Function type:
Ruby 4.x API

Overview

cfweb::limits_merge(String[1] $site)Any

Parameters:

  • site (String[1])

Returns:

  • (Any)


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
53
# File 'lib/puppet/functions/cfweb/limits_merge.rb', line 6

Puppet::Functions.create_function(:'cfweb::limits_merge') do
    dispatch :limits_merge do
        param 'String[1]', :site
    end
    
    def limits_merge(site)
        limits = closure_scope["cfweb::nginx::limits"]
        overrides = closure_scope.findresource("Cfweb::Site[#{site}]")['limits']
        
        res = limits.clone

        res.each do |n, v|
            res[n] = v.merge(overrides.fetch(n, {}))
        end
        
        overrides.each do |n, v|
            if res[n].nil?
                res[n] = v.clone
            end
        end
        
        res.each do |n, info|
            newname = info.fetch('newname', n)
            lim_type = info['type'].to_s
            
            if info['disabled']
                expr = ''
            elsif lim_type == 'req'
                expr = "limit_req zone=#{newname}"
            
                burst = info['burst']
                expr += " burst=#{burst}" if burst
                
                expr += " nodelay" if info['nodelay']

                expr += ';'
            elsif lim_type == 'conn'
                expr = "limit_conn #{newname} #{info['count']};"
            else
                fail("Unknown limit type '#{lim_type}': #{n}=>#{info}")
            end
            
            info['expr'] = expr
        end
        
        return res
    end
end