# define: nginx::resource::upstream # # This definition creates a new upstream proxy entry for NGINX # # Parameters: # [*members*] - Array of member URIs for NGINX to connect to. Must follow valid NGINX syntax. # If omitted, individual members should be defined with nginx::resource::upstream::member # [*ensure*] - Enables or disables the specified location (present|absent) # [*upstream_cfg_prepend*] - It expects a hash with custom directives to put before anything else inside upstream # [*upstream_fail_timeout*] - Set the fail_timeout for the upstream. Default is 10 seconds - As that is what Nginx does normally. # [*upstream_max_fails*] - Set the max_fails for the upstream. Default is to use nginx default value which is 1. # # Actions: # # Requires: # # Sample Usage: # nginx::resource::upstream { 'proxypass': # ensure => present, # members => [ # 'localhost:3000', # 'localhost:3001', # 'localhost:3002', # ], # } # # Custom config example to use ip_hash, and 20 keepalive connections # create a hash with any extra custom config you want. # $my_config = { # 'ip_hash' => '', # 'keepalive' => '20', # } # nginx::resource::upstream { 'proxypass': # ensure => present, # members => [ # 'localhost:3000', # 'localhost:3001', # 'localhost:3002', # ], # upstream_cfg_prepend => $my_config, # } define nginx::resource::upstream ( $members = undef, $ensure = 'present', $upstream_cfg_prepend = undef, $upstream_fail_timeout = '10s', $upstream_max_fails = undef, $upstream_context = 'http', ) { if $members != undef { validate_array($members) } validate_re($ensure, '^(present|absent)$', "${ensure} is not supported for ensure. Allowed values are 'present' and 'absent'.") validate_re($upstream_context, '^(http|stream)$', "${upstream_context} is not supported for upstream_context. Allowed values are 'http' and 'stream'.") if ($upstream_cfg_prepend != undef) { validate_hash($upstream_cfg_prepend) } $root_group = $::nginx::config::root_group $ensure_real = $ensure ? { 'absent' => absent, default => present, } $conf_dir_real = $upstream_context ? { 'stream' => 'conf.stream.d', default => 'conf.d', } Concat { owner => 'root', group => $root_group, mode => '0644', } concat { "${::nginx::config::conf_dir}/${conf_dir_real}/${name}-upstream.conf": ensure => $ensure_real, notify => Class['::nginx::service'], } # Uses: $name, $upstream_cfg_prepend concat::fragment { "${name}_upstream_header": target => "${::nginx::config::conf_dir}/${conf_dir_real}/${name}-upstream.conf", order => '10', content => template('nginx/conf.d/upstream_header.erb'), } if $members != undef { # Uses: $members, $upstream_fail_timeout concat::fragment { "${name}_upstream_members": target => "${::nginx::config::conf_dir}/${conf_dir_real}/${name}-upstream.conf", order => '50', content => template('nginx/conf.d/upstream_members.erb'), } } else { class { 'nginx::resource::upstream::collect': # Collect exported members upstream_name => $name, } } concat::fragment { "${name}_upstream_footer": target => "${::nginx::config::conf_dir}/${conf_dir_real}/${name}-upstream.conf", order => '90', content => "}\n", } }