diff --git a/manifests/init.pp b/manifests/init.pp index f4c48df..6965729 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,121 +1,121 @@ # == Class: varnish # # Configure Varnish proxy cache # # === Parameters # # [*addrepo*] # Whether to add the official Varnish repos # [*secret*] # Varnish secret (used by varnishadm etc). # Optional; will be autogenerated if not specified # [*vcl_conf*] # Location of Varnish config file template # [*listen*] # IP address for HTTP to listen on # [*listen_port*] # Port to listen on for HTTP requests # [*admin_listen*] # IP address for admin requests - defaults to 127.0.0.1 # [*admin_port*] # Port for Varnish admin to listen on # [*min_threads*] # Varnish minimum thread pool size # [*max_threads*] # Varnish maximum thread pool size # [*thread_timeout*] # Thread timeout # [*storage_type*] # Whether to use malloc (RAM only) or file storage for cache # [*storage_size*] # Size of cache # [*varnish_version*] # Major Varnish version to use # [*vcl_reload*] # Script to use to load new Varnish config # [*package_ensure*] # Ensure specific package version for Varnish, eg 3.0.5-1.el6 # [*runtime_params*] # Hash of key:value runtime parameters # class varnish ( $runtime_params = {}, $addrepo = true, $admin_listen = '127.0.0.1', $admin_port = '6082', $listen = '0.0.0.0', $listen_port = '6081', $secret = undef, $secret_file = '/etc/varnish/secret', $vcl_conf = '/etc/varnish/default.vcl', $storage_type = 'file', $storage_file = '/var/lib/varnish/varnish_storage.bin', $storage_size = '1G', $min_threads = '50', $max_threads = '1000', $thread_timeout = '120', $varnish_version = '4.1', + $instance_name = undef, $package_ensure = 'present', $package_name = 'varnish', $service_name = 'varnish', $vcl_reload_cmd = undef, $vcl_reload_path = $::path, ) { if $package_ensure == 'present' { $version_major = regsubst($varnish_version, '^(\d+)\.(\d+).*$', '\1') $version_minor = regsubst($varnish_version, '^(\d+)\.(\d+).*$', '\2') $version_full = $varnish_version } else { $version_major = regsubst($package_ensure, '^(\d+)\.(\d+).*$', '\1') $version_minor = regsubst($package_ensure, '^(\d+)\.(\d+).*$', '\2') $version_full = "${version_major}.${version_minor}" if $varnish_version != "${version_major}.${version_minor}" { fail("Version mismatch, varnish_version is ${varnish_version}, but package_ensure is ${version_full}") } } include ::varnish::params if $vcl_reload_cmd == undef { $vcl_reload = $::varnish::params::vcl_reload } else { $vcl_relaod = $vcl_reload_cmd } validate_bool($addrepo) validate_string($secret) validate_absolute_path($secret_file) - unless is_integer($listen_port) { fail('listen_port invalid') } unless is_integer($admin_port) { fail('admin_port invalid') } unless is_integer($min_threads) { fail('min_threads invalid') } unless is_integer($max_threads) { fail('max_threads invalid') } validate_absolute_path($storage_file) validate_hash($runtime_params) validate_re($storage_type, '^(malloc|file)$') validate_re("${version_major}.${version_minor}", '^[3-5]\.[0-9]') if $addrepo { class { '::varnish::repo': before => Class['::varnish::install'], } } include ::varnish::install class { '::varnish::secret': secret => $secret, require => Class['::varnish::install'], } class { '::varnish::config': require => Class['::varnish::secret'], notify => Class['::varnish::service'], } class { '::varnish::service': require => Class['::varnish::config'], } } diff --git a/templates/sysconfig.erb b/templates/sysconfig.erb index f7cb145..fbfacd8 100644 --- a/templates/sysconfig.erb +++ b/templates/sysconfig.erb @@ -1,39 +1,42 @@ ############################################ # WARNING: # Managed by Puppet - DO NOT modify locally! ############################################ START=yes NFILES=131072 MEMLOCK=82000 RELOAD_VCL=1 VARNISH_VCL_CONF=<%= scope['::varnish::vcl_conf'] %> VARNISH_LISTEN_ADDRESS=<%= scope['::varnish::listen'] %> VARNISH_LISTEN_PORT=<%= scope['::varnish::listen_port'] %> VARNISH_ADMIN_LISTEN_ADDRESS=<%= scope['::varnish::admin_listen'] %> VARNISH_ADMIN_LISTEN_PORT=<%= scope['::varnish::admin_port'] %> VARNISH_SECRET_FILE=<%= scope['::varnish::secret_file'] %> VARNISH_MIN_THREADS=<%= scope['::varnish::min_threads'] %> VARNISH_MAX_THREADS=<%= scope['::varnish::max_threads'] %> VARNISH_THREAD_TIMEOUT=<%= scope['::varnish::thread_timeout'] %> VARNISH_STORAGE=<%= scope['::varnish::storage_type'] %>,<% if scope['::varnish::storage_type'] == 'file' -%><%= scope['::varnish::storage_file'] %>,<% end -%><%= scope['::varnish::storage_size'] %> VARNISH_TTL=120 DAEMON_OPTS="<% if scope['::varnish::params::service_provider'] == 'sysvinit' -%><%= scope['::varnish::config::jail_opt'] %> \<% end %> -a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ +<% if scope['::varnish::instance_name'] != :undefined -%> + -n <%= scope['::varnish::instance_name'] %> \ +<% end -%> -f ${VARNISH_VCL_CONF} \ -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ -t ${VARNISH_TTL} \ <% if scope['::varnish::version_major'] == '3' -%> -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \ <% else -%> -p thread_pool_min=${VARNISH_MIN_THREADS} \ -p thread_pool_max=${VARNISH_MAX_THREADS} \ -p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \ <% end -%> <% scope['::varnish::runtime_params'].each do |k,v| -%> -p <%= k %>=<%= v %> \ <% end -%> -S ${VARNISH_SECRET_FILE} \ -s ${VARNISH_STORAGE}" diff --git a/templates/varnish.service.erb b/templates/varnish.service.erb index 97c0d52..980d8d3 100644 --- a/templates/varnish.service.erb +++ b/templates/varnish.service.erb @@ -1,32 +1,35 @@ [Unit] Description=Varnish HTTP accelerator [Service] Type=forking LimitNOFILE=131072 LimitMEMLOCK=82000 LimitCORE=infinity PrivateTmp=true ExecReload=<%= scope['::varnish::vcl_reload'] %> ExecStart=/usr/sbin/varnishd <%= scope['::varnish::config::jail_opt'] %> \ -P /var/run/varnish.pid \ -t 120 \ +<% if scope['::varnish::instance_name'] != :undefined -%> + -n <%= scope['::varnish::instance_name'] %> \ +<% end -%> -f <%= scope['::varnish::vcl_conf'] %> \ -a <%= scope['::varnish::listen'] %>:<%= scope['::varnish::listen_port'] %> \ -T <%= scope['::varnish::admin_listen'] %>:<%= scope['::varnish::admin_port'] %> \ <% if scope['::varnish::version_major'] == '3' -%> -w <%= scope['::varnish::min_threads'] %>,<%= scope['::varnish::max_threads'] %>,<%= scope['::varnish::thread_timeout'] %> \ <% else -%> -p thread_pool_min=<%= scope['::varnish::min_threads'] %> \ -p thread_pool_max=<%= scope['::varnish::max_threads'] %> \ -p thread_pool_timeout=<%= scope['::varnish::thread_timeout'] %> \ <% end -%> <% scope['::varnish::runtime_params'].each do |k,v| -%> -p <%= k %>=<%= v %> \ <% end -%> -S <%= scope['::varnish::secret_file'] %> \ -s <%= scope['::varnish::storage_type'] %>,<% if scope['::varnish::storage_type'] == 'file' -%><%= scope['::varnish::storage_file'] %>,<% end -%><%= scope['::varnish::storage_size'] %> [Install] WantedBy=multi-user.target