commit
6b725dd5e1
9 changed files with 166 additions and 83 deletions
3
.fixtures.yml
Normal file
3
.fixtures.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fixtures:
|
||||||
|
symlinks:
|
||||||
|
'concat': '#{source_dir}'
|
5
.gemfile
Normal file
5
.gemfile
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
source :rubygems
|
||||||
|
|
||||||
|
puppetversion = ENV.key?('PUPPET_VERSION') ? "= #{ENV['PUPPET_VERSION']}" : ['>= 2.7']
|
||||||
|
gem 'puppet', puppetversion
|
||||||
|
gem 'puppetlabs_spec_helper', '>= 0.1.0'
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
pkg
|
12
.travis.yml
Normal file
12
.travis.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
language: ruby
|
||||||
|
rvm:
|
||||||
|
- 1.8.7
|
||||||
|
script:
|
||||||
|
- "rake lint"
|
||||||
|
- "rake spec"
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
env:
|
||||||
|
- PUPPET_VERSION=2.7.11
|
||||||
|
gemfile: .gemfile
|
15
Rakefile
15
Rakefile
|
@ -1,13 +1,2 @@
|
||||||
require 'rake'
|
require 'rubygems'
|
||||||
require 'rspec/core/rake_task'
|
require 'puppetlabs_spec_helper/rake_tasks'
|
||||||
|
|
||||||
task :default => [:spec]
|
|
||||||
|
|
||||||
desc "Run all module spec tests (Requires rspec-puppet gem)"
|
|
||||||
RSpec::Core::RakeTask.new(:spec)
|
|
||||||
|
|
||||||
desc "Build package"
|
|
||||||
task :build do
|
|
||||||
system("puppet-module build")
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
|
@ -80,18 +80,32 @@
|
||||||
#
|
#
|
||||||
# ACTIONS:
|
# ACTIONS:
|
||||||
# - Creates fragment directories if it didn't exist already
|
# - Creates fragment directories if it didn't exist already
|
||||||
# - Executes the concatfragments.sh script to build the final file, this script will create
|
# - Executes the concatfragments.sh script to build the final file, this
|
||||||
# directory/fragments.concat. Execution happens only when:
|
# script will create directory/fragments.concat. Execution happens only
|
||||||
|
# when:
|
||||||
# * The directory changes
|
# * The directory changes
|
||||||
# * fragments.concat != final destination, this means rebuilds will happen whenever
|
# * fragments.concat != final destination, this means rebuilds will happen
|
||||||
# someone changes or deletes the final file. Checking is done using /usr/bin/cmp.
|
# whenever someone changes or deletes the final file. Checking is done
|
||||||
# * The Exec gets notified by something else - like the concat::fragment define
|
# using /usr/bin/cmp.
|
||||||
|
# * The Exec gets notified by something else - like the concat::fragment
|
||||||
|
# define
|
||||||
# - Copies the file over to the final destination using a file resource
|
# - Copies the file over to the final destination using a file resource
|
||||||
#
|
#
|
||||||
# ALIASES:
|
# ALIASES:
|
||||||
# - The exec can notified using Exec["concat_/path/to/file"] or Exec["concat_/path/to/directory"]
|
# - The exec can notified using Exec["concat_/path/to/file"] or
|
||||||
# - The final file can be referened as File["/path/to/file"] or File["concat_/path/to/file"]
|
# Exec["concat_/path/to/directory"]
|
||||||
define concat($mode = '0644', $owner = $::id, $group = $concat::setup::root_group, $warn = false, $force = false, $backup = 'puppet', $gnu = undef, $order='alpha') {
|
# - The final file can be referened as File["/path/to/file"] or
|
||||||
|
# File["concat_/path/to/file"]
|
||||||
|
define concat(
|
||||||
|
$owner = $::id,
|
||||||
|
$group = $concat::setup::root_group,
|
||||||
|
$mode = '0644',
|
||||||
|
$warn = false,
|
||||||
|
$force = false,
|
||||||
|
$backup = 'puppet',
|
||||||
|
$gnu = undef,
|
||||||
|
$order='alpha'
|
||||||
|
) {
|
||||||
$safe_name = regsubst($name, '/', '_', 'G')
|
$safe_name = regsubst($name, '/', '_', 'G')
|
||||||
$concatdir = $concat::setup::concatdir
|
$concatdir = $concat::setup::concatdir
|
||||||
$version = $concat::setup::majorversion
|
$version = $concat::setup::majorversion
|
||||||
|
@ -100,9 +114,15 @@ define concat($mode = '0644', $owner = $::id, $group = $concat::setup::root_grou
|
||||||
$default_warn_message = '# This file is managed by Puppet. DO NOT EDIT.'
|
$default_warn_message = '# This file is managed by Puppet. DO NOT EDIT.'
|
||||||
|
|
||||||
case $warn {
|
case $warn {
|
||||||
'true',true,yes,on: { $warnmsg = $default_warn_message }
|
'true', true, yes, on: {
|
||||||
'false',false,no,off: { $warnmsg = '' }
|
$warnmsg = $default_warn_message
|
||||||
default: { $warnmsg = $warn }
|
}
|
||||||
|
'false', false, no, off: {
|
||||||
|
$warnmsg = ''
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
$warnmsg = $warn
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$warnmsg_escaped = regsubst($warnmsg, "'", "'\\\\''", 'G')
|
$warnmsg_escaped = regsubst($warnmsg, "'", "'\\\\''", 'G')
|
||||||
|
@ -112,67 +132,91 @@ define concat($mode = '0644', $owner = $::id, $group = $concat::setup::root_grou
|
||||||
}
|
}
|
||||||
|
|
||||||
case $force {
|
case $force {
|
||||||
'true',true,yes,on: { $forceflag = '-f' }
|
'true', true, yes, on: {
|
||||||
'false',false,no,off: { $forceflag = '' }
|
$forceflag = '-f'
|
||||||
default: { fail("Improper 'force' value given to concat: ${force}") }
|
}
|
||||||
|
'false', false, no, off: {
|
||||||
|
$forceflag = ''
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
e fail("Improper 'force' value given to concat: ${force}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case $order {
|
case $order {
|
||||||
numeric: { $orderflag = '-n' }
|
numeric: {
|
||||||
alpha: { $orderflag = '' }
|
$orderflag = '-n'
|
||||||
default: { fail("Improper 'order' value given to concat: ${order}") }
|
}
|
||||||
|
alpha: {
|
||||||
|
$orderflag = ''
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
fail("Improper 'order' value given to concat: ${order}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
File{
|
File {
|
||||||
owner => $::id,
|
owner => $::id,
|
||||||
group => $group,
|
group => $group,
|
||||||
mode => $mode,
|
mode => $mode,
|
||||||
backup => $backup
|
backup => $backup
|
||||||
}
|
}
|
||||||
|
|
||||||
file{$fragdir:
|
file { $fragdir:
|
||||||
ensure => directory;
|
ensure => directory,
|
||||||
|
}
|
||||||
|
|
||||||
"${fragdir}/fragments":
|
$source_real = $version ? {
|
||||||
|
24 => 'puppet:///concat/null',
|
||||||
|
default => undef,
|
||||||
|
}
|
||||||
|
|
||||||
|
file { "${fragdir}/fragments":
|
||||||
ensure => directory,
|
ensure => directory,
|
||||||
recurse => true,
|
|
||||||
purge => true,
|
|
||||||
force => true,
|
force => true,
|
||||||
ignore => ['.svn', '.git', '.gitignore'],
|
ignore => ['.svn', '.git', '.gitignore'],
|
||||||
source => $version ? {
|
notify => Exec["concat_${name}"],
|
||||||
24 => 'puppet:///concat/null',
|
purge => true,
|
||||||
default => undef,
|
recurse => true,
|
||||||
},
|
source => $source_real,
|
||||||
notify => Exec["concat_${name}"];
|
}
|
||||||
|
|
||||||
"${fragdir}/fragments.concat":
|
file { "${fragdir}/fragments.concat":
|
||||||
ensure => present;
|
|
||||||
|
|
||||||
"${fragdir}/${concat_name}":
|
|
||||||
ensure => present;
|
|
||||||
|
|
||||||
$name:
|
|
||||||
ensure => present,
|
ensure => present,
|
||||||
source => "${fragdir}/${concat_name}",
|
|
||||||
owner => $owner,
|
|
||||||
group => $group,
|
|
||||||
checksum => md5,
|
|
||||||
mode => $mode,
|
|
||||||
alias => "concat_${name}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exec{"concat_${name}":
|
file { "${fragdir}/${concat_name}":
|
||||||
notify => File[$name],
|
ensure => present,
|
||||||
subscribe => File[$fragdir],
|
|
||||||
alias => "concat_${fragdir}",
|
|
||||||
require => [ File[$fragdir], File["${fragdir}/fragments"], File["${fragdir}/fragments.concat"] ],
|
|
||||||
unless => "${concat::setup::concatdir}/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} -t ${warnflag} ${forceflag} ${orderflag}",
|
|
||||||
command => "${concat::setup::concatdir}/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} ${warnflag} ${forceflag} ${orderflag}",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
file { $name:
|
||||||
|
ensure => present,
|
||||||
|
alias => "concat_${name}",
|
||||||
|
group => $group,
|
||||||
|
mode => $mode,
|
||||||
|
owner => $owner,
|
||||||
|
source => "${fragdir}/${concat_name}",
|
||||||
|
}
|
||||||
|
|
||||||
|
exec { "concat_${name}":
|
||||||
|
alias => "concat_${fragdir}",
|
||||||
|
command => "${concat::setup::concatdir}/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} ${warnflag} ${forceflag} ${orderflag}",
|
||||||
|
notify => File[$name],
|
||||||
|
require => [
|
||||||
|
File[$fragdir],
|
||||||
|
File["${fragdir}/fragments"],
|
||||||
|
File["${fragdir}/fragments.concat"],
|
||||||
|
],
|
||||||
|
subscribe => File[$fragdir],
|
||||||
|
unless => "${concat::setup::concatdir}/bin/concatfragments.sh -o ${fragdir}/${concat_name} -d ${fragdir} -t ${warnflag} ${forceflag} ${orderflag}",
|
||||||
|
}
|
||||||
|
|
||||||
if $::id == 'root' {
|
if $::id == 'root' {
|
||||||
Exec["concat_${name}"]{
|
Exec["concat_${name}"] {
|
||||||
user => root,
|
user => root,
|
||||||
group => $group,
|
group => $group,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# vim:sw=2:ts=2:expandtab:textwidth=79
|
||||||
|
|
|
@ -3,18 +3,55 @@ require 'spec_helper'
|
||||||
describe 'concat' do
|
describe 'concat' do
|
||||||
basedir = '/var/lib/puppet/concat'
|
basedir = '/var/lib/puppet/concat'
|
||||||
let(:title) { '/etc/foo.bar' }
|
let(:title) { '/etc/foo.bar' }
|
||||||
let(:facts) { { :concat_basedir => '/var/lib/puppet/concat' } }
|
let(:facts) { {
|
||||||
|
:concat_basedir => '/var/lib/puppet/concat',
|
||||||
|
:id => 'root',
|
||||||
|
} }
|
||||||
let :pre_condition do
|
let :pre_condition do
|
||||||
'include concat::setup'
|
'include concat::setup'
|
||||||
end
|
end
|
||||||
it { should contain_file("#{basedir}/_etc_foo.bar").with('ensure' => 'directory') }
|
|
||||||
it { should contain_file("#{basedir}/_etc_foo.bar/fragments").with('ensure' => 'directory') }
|
|
||||||
|
|
||||||
it { should contain_file("#{basedir}/_etc_foo.bar/fragments.concat").with('ensure' => 'present') }
|
directories = [
|
||||||
it { should contain_file("/etc/foo.bar").with('ensure' => 'present') }
|
"#{basedir}/_etc_foo.bar",
|
||||||
it { should contain_exec("concat_/etc/foo.bar").with_command(
|
"#{basedir}/_etc_foo.bar/fragments",
|
||||||
"#{basedir}/bin/concatfragments.sh "+
|
]
|
||||||
"-o #{basedir}/_etc_foo.bar/fragments.concat.out "+
|
|
||||||
"-d #{basedir}/_etc_foo.bar ")
|
directories.each do |dirs|
|
||||||
}
|
it do
|
||||||
|
should contain_file(dirs).with({
|
||||||
|
'ensure' => 'directory',
|
||||||
|
'backup' => 'puppet',
|
||||||
|
'group' => 0,
|
||||||
|
'mode' => '0644',
|
||||||
|
'owner' => 'root',
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
files = [
|
||||||
|
"/etc/foo.bar",
|
||||||
|
"#{basedir}/_etc_foo.bar/fragments.concat",
|
||||||
|
]
|
||||||
|
|
||||||
|
files.each do |file|
|
||||||
|
it do
|
||||||
|
should contain_file(file).with({
|
||||||
|
'ensure' => 'present',
|
||||||
|
'backup' => 'puppet',
|
||||||
|
'group' => 0,
|
||||||
|
'mode' => '0644',
|
||||||
|
'owner' => 'root',
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
should contain_exec("concat_/etc/foo.bar").with_command(
|
||||||
|
"#{basedir}/bin/concatfragments.sh " +
|
||||||
|
"-o #{basedir}/_etc_foo.bar/fragments.concat.out " +
|
||||||
|
"-d #{basedir}/_etc_foo.bar "
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# vim:sw=2:ts=2:expandtab:textwidth=79
|
||||||
|
|
0
spec/fixtures/manifests/site.pp
vendored
Normal file
0
spec/fixtures/manifests/site.pp
vendored
Normal file
|
@ -1,9 +1 @@
|
||||||
require 'puppet'
|
require 'puppetlabs_spec_helper/module_spec_helper'
|
||||||
require 'rspec'
|
|
||||||
require 'rspec-puppet'
|
|
||||||
|
|
||||||
RSpec.configure do |c|
|
|
||||||
c.module_path = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures/modules/'))
|
|
||||||
# Using an empty site.pp file to avoid: https://github.com/rodjek/rspec-puppet/issues/15
|
|
||||||
c.manifest_dir = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures/manifests'))
|
|
||||||
end
|
|
||||||
|
|
Loading…
Reference in a new issue