Merge pull request #453 from jfryman/add-puppet-module-tool

Introducing Puppet Module Data
This commit is contained in:
James Fryman 2014-09-24 15:07:28 -07:00
commit b8e2ccc540
34 changed files with 486 additions and 441 deletions

View file

@ -5,3 +5,4 @@ fixtures:
apt: "puppetlabs/apt"
concat: "puppetlabs/concat"
stdlib: "puppetlabs/stdlib"
module_data: "ripienaar/module_data"

3
.gitignore vendored
View file

@ -3,4 +3,5 @@ files/server_test.pem
pkg/
pkg/
Gemfile.lock
spec/fixtures/
spec/fixtures/modules
spec/fixtures/manifests

View file

@ -1,7 +1,13 @@
# NGINX Module
## INSTALLING OR UPGRADING
** Please note **: This module is currently undergoing some structural
maintenance. Please take a look at [https://github.com/jfryman/puppet-nginx/blob/master/docs/hiera.md](https://github.com/jfryman/puppet-nginx/blob/master/docs/hiera.md)
before upgrading or installing Version 0.1.0 or greater.
[![Build Status](https://travis-ci.org/jfryman/puppet-nginx.png)](https://travis-ci.org/jfryman/puppet-nginx)
* James Fryman <james@frymanet.com>
* Matthew Haughton <matt@3flex.com.au>

77
data/common.yaml Normal file
View file

@ -0,0 +1,77 @@
---
nginx::config::temp_dir: /tmp
nginx::config::run_dir: /var/nginx
nginx::config::conf_template: nginx/conf.d/nginx.conf.erb
nginx::config::proxy_conf_template: nginx/conf.d/proxy.conf.erb
nginx::config::confd_purge: false
nginx::config::vhost_purge: false
nginx::config::worker_processes: 1
nginx::config::worker_connections: 1024
nginx::config::worker_rlimit_nofile: 1024
nginx::config::types_hash_max_size: 1024
nginx::config::types_hash_bucket_size: 512
nginx::config::names_hash_bucket_size: 64
nginx::config::names_hash_max_size: 512
nginx::config::multi_accept: 'off'
nginx::config::events_use: false
nginx::config::sendfile: 'on'
nginx::config::keepalive_timeout: 65
nginx::config::http_tcp_nodelay: 'on'
nginx::config::http_tcp_nopush: 'off'
nginx::config::gzip: 'on'
nginx::config::server_tokens: 'on'
nginx::config::spdy: 'off'
nginx::config::ssl_stapling: 'off'
nginx::config::proxy_redirect: 'off'
nginx::config::proxy_set_header:
- 'Host $host'
- 'X-Real-IP $remote_addr'
- 'X-Forwarded-For $proxy_add_x_forwarded_for'
nginx::config::proxy_cache_path: false
nginx::config::proxy_cache_levels: '1'
nginx::config::proxy_cache_keys_zone: 'd2:100m'
nginx::config::proxy_cache_max_size: 500m
nginx::config::proxy_cache_inactive: 20m
nginx::config::fastcgi_cache_path: false
nginx::config::fastcgi_cache_levels: '1'
nginx::config::fastcgi_cache_keys_zone: 'd3:100m'
nginx::config::fastcgi_cache_max_size: 500m
nginx::config::fastcgi_cache_inactive: 20m
nginx::config::fastcgi_cache_key: false
nginx::config::fastcgi_cache_use_stale: false
nginx::config::client_body_temp_path: /var/nginx/client_body_temp
nginx::config::client_body_buffer_size: 128k
nginx::config::client_max_body_size: 10m
nginx::config::proxy_temp_path: /var/nginx/proxy_temp
nginx::config::proxy_connect_timeout: '90'
nginx::config::proxy_send_timeout: '90'
nginx::config::proxy_read_timeout: '90'
nginx::config::proxy_buffers: '32 4k'
nginx::config::proxy_http_version: '1.0'
nginx::config::proxy_buffer_size: 8k
nginx::config::proxy_headers_hash_bucket_size: '64'
nginx::config::logdir: /var/log/nginx
nginx::config::mail: false
nginx::config::http_cfg_append: false
nginx::config::nginx_error_log: /var/log/nginx/error.log
nginx::config::http_access_log: /var/log/nginx/access.log
nginx::config::root_group: root
# Specific owner for sites-available directory
nginx::config::sites_available_owner: root
nginx::config::sites_available_group: root
nginx::config::sites_available_mode: '0644'
# Owner for all other files
nginx::config::global_owner: root
nginx::config::global_group: root
nginx::config::global_mode: '0644'
nginx::config::pid: /var/run/nginx.pid
nginx::config::conf_dir: /etc/nginx
nginx::config::super_user: true
nginx::config::daemon_user: nginx

6
data/hiera.yaml Normal file
View file

@ -0,0 +1,6 @@
---
:hierarchy:
- operatingsystem/%{::operatingsystem}/%{::operatingsystemmajrelease}
- operatingsystem/%{::operatingsystem}
- osfamily/%{::osfamily}
- common

View file

@ -0,0 +1,3 @@
---
nginx::config::conf_dir: /opt/local/etc/nginx
nginx::config::daemon_user: www

View file

@ -0,0 +1,3 @@
---
nginx::config::pid: false
nginx::config::daemon_user: http

View file

@ -0,0 +1,2 @@
---
nginx::config::daemon_user: www-data

View file

@ -0,0 +1,4 @@
---
nginx::config::conf_dir: /usr/local/etc/nginx
nginx::config::daemon_user: www
nginx::config::root_group: wheel

View file

@ -0,0 +1,2 @@
---
nginx::config::daemon_user: webservd

50
docs/hiera.md Normal file
View file

@ -0,0 +1,50 @@
# Usage of Hiera
This module takes advantage of the `puppet-module-data` pattern as introduced
by R.I. Pinnear to allow for a significant amount of flexibility with base
configuration of the module. This is to reduce the amount of clutter starting
to gather in `params.pp`, and provide a foundation for future enhancements.
## Upgrading
If you happen to be here because of some silly deprecation notice, it is
probably because a manifest is declaring attributes for the Nginx Class.
Upgrading should be easy!
* Step 1: Make sure you have Hiera configured. https://docs.puppetlabs.com/hiera/1/puppet.html#puppet-3-and-newer
* Step 2: Move any declared parameters to hiera.
* Step 3: Profit!
For example:
```
class { 'nginx':
logdir => '/data/nginx/logs',
}
```
should become in your hiera configs:
```
nginx::config::logdir: /data/nginx/logs
```
Please note: This module takes advantage of Puppet 3 data module bindings.
Be aware of any gotchas that accompany this. Take a look at https://docs.puppetlabs.com/hiera/1/puppet.html#limitations
## I cannot/do not use Hiera! NOW WHAT!
Do not fret! This is a big change to the core module, and it may be difficult
to make the conversion right away. First off, we intend to make it blatantly
clear when the module will tear out the parameters in Class[nginx] as
detailed in the deprecation notice. (The current target is v1.0)
In the event that you are unable to leverage Hiera for your attribute configuration, you can use the Spaceship Operator to set the parameters for the nginx::config class. For example:
```ruby
Class<| title == 'nginx::class' |> {
proxy_cache_levels => '2',
}
```
The recommended path is to use Hiera, but this pattern should give you an intermediate step during the upgrade process.

View file

@ -14,70 +14,137 @@
#
# This class file is not called directly
class nginx::config(
$client_body_buffer_size = $nginx::params::nx_client_body_buffer_size,
$client_body_temp_path = $nginx::params::nx_client_body_temp_path,
$client_max_body_size = $nginx::params::nx_client_max_body_size,
$confd_purge = $nginx::params::nx_confd_purge,
$conf_dir = $nginx::params::nx_conf_dir,
$conf_template = $nginx::params::nx_conf_template,
$daemon_user = $nginx::params::nx_daemon_user,
$events_use = $nginx::params::nx_events_use,
$fastcgi_cache_inactive = $nginx::params::nx_fastcgi_cache_inactive,
$fastcgi_cache_key = $nginx::params::nx_fastcgi_cache_key,
$fastcgi_cache_keys_zone = $nginx::params::nx_fastcgi_cache_keys_zone,
$fastcgi_cache_levels = $nginx::params::nx_fastcgi_cache_levels,
$fastcgi_cache_max_size = $nginx::params::nx_fastcgi_cache_max_size,
$fastcgi_cache_path = $nginx::params::nx_fastcgi_cache_path,
$fastcgi_cache_use_stale = $nginx::params::nx_fastcgi_cache_use_stale,
$gzip = $nginx::params::nx_gzip,
$http_access_log = $nginx::params::nx_http_access_log,
$http_cfg_append = $nginx::params::nx_http_cfg_append,
$http_tcp_nodelay = $nginx::params::nx_http_tcp_nodelay,
$http_tcp_nopush = $nginx::params::nx_http_tcp_nopush,
$keepalive_timeout = $nginx::params::nx_keepalive_timeout,
$logdir = $nginx::params::nx_logdir,
$mail = $nginx::params::nx_mail,
$multi_accept = $nginx::params::nx_multi_accept,
$names_hash_bucket_size = $nginx::params::nx_names_hash_bucket_size,
$names_hash_max_size = $nginx::params::nx_names_hash_max_size,
$nginx_error_log = $nginx::params::nx_nginx_error_log,
$pid = $nginx::params::nx_pid,
$proxy_buffers = $nginx::params::nx_proxy_buffers,
$proxy_buffer_size = $nginx::params::nx_proxy_buffer_size,
$proxy_cache_inactive = $nginx::params::nx_proxy_cache_inactive,
$proxy_cache_keys_zone = $nginx::params::nx_proxy_cache_keys_zone,
$proxy_cache_levels = $nginx::params::nx_proxy_cache_levels,
$proxy_cache_max_size = $nginx::params::nx_proxy_cache_max_size,
$proxy_cache_path = $nginx::params::nx_proxy_cache_path,
$proxy_conf_template = $nginx::params::nx_proxy_conf_template,
$proxy_connect_timeout = $nginx::params::nx_proxy_connect_timeout,
$proxy_headers_hash_bucket_size = $nginx::params::nx_proxy_headers_hash_bucket_size,
$proxy_http_version = $nginx::params::nx_proxy_http_version,
$proxy_read_timeout = $nginx::params::nx_proxy_read_timeout,
$proxy_redirect = $nginx::params::nx_proxy_redirect,
$proxy_send_timeout = $nginx::params::nx_proxy_send_timeout,
$proxy_set_header = $nginx::params::nx_proxy_set_header,
$proxy_temp_path = $nginx::params::nx_proxy_temp_path,
$run_dir = $nginx::params::nx_run_dir,
$sendfile = $nginx::params::nx_sendfile,
$server_tokens = $nginx::params::nx_server_tokens,
$spdy = $nginx::params::nx_spdy,
$super_user = $nginx::params::nx_super_user,
$temp_dir = $nginx::params::nx_temp_dir,
$types_hash_bucket_size = $nginx::params::nx_types_hash_bucket_size,
$types_hash_max_size = $nginx::params::nx_types_hash_max_size,
$vhost_purge = $nginx::params::nx_vhost_purge,
$worker_connections = $nginx::params::nx_worker_connections,
$worker_processes = $nginx::params::nx_worker_processes,
$worker_rlimit_nofile = $nginx::params::nx_worker_rlimit_nofile,
$global_owner = $nginx::params::global_owner,
$global_group = $nginx::params::global_group,
$global_mode = $nginx::params::global_mode,
$sites_available_owner = $nginx::params::sites_available_owner,
$sites_available_group = $nginx::params::sites_available_group,
$sites_available_mode = $nginx::params::sites_available_mode,
) inherits nginx::params {
$client_body_buffer_size = undef,
$client_body_temp_path = undef,
$client_max_body_size = undef,
$confd_purge = undef,
$conf_dir = undef,
$conf_template = undef,
$daemon_user = undef,
$events_use = undef,
$fastcgi_cache_inactive = undef,
$fastcgi_cache_key = undef,
$fastcgi_cache_keys_zone = undef,
$fastcgi_cache_levels = undef,
$fastcgi_cache_max_size = undef,
$fastcgi_cache_path = undef,
$fastcgi_cache_use_stale = undef,
$gzip = undef,
$http_access_log = undef,
$http_cfg_append = undef,
$http_tcp_nodelay = undef,
$http_tcp_nopush = undef,
$keepalive_timeout = undef,
$logdir = undef,
$mail = undef,
$multi_accept = undef,
$names_hash_bucket_size = undef,
$names_hash_max_size = undef,
$nginx_error_log = undef,
$pid = undef,
$proxy_buffers = undef,
$proxy_buffer_size = undef,
$proxy_cache_inactive = undef,
$proxy_cache_keys_zone = undef,
$proxy_cache_levels = undef,
$proxy_cache_max_size = undef,
$proxy_cache_path = undef,
$proxy_conf_template = undef,
$proxy_connect_timeout = undef,
$proxy_headers_hash_bucket_size = undef,
$proxy_http_version = undef,
$proxy_read_timeout = undef,
$proxy_redirect = undef,
$proxy_send_timeout = undef,
$proxy_set_header = undef,
$proxy_temp_path = undef,
$root_group = undef,
$run_dir = undef,
$sendfile = undef,
$server_tokens = undef,
$spdy = undef,
$super_user = undef,
$temp_dir = undef,
$types_hash_bucket_size = undef,
$types_hash_max_size = undef,
$vhost_purge = undef,
$worker_connections = undef,
$worker_processes = undef,
$worker_rlimit_nofile = undef,
$global_owner = undef,
$global_group = undef,
$global_mode = undef,
$sites_available_owner = undef,
$sites_available_group = undef,
$sites_available_mode = undef,
) {
### Validations ###
if (!is_string($worker_processes)) and (!is_integer($worker_processes)) {
fail('$worker_processes must be an integer or have value "auto".')
}
if (!is_integer($worker_connections)) {
fail('$worker_connections must be an integer.')
}
if (!is_integer($worker_rlimit_nofile)) {
fail('$worker_rlimit_nofile must be an integer.')
}
if (!is_string($events_use)) and ($events_use != false) {
fail('$events_use must be a string or false.')
}
validate_string($multi_accept)
validate_array($proxy_set_header)
validate_string($proxy_http_version)
validate_bool($confd_purge)
validate_bool($vhost_purge)
if ($proxy_cache_path != false) {
validate_string($proxy_cache_path)
}
validate_re($proxy_cache_levels, '^[12](:[12])*$')
validate_string($proxy_cache_keys_zone)
validate_string($proxy_cache_max_size)
validate_string($proxy_cache_inactive)
if ($fastcgi_cache_path != false) {
validate_string($fastcgi_cache_path)
}
validate_re($fastcgi_cache_levels, '^[12](:[12])*$')
validate_string($fastcgi_cache_keys_zone)
validate_string($fastcgi_cache_max_size)
validate_string($fastcgi_cache_inactive)
if ($fastcgi_cache_key != false) {
validate_string($fastcgi_cache_key)
}
if ($fastcgi_cache_use_stale != false) {
validate_string($fastcgi_cache_use_stale)
}
validate_bool($mail)
validate_string($server_tokens)
validate_string($client_max_body_size)
if (!is_integer($names_hash_bucket_size)) {
fail('$names_hash_bucket_size must be an integer.')
}
if (!is_integer($names_hash_max_size)) {
fail('$names_hash_max_size must be an integer.')
}
validate_string($proxy_buffers)
validate_string($proxy_buffer_size)
if ($http_cfg_append != false) {
if !(is_hash($http_cfg_append) or is_array($http_cfg_append)) {
fail('$http_cfg_append must be either a hash or array')
}
}
validate_string($nginx_error_log)
validate_string($http_access_log)
validate_string($proxy_headers_hash_bucket_size)
validate_bool($super_user)
### END VALIDATIONS ###
### CONFIGURATION ###
File {
owner => $global_owner,
group => $global_group,

View file

@ -5,7 +5,7 @@
# Parameters:
#
# There are no default parameters for this class. All module parameters
# are managed via the nginx::params class
# are managed via puppet-module-data (see data/ dir)
#
# Actions:
#
@ -29,160 +29,166 @@
# include nginx
# }
class nginx (
$client_body_buffer_size = $nginx::params::nx_client_body_buffer_size,
$client_body_temp_path = $nginx::params::nx_client_body_temp_path,
$client_max_body_size = $nginx::params::nx_client_max_body_size,
$confd_purge = $nginx::params::nx_confd_purge,
$configtest_enable = $nginx::params::nx_configtest_enable,
$conf_dir = $nginx::params::nx_conf_dir,
$conf_template = $nginx::params::nx_conf_template,
$daemon_user = $nginx::params::nx_daemon_user,
$events_use = $nginx::params::nx_events_use,
$fastcgi_cache_inactive = $nginx::params::nx_fastcgi_cache_inactive,
$fastcgi_cache_key = $nginx::params::nx_fastcgi_cache_key,
$fastcgi_cache_keys_zone = $nginx::params::nx_fastcgi_cache_keys_zone,
$fastcgi_cache_levels = $nginx::params::nx_fastcgi_cache_levels,
$fastcgi_cache_max_size = $nginx::params::nx_fastcgi_cache_max_size,
$fastcgi_cache_path = $nginx::params::nx_fastcgi_cache_path,
$fastcgi_cache_use_stale = $nginx::params::nx_fastcgi_cache_use_stale,
$gzip = $nginx::params::nx_gzip,
$http_access_log = $nginx::params::nx_http_access_log,
$http_cfg_append = $nginx::params::nx_http_cfg_append,
$http_tcp_nodelay = $nginx::params::nx_http_tcp_nodelay,
$http_tcp_nopush = $nginx::params::nx_http_tcp_nopush,
$keepalive_timeout = $nginx::params::nx_keepalive_timeout,
$logdir = $nginx::params::nx_logdir,
$mail = $nginx::params::nx_mail,
$manage_repo = $nginx::params::manage_repo,
$multi_accept = $nginx::params::nx_multi_accept,
$names_hash_bucket_size = $nginx::params::nx_names_hash_bucket_size,
$names_hash_max_size = $nginx::params::nx_names_hash_max_size,
$nginx_error_log = $nginx::params::nx_nginx_error_log,
$client_body_buffer_size = undef,
$client_body_temp_path = undef,
$client_max_body_size = undef,
$confd_purge = undef,
$configtest_enable = undef,
$conf_dir = undef,
$conf_template = undef,
$daemon_user = undef,
$events_use = undef,
$fastcgi_cache_inactive = undef,
$fastcgi_cache_key = undef,
$fastcgi_cache_keys_zone = undef,
$fastcgi_cache_levels = undef,
$fastcgi_cache_max_size = undef,
$fastcgi_cache_path = undef,
$fastcgi_cache_use_stale = undef,
$gzip = undef,
$http_access_log = undef,
$http_cfg_append = undef,
$http_tcp_nodelay = undef,
$http_tcp_nopush = undef,
$keepalive_timeout = undef,
$logdir = undef,
$mail = undef,
$manage_repo = undef,
$multi_accept = undef,
$names_hash_bucket_size = undef,
$names_hash_max_size = undef,
$nginx_error_log = undef,
$nginx_locations = {},
$nginx_mailhosts = {},
$nginx_upstreams = {},
$nginx_vhosts = {},
$nginx_vhosts_defaults = {},
$package_ensure = $nginx::params::package_ensure,
$package_name = $nginx::params::package_name,
$package_source = $nginx::params::package_source,
$pid = $nginx::params::nx_pid,
$proxy_buffers = $nginx::params::nx_proxy_buffers,
$proxy_buffer_size = $nginx::params::nx_proxy_buffer_size,
$proxy_cache_inactive = $nginx::params::nx_proxy_cache_inactive,
$proxy_cache_keys_zone = $nginx::params::nx_proxy_cache_keys_zone,
$proxy_cache_levels = $nginx::params::nx_proxy_cache_levels,
$proxy_cache_max_size = $nginx::params::nx_proxy_cache_max_size,
$proxy_cache_path = $nginx::params::nx_proxy_cache_path,
$proxy_conf_template = $nginx::params::nx_proxy_conf_template,
$proxy_connect_timeout = $nginx::params::nx_proxy_connect_timeout,
$proxy_headers_hash_bucket_size = $nginx::params::nx_proxy_headers_hash_bucket_size,
$proxy_http_version = $nginx::params::nx_proxy_http_version,
$proxy_read_timeout = $nginx::params::nx_proxy_read_timeout,
$proxy_redirect = $nginx::params::nx_proxy_redirect,
$proxy_send_timeout = $nginx::params::nx_proxy_send_timeout,
$proxy_set_header = $nginx::params::nx_proxy_set_header,
$proxy_temp_path = $nginx::params::nx_proxy_temp_path,
$run_dir = $nginx::params::nx_run_dir,
$sendfile = $nginx::params::nx_sendfile,
$server_tokens = $nginx::params::nx_server_tokens,
$service_ensure = $nginx::params::nx_service_ensure,
$service_restart = $nginx::params::nx_service_restart,
$spdy = $nginx::params::nx_spdy,
$super_user = $nginx::params::nx_super_user,
$temp_dir = $nginx::params::nx_temp_dir,
$types_hash_bucket_size = $nginx::params::nx_types_hash_bucket_size,
$types_hash_max_size = $nginx::params::nx_types_hash_max_size,
$vhost_purge = $nginx::params::nx_vhost_purge,
$worker_connections = $nginx::params::nx_worker_connections,
$worker_processes = $nginx::params::nx_worker_processes,
$worker_rlimit_nofile = $nginx::params::nx_worker_rlimit_nofile,
$global_owner = $nginx::params::global_owner,
$global_group = $nginx::params::global_group,
$global_mode = $nginx::params::global_mode,
$sites_available_owner = $nginx::params::sites_available_owner,
$sites_available_group = $nginx::params::sites_available_group,
$sites_available_mode = $nginx::params::sites_available_mode,
$package_ensure = undef,
$package_name = undef,
$package_source = undef,
$pid = undef,
$proxy_buffers = undef,
$proxy_buffer_size = undef,
$proxy_cache_inactive = undef,
$proxy_cache_keys_zone = undef,
$proxy_cache_levels = undef,
$proxy_cache_max_size = undef,
$proxy_cache_path = undef,
$proxy_conf_template = undef,
$proxy_connect_timeout = undef,
$proxy_headers_hash_bucket_size = undef,
$proxy_http_version = undef,
$proxy_read_timeout = undef,
$proxy_redirect = undef,
$proxy_send_timeout = undef,
$proxy_set_header = undef,
$proxy_temp_path = undef,
$run_dir = undef,
$sendfile = undef,
$server_tokens = undef,
$service_ensure = undef,
$service_restart = undef,
$spdy = undef,
$super_user = undef,
$temp_dir = undef,
$types_hash_bucket_size = undef,
$types_hash_max_size = undef,
$vhost_purge = undef,
$worker_connections = undef,
$worker_processes = undef,
$worker_rlimit_nofile = undef,
$global_owner = undef,
$global_group = undef,
$global_mode = undef,
$sites_available_owner = undef,
$sites_available_group = undef,
$sites_available_mode = undef,
$geo_mappings = {},
$string_mappings = {},
) inherits nginx::params {
) {
include stdlib
### DEPRECATION WARNING ###
###
### During the transition from the params pattern -> puppet-module-data,
### we need a graceful way to notify the consumer that the pattern is
### changing, and point them toward docs on how to transition.
###
### Once we hit 1.0, this whole block goes away.
###
### Please note: as a contributor to this module, no Pulls will be accepted
### that do add additional parameters to this class. Get on this puppet-module-data
### level!
if (!is_string($worker_processes)) and (!is_integer($worker_processes)) {
fail('$worker_processes must be an integer or have value "auto".')
}
if (!is_integer($worker_connections)) {
fail('$worker_connections must be an integer.')
}
if (!is_integer($worker_rlimit_nofile)) {
fail('$worker_rlimit_nofile must be an integer.')
}
if (!is_string($events_use)) and ($events_use != false) {
fail('$events_use must be a string or false.')
}
validate_string($multi_accept)
validate_string($package_name)
validate_string($package_ensure)
validate_string($package_source)
validate_array($proxy_set_header)
validate_string($proxy_http_version)
validate_bool($confd_purge)
validate_bool($vhost_purge)
if ($proxy_cache_path != false) {
validate_string($proxy_cache_path)
}
validate_re($proxy_cache_levels, '^[12](:[12])*$')
validate_string($proxy_cache_keys_zone)
validate_string($proxy_cache_max_size)
validate_string($proxy_cache_inactive)
### This block makes me sad, but what can you do.... we need to do this
### migration the Right Way(tm) -- JDF
if ($fastcgi_cache_path != false) {
validate_string($fastcgi_cache_path)
}
validate_re($fastcgi_cache_levels, '^[12](:[12])*$')
validate_string($fastcgi_cache_keys_zone)
validate_string($fastcgi_cache_max_size)
validate_string($fastcgi_cache_inactive)
if ($fastcgi_cache_key != false) {
validate_string($fastcgi_cache_key)
}
if ($fastcgi_cache_use_stale != false) {
validate_string($fastcgi_cache_use_stale)
}
if $client_body_buffer_size or
$client_body_temp_path or
$client_max_body_size or
$confd_purge or
$conf_dir or
$conf_template or
$daemon_user or
$events_use or
$fastcgi_cache_inactive or
$fastcgi_cache_key or
$fastcgi_cache_keys_zone or
$fastcgi_cache_levels or
$fastcgi_cache_max_size or
$fastcgi_cache_path or
$fastcgi_cache_use_stale or
$gzip or
$http_access_log or
$http_cfg_append or
$http_tcp_nodelay or
$http_tcp_nopush or
$keepalive_timeout or
$logdir or
$mail or
$multi_accept or
$names_hash_bucket_size or
$names_hash_max_size or
$nginx_error_log or
$pid or
$proxy_buffers or
$proxy_buffer_size or
$proxy_cache_inactive or
$proxy_cache_keys_zone or
$proxy_cache_levels or
$proxy_cache_max_size or
$proxy_cache_path or
$proxy_conf_template or
$proxy_connect_timeout or
$proxy_headers_hash_bucket_size or
$proxy_http_version or
$proxy_read_timeout or
$proxy_redirect or
$proxy_send_timeout or
$proxy_set_header or
$proxy_temp_path or
$run_dir or
$sendfile or
$server_tokens or
$spdy or
$super_user or
$temp_dir or
$types_hash_bucket_size or
$types_hash_max_size or
$vhost_purge or
$worker_connections or
$worker_processes or
$worker_rlimit_nofile or
$global_owner or
$global_group or
$global_mode or
$sites_available_owner or
$sites_available_group or
$sites_available_mode {
validate_bool($configtest_enable)
validate_string($service_restart)
validate_bool($mail)
validate_string($server_tokens)
validate_string($client_max_body_size)
if (!is_integer($names_hash_bucket_size)) {
fail('$names_hash_bucket_size must be an integer.')
}
if (!is_integer($names_hash_max_size)) {
fail('$names_hash_max_size must be an integer.')
}
validate_string($proxy_buffers)
validate_string($proxy_buffer_size)
if ($http_cfg_append != false) {
if !(is_hash($http_cfg_append) or is_array($http_cfg_append)) {
fail('$http_cfg_append must be either a hash or array')
}
}
include nginx::notice::puppet_module_data
}
validate_string($nginx_error_log)
validate_string($http_access_log)
validate_hash($nginx_upstreams)
validate_hash($nginx_vhosts)
validate_hash($nginx_vhosts_defaults)
validate_hash($nginx_locations)
validate_hash($nginx_mailhosts)
validate_bool($manage_repo)
validate_string($proxy_headers_hash_bucket_size)
validate_bool($super_user)
validate_hash($string_mappings)
validate_hash($geo_mappings)
### END DEPRECATION WARNING ###
class { 'nginx::package':
package_name => $package_name,
@ -259,8 +265,7 @@ class nginx (
notify => Class['nginx::service'],
}
class { 'nginx::service':
}
class { 'nginx::service': }
create_resources('nginx::resource::upstream', $nginx_upstreams)
create_resources('nginx::resource::vhost', $nginx_vhosts, $nginx_vhosts_defaults)

View file

@ -0,0 +1,5 @@
class nginx::notice::puppet_module_data {
$message = "[nginx] *** DEPRECATION WARNING***: HI! I notice that you're declaring some attributes in Class[nginx]. We are in the process of moving all of these attributes to Hiera with puppet-module-tool. Please check out https://github.com/jfryman/puppet-nginx/blob/master/docs/hiera.md for more information."
notify { $message: }
}

View file

@ -1,161 +0,0 @@
# Class: nginx::param
#
# This module manages NGINX paramaters
#
# Parameters:
#
# There are no default parameters for this class.
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
# This class file is not called directly
class nginx::params {
$nx_temp_dir = '/tmp'
$nx_run_dir = '/var/nginx'
$nx_conf_template = 'nginx/conf.d/nginx.conf.erb'
$nx_proxy_conf_template = 'nginx/conf.d/proxy.conf.erb'
$nx_confd_purge = false
$nx_vhost_purge = false
$nx_worker_processes = 1
$nx_worker_connections = 1024
$nx_worker_rlimit_nofile = 1024
$nx_types_hash_max_size = 1024
$nx_types_hash_bucket_size = 512
$nx_names_hash_bucket_size = 64
$nx_names_hash_max_size = 512
$nx_multi_accept = off
# One of [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport]
# or false to use OS default
$nx_events_use = false
$nx_sendfile = on
$nx_keepalive_timeout = 65
$nx_http_tcp_nodelay = on
$nx_http_tcp_nopush = off
$nx_gzip = on
$nx_server_tokens = on
$nx_spdy = off
$nx_ssl_stapling = off
$nx_proxy_redirect = off
$nx_proxy_set_header = [
'Host $host',
'X-Real-IP $remote_addr',
'X-Forwarded-For $proxy_add_x_forwarded_for',
]
$nx_proxy_cache_path = false
$nx_proxy_cache_levels = '1'
$nx_proxy_cache_keys_zone = 'd2:100m'
$nx_proxy_cache_max_size = '500m'
$nx_proxy_cache_inactive = '20m'
$nx_fastcgi_cache_path = false
$nx_fastcgi_cache_levels = '1'
$nx_fastcgi_cache_keys_zone = 'd3:100m'
$nx_fastcgi_cache_max_size = '500m'
$nx_fastcgi_cache_inactive = '20m'
$nx_fastcgi_cache_key = false
$nx_fastcgi_cache_use_stale = false
$nx_client_body_temp_path = "${nx_run_dir}/client_body_temp"
$nx_client_body_buffer_size = '128k'
$nx_client_max_body_size = '10m'
$nx_proxy_temp_path = "${nx_run_dir}/proxy_temp"
$nx_proxy_connect_timeout = '90'
$nx_proxy_send_timeout = '90'
$nx_proxy_read_timeout = '90'
$nx_proxy_buffers = '32 4k'
$nx_proxy_http_version = '1.0'
$nx_proxy_buffer_size = '8k'
$nx_proxy_headers_hash_bucket_size = '64'
$nx_logdir = '/var/log/nginx'
$nx_pid = $::kernel ? {
/(?i-mx:linux)/ => $::osfamily ? {
# archlinux has hardcoded pid in service file to /run/nginx.pid, setting
# it will prevent nginx from starting
/(?i-mx:archlinux)/ => false,
default => '/var/run/nginx.pid',
},
/(?i-mx:sunos)/ => '/var/run/nginx.pid',
/(?i-mx:freebsd)/ => '/var/run/nginx.pid',
}
$nx_conf_dir = $::kernelversion ? {
/(?i-mx:joyent)/ => '/opt/local/etc/nginx',
default => $::kernel ? {
/(?i-mx:freebsd)/ => '/usr/local/etc/nginx',
default => '/etc/nginx',
}
}
if $::osfamily {
$solaris_nx_daemon_user = $::kernelversion ? {
/(?i-mx:joyent)/ => 'www',
default => 'webservd',
}
$nx_daemon_user = $::osfamily ? {
/(?i-mx:archlinux)/ => 'http',
/(?i-mx:redhat|suse|gentoo|linux)/ => 'nginx',
/(?i-mx:debian)/ => 'www-data',
/(?i-mx:solaris)/ => $solaris_nx_daemon_user,
/(?i-mx:freebsd)/ => 'www',
}
} else {
warning('$::osfamily not defined. Support for $::operatingsystem is deprecated')
warning("Please upgrade from facter ${::facterversion} to >= 1.7.2")
$nx_daemon_user = $::operatingsystem ? {
/(?i-mx:archlinux)/ => 'http',
/(?i-mx:debian|ubuntu)/ => 'www-data',
/(?i-mx:fedora|rhel|redhat|centos|scientific|suse|opensuse|amazon|gentoo|oraclelinux)/ => 'nginx',
/(?i-mx:solaris)/ => 'webservd',
/(?i-mx:freebsd)/ => 'www',
}
}
$root_group = $::operatingsystem ? {
'FreeBSD' => 'wheel',
default => 'root',
}
# Nginx is default launched as root if not change this parameter
$nx_super_user = true
# Service restart after Nginx 0.7.53 could also be just
# "/path/to/nginx/bin -s HUP" Some init scripts do a configtest, some don't.
# If configtest_enable it's true then service restart will take
# $nx_service_restart value, forcing configtest.
$nx_configtest_enable = false
$nx_service_restart = '/etc/init.d/nginx configtest && /etc/init.d/nginx restart'
$nx_service_ensure = running
$nx_mail = false
$nx_http_cfg_append = false
$nx_nginx_error_log = "${nx_logdir}/error.log"
$nx_http_access_log = "${nx_logdir}/access.log"
# package name depends on distribution, e.g. for Debian nginx-full | nginx-light
$package_name = 'nginx'
$package_ensure = 'present'
$package_source = 'nginx'
$manage_repo = true
# Specific owner for sites-available directory
$sites_available_owner = 'root'
$sites_available_group = $root_group
$sites_available_mode = '0644'
# Owner for all other files
$global_owner = 'root'
$global_group = $root_group
$global_mode = '0644'
}

View file

@ -73,8 +73,7 @@ define nginx::resource::geo (
if ($proxies != undef) { validate_array($proxies) }
if ($proxy_recursive != undef) { validate_bool($proxy_recursive) }
include nginx::params
$root_group = $nginx::params::root_group
$root_group = $nginx::config::root_group
$ensure_real = $ensure ? {
'absent' => 'absent',

View file

@ -173,8 +173,7 @@ define nginx::resource::location (
$flv = false,
) {
include nginx::params
$root_group = $nginx::params::root_group
$root_group = $nginx::config::root_group
File {
owner => 'root',

View file

@ -61,8 +61,7 @@ define nginx::resource::mailhost (
$server_name = [$name]
) {
include nginx::params
$root_group = $nginx::params::root_group
$root_group = $nginx::config::root_group
File {
owner => 'root',

View file

@ -57,8 +57,7 @@ define nginx::resource::map (
"Invalid ensure value '${ensure}'. Expected 'present' or 'absent'")
if ($default != undef) { validate_string($default) }
include nginx::params
$root_group = $nginx::params::root_group
$root_group = $nginx::config::root_group
$ensure_real = $ensure ? {
'absent' => absent,

View file

@ -54,8 +54,7 @@ define nginx::resource::upstream (
validate_hash($upstream_cfg_prepend)
}
include nginx::params
$root_group = $nginx::params::root_group
$root_group = $nginx::config::root_group
$ensure_real = $ensure ? {
'absent' => absent,

View file

@ -1,6 +1,6 @@
{
"name": "jfryman-nginx",
"version": "0.0.10",
"version": "0.1.0",
"author": "James Fryman",
"summary": "Puppet NGINX management module",
"license": "Apache License Version 2.0",
@ -11,6 +11,7 @@
"dependencies": [
{"name":"puppetlabs/stdlib","version_requirement":">= 3.0.0"},
{"name":"puppetlabs/apt","version_requirement":">= 1.0.0"},
{"name":"puppetlabs/concat","version_requirement":">= 1.1.0"}
{"name":"puppetlabs/concat","version_requirement":">= 1.1.0"},
{"name":"ripienaar/module_data","version_requirement":">= 0.0.3"}
]
}

View file

@ -3,18 +3,18 @@ describe 'nginx::config' do
describe 'with defaults' do
[
{ :osfamily => 'debian', :operatingsystem => 'debian', },
{ :osfamily => 'debian', :operatingsystem => 'ubuntu', },
{ :osfamily => 'redhat', :operatingsystem => 'fedora', },
{ :osfamily => 'redhat', :operatingsystem => 'rhel', },
{ :osfamily => 'redhat', :operatingsystem => 'redhat', },
{ :osfamily => 'redhat', :operatingsystem => 'centos', },
{ :osfamily => 'redhat', :operatingsystem => 'scientific', },
{ :osfamily => 'redhat', :operatingsystem => 'amazon', },
{ :osfamily => 'suse', :operatingsystem => 'suse', },
{ :osfamily => 'suse', :operatingsystem => 'opensuse', },
{ :osfamily => 'gentoo', :operatingsystem => 'gentoo', },
{ :osfamily => 'linux', :operatingsystem => 'gentoo', },
{ :osfamily => 'Debian', :operatingsystem => 'Debian', },
{ :osfamily => 'Debian', :operatingsystem => 'Ubuntu', },
{ :osfamily => 'Redhat', :operatingsystem => 'Fedora', },
{ :osfamily => 'Redhat', :operatingsystem => 'RedHat', },
{ :osfamily => 'Redhat', :operatingsystem => 'OracleLinux', },
{ :osfamily => 'Redhat', :operatingsystem => 'CentOS', },
{ :osfamily => 'Redhat', :operatingsystem => 'Scientific', },
{ :osfamily => 'Redhat', :operatingsystem => 'Amazon', },
{ :osfamily => 'SuSE', :operatingsystem => 'SuSE', },
{ :osfamily => 'SuSE', :operatingsystem => 'OpenSuSE', },
{ :osfamily => 'Gentoo', :operatingsystem => 'Gentoo', },
{ :osfamily => 'Linux', :operatingsystem => 'Gentoo', },
].each do |facts|
context "when osfamily/operatingsystem is #{facts[:osfamily]}/#{facts[:operatingsystem]}" do
@ -26,8 +26,6 @@ describe 'nginx::config' do
}
end
it { is_expected.to contain_class("nginx::params") }
it { is_expected.to contain_file("/etc/nginx").only_with(
:path => "/etc/nginx",
:ensure => 'directory',
@ -96,8 +94,8 @@ describe 'nginx::config' do
describe 'with defaults' do
[
{ :osfamily => 'debian', :operatingsystem => 'debian', },
{ :osfamily => 'debian', :operatingsystem => 'ubuntu', },
{ :osfamily => 'Debian', :operatingsystem => 'Debian', },
{ :osfamily => 'Debian', :operatingsystem => 'Ubuntu', },
].each do |facts|
context "when osfamily/operatingsystem is #{facts[:osfamily]}/#{facts[:operatingsystem]}" do
@ -117,16 +115,16 @@ describe 'nginx::config' do
describe 'with defaults' do
[
{ :osfamily => 'redhat', :operatingsystem => 'fedora', },
{ :osfamily => 'redhat', :operatingsystem => 'rhel', },
{ :osfamily => 'redhat', :operatingsystem => 'redhat', },
{ :osfamily => 'redhat', :operatingsystem => 'centos', },
{ :osfamily => 'redhat', :operatingsystem => 'scientific', },
{ :osfamily => 'redhat', :operatingsystem => 'amazon', },
{ :osfamily => 'suse', :operatingsystem => 'suse', },
{ :osfamily => 'suse', :operatingsystem => 'opensuse', },
{ :osfamily => 'gentoo', :operatingsystem => 'gentoo', },
{ :osfamily => 'linux', :operatingsystem => 'gentoo', },
{ :osfamily => 'RedHat', :operatingsystem => 'Fedora', },
{ :osfamily => 'RedHat', :operatingsystem => 'RedHat', },
{ :osfamily => 'RedHat', :operatingsystem => 'OracleLinux', },
{ :osfamily => 'RedHat', :operatingsystem => 'CentOS', },
{ :osfamily => 'RedHat', :operatingsystem => 'Scientific', },
{ :osfamily => 'RedHat', :operatingsystem => 'Amazon', },
{ :osfamily => 'SuSE', :operatingsystem => 'SuSE', },
{ :osfamily => 'SuSE', :operatingsystem => 'openSuSE', },
{ :osfamily => 'Gentoo', :operatingsystem => 'Gentoo', },
{ :osfamily => 'Linux', :operatingsystem => 'Gentoo', },
].each do |facts|
context "when osfamily/operatingsystem is #{facts[:osfamily]}/#{facts[:operatingsystem]}" do
@ -148,8 +146,8 @@ describe 'nginx::config' do
let :facts do
{
:osfamily => 'debian',
:operatingsystem => 'debian',
:osfamily => 'Debian',
:operatingsystem => 'Debian',
}
end

View file

@ -21,7 +21,6 @@ describe 'nginx' do
it { is_expected.to contain_nginx__service.that_subscribes_to('Class[nginx::package]') }
it { is_expected.to contain_nginx__service.that_subscribes_to('Class[nginx::config]') }
it { is_expected.to contain_anchor('nginx::end').that_requires('Class[nginx::service]') }
it { is_expected.to contain_class("nginx::params") }
it { is_expected.to contain_nginx__resource__upstream("upstream1") }
it { is_expected.to contain_nginx__resource__vhost("test2.local") }
it { is_expected.to contain_nginx__resource__vhost("test2.local").with_listen_options('default_server') }

View file

@ -4,7 +4,6 @@ describe 'nginx::package' do
shared_examples 'redhat' do |operatingsystem|
let(:facts) {{ :operatingsystem => operatingsystem, :osfamily => 'RedHat' }}
context "using defaults" do
it { is_expected.to contain_package('nginx') }
it { is_expected.to contain_yumrepo('nginx-release').with(

View file

@ -1,15 +0,0 @@
require 'spec_helper'
describe 'nginx::params' do
context "On a Debian OS" do
let :facts do {
:osfamily => 'debian',
:operatingsystem => 'debian',
} end
it { is_expected.to contain_nginx__params }
it { is_expected.to have_class_count(1) } #only nginx::params itself
it { is_expected.to have_resource_count(0) } #params class should never declare resources
end
end

View file

@ -3,14 +3,14 @@ describe 'nginx::service' do
let :facts do {
:osfamily => 'Debian',
:operatingsystem => 'debian',
:operatingsystem => 'Debian',
} end
let :params do {
:configtest_enable => false,
:service_restart => '/etc/init.d/nginx configtest && /etc/init.d/nginx restart',
:service_ensure => 'running',
} end
} end
context "using default parameters" do

View file

@ -26,7 +26,6 @@ describe 'nginx::resource::geo' do
let :pre_condition do
[
'include ::nginx::params',
'include ::nginx::config',
]
end

View file

@ -8,12 +8,11 @@ describe 'nginx::resource::location' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'debian',
:operatingsystem => 'Debian',
}
end
let :pre_condition do
[
'include ::nginx::params',
'include ::nginx::config',
]
end
@ -26,7 +25,6 @@ describe 'nginx::resource::location' do
:vhost => 'vhost1',
} end
it { is_expected.to contain_class("nginx::params") }
it { is_expected.to contain_class("nginx::config") }
it { is_expected.to contain_concat__fragment("f25e14942fb58942ee13b1465a4e1719").with_content(/location rspec-test/) }
it { is_expected.not_to contain_file('/etc/nginx/fastcgi_params') }

View file

@ -6,8 +6,8 @@ describe 'nginx::resource::mailhost' do
end
let :facts do
{
:osfamily => 'debian',
:operatingsystem => 'debian',
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:ipaddress6 => '::',
}
end

View file

@ -26,7 +26,6 @@ describe 'nginx::resource::map' do
let :pre_condition do
[
'include ::nginx::params',
'include ::nginx::config',
]
end

View file

@ -13,7 +13,6 @@ describe 'nginx::resource::upstream' do
let :pre_condition do
[
'include ::nginx::params',
'include ::nginx::config',
]
end
@ -28,7 +27,6 @@ describe 'nginx::resource::upstream' do
let :pre_condition do
[
'include ::nginx::params',
'include ::nginx::config',
]
end
@ -39,7 +37,6 @@ describe 'nginx::resource::upstream' do
describe 'basic assumptions' do
let :params do default_params end
it { is_expected.to contain_class("nginx::params") }
it { is_expected.to contain_class('concat::setup') }
it { is_expected.to contain_file("/etc/nginx/conf.d/#{title}-upstream.conf") }
it { is_expected.to contain_concat__fragment("#{title}_upstream_header").with_content(/upstream #{title}/) }

View file

@ -19,7 +19,6 @@ describe 'nginx::resource::vhost' do
end
let :pre_condition do
[
'include ::nginx::params',
'include ::nginx::config',
]
end
@ -28,7 +27,6 @@ describe 'nginx::resource::vhost' do
describe 'basic assumptions' do
let :params do default_params end
it { is_expected.to contain_class("nginx::params") }
it { is_expected.to contain_class("nginx::config") }
it { is_expected.to contain_concat("/etc/nginx/sites-available/#{title}.conf").with({
'owner' => 'root',

3
spec/fixtures/hiera/hiera.yaml vendored Normal file
View file

@ -0,0 +1,3 @@
---
:backends:
- module_data

View file

@ -1,6 +1,9 @@
require 'puppetlabs_spec_helper/module_spec_helper'
require 'fixtures/modules/module_data/lib/hiera/backend/module_data_backend.rb'
RSpec.configure do |c|
c.hiera_config = File.join('spec', 'fixtures', 'hiera', 'hiera.yaml')
c.default_facts = {
:kernel => 'Linux',
:concat_basedir => '/var/lib/puppet/concat',