Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

initial support for snippets #1231

Merged
merged 1 commit into from
Feb 9, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions examples/snippet.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

class { 'nginx':
snippets_dir => '/etc/nginx/snippets',
}

$snippet = @("SNIPPET"/L)
location @custom_451_error {
return 451;
}
| SNIPPET

nginx::resource::snippet { 'test_snippet':
raw_content => $snippet,
}

nginx::resource::server { 'test.local:8080':
ensure => present,
listen_port => 8080,
server_name => ['test.local test'],
include_files => ["${nginx::snippets_dir}/test_snippet.conf"],
try_files => [ 'non-existant', '@custom_451_error'],
}

nginx::resource::server { 'test.local:8081':
ensure => present,
listen_port => 8081,
server_name => ['test.local test'],
include_files => ["${nginx::snippets_dir}/test_snippet.conf"],
try_files => [ 'non-existant', '@custom_451_error'],
}
6 changes: 6 additions & 0 deletions manifests/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,12 @@
ensure => directory,
}

if $nginx::manage_snippets_dir {
file { $nginx::snippets_dir:
ensure => directory,
}
}

file { $log_dir:
ensure => directory,
mode => $log_mode,
Expand Down
2 changes: 2 additions & 0 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@
Enum['on', 'off'] $spdy = 'off',
Enum['on', 'off'] $http2 = 'off',
Enum['on', 'off'] $ssl_stapling = 'off',
Stdlib::Absolutepath $snippets_dir = $nginx::params::snippets_dir,
Boolean $manage_snippets_dir = true,
$types_hash_bucket_size = '512',
$types_hash_max_size = '1024',
Integer $worker_connections = 1024,
Expand Down
1 change: 1 addition & 0 deletions manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@

### Referenced Variables
$conf_dir = $_module_parameters['conf_dir']
$snippets_dir = "${conf_dir}/snippets"
$log_dir = $_module_parameters['log_dir']
$log_user = $_module_parameters['log_user']
$log_group = $_module_parameters['log_group']
Expand Down
37 changes: 37 additions & 0 deletions manifests/resource/snippet.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# This definition creates a reusable config snippet that can be included by other resources
#
# @param ensure Enables or disables the specified snippet
# @param owner Defines owner of the .conf file
# @param group Defines group of the .conf file
# @param mode Defines mode of the .conf file
# @param raw_content Raw content that will be inserted into the snipped as-is

define nginx::resource::snippet (
String[1] $raw_content,
Enum['absent', 'present'] $ensure = 'present',
String $owner = $nginx::global_owner,
String $group = $nginx::global_group,
Stdlib::Filemode $mode = $nginx::global_mode,
) {
if ! defined(Class['nginx']) {
fail('You must include the nginx base class before using any defined resources')
}

$name_sanitized = regsubst($name, ' ', '_', 'G')
$config_file = "${nginx::snippets_dir}/${name_sanitized}.conf"

concat { $config_file:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably need a check in here to ensure that $config_file isn't already defined as a concat resource. If it is and you try to add another snippet to the same $config_file, it will fail when it tries to create this resource.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure about this. $config_file contains the name of the defined resource, so it's already unique in the catalog.

ensure => $ensure,
owner => $owner,
group => $group,
mode => $mode,
notify => Class['nginx::service'],
require => File[$nginx::snippets_dir],
}

concat::fragment { "snippet-${name_sanitized}-header":
target => $config_file,
content => epp("${module_name}/snippet/snippet_header.epp", { 'raw_content' => $raw_content }),
order => '001',
}
}
30 changes: 30 additions & 0 deletions spec/defines/resource_snippet_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require 'spec_helper'

describe 'nginx::resource::snippet' do
on_supported_os.each do |os, facts|
context "on #{os}" do
let(:facts) do
facts
end
let :title do
'some_snippet'
end

let :pre_condition do
'include nginx'
end

describe 'basic snippet' do
let :params do
{
raw_content: 'this is a test'
}
end

it { is_expected.to contain_concat__fragment('snippet-some_snippet-header').with_target("/etc/nginx/snippets/#{title}.conf").with_content(%r{this is a test}) }
it { is_expected.to contain_concat('/etc/nginx/snippets/some_snippet.conf') }
it { is_expected.to compile.with_all_deps }
end
end
end
end
5 changes: 5 additions & 0 deletions templates/snippet/snippet_header.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%- | String $raw_content,
| -%>
# MANAGED BY PUPPET

<%= $raw_content %>