Merge "Sync puppet module rsync to v0.3.0 from upstream"

This commit is contained in:
Jenkins 2014-10-13 18:40:58 +00:00 committed by Gerrit Code Review
commit 15e5fd3c44
21 changed files with 569 additions and 113 deletions

View File

@ -3,4 +3,3 @@ fixtures:
"xinetd": "git://github.com/ghoneycutt/puppet-xinetd"
symlinks:
"rsync": "#{source_dir}"
"stdlib": "#{source_dir}/../stdlib"

View File

@ -1,5 +0,0 @@
source :rubygems
puppetversion = ENV.key?('PUPPET_VERSION') ? "= #{ENV['PUPPET_VERSION']}" : ['>= 2.7']
gem 'puppet', puppetversion
gem 'puppetlabs_spec_helper', '>= 0.1.0'

View File

@ -1,5 +1,3 @@
*.swp
pkg/
.DS_Store
metadata.json
coverage/
Gemfile.lock
.rspec

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>rsync</name>
<comment></comment>
<projects>
<project>xinetd</project>
</projects>
<buildSpec>
<buildCommand>
<name>org.cloudsmith.geppetto.pp.dsl.ui.modulefileBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.cloudsmith.geppetto.pp.dsl.ui.puppetNature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,28 @@
---
branches:
only:
- master
language: ruby
bundler_args: --without development
script: "bundle exec rake spec SPEC_OPTS='--format documentation'"
rvm:
- 1.8.7
- 1.9.3
- 2.0.0
env:
matrix:
- PUPPET_GEM_VERSION="~> 2.7.0"
- PUPPET_GEM_VERSION="~> 3.0"
- PUPPET_GEM_VERSION="~> 3.2.0"
matrix:
exclude:
- rvm: 1.9.3
env: PUPPET_GEM_VERSION="~> 2.7.0"
- rvm: 2.0.0
env: PUPPET_GEM_VERSION="~> 2.7.0"
- rvm: 1.8.7
env: PUPPET_GEM_VERSION="~> 3.2.0"
notifications:
email: false

View File

@ -1,2 +1,22 @@
* 2014-06-18 0.3.0
Features:
- Added rsync::put defined type.
- Added 'recursive', 'links', 'hardlinks', 'copylinks', 'times' and 'include'
parameters to rsync::get.
- Added 'uid' and 'gid' parameters to rsync::server
- Improved support for Debian
- Added 'exclude' parameter to rsync::server::module
Fixes:
- Added /usr/local/bin to path for the rsync command exec.
* 2013-01-31 0.2.0
- Added use_chroot parameter.
- Ensure rsync package is installed.
- Compatability changes for Ruby 2.0.
- Added execuser parameter to run command as specified user.
- Various typo and bug fixes.
* 2012-06-07 0.1.0
- Initial release

View File

@ -0,0 +1,8 @@
source "https://rubygems.org"
gem 'puppetlabs_spec_helper'
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', :require => false
end

View File

@ -1,9 +0,0 @@
name 'puppetlabs-rsync'
version '0.1.0'
source 'https://github.com/puppetlabs/puppetlabs-rsync'
author 'Puppet Labs'
license 'Apache License 2.0'
summary 'Puppet module to install and configure rsync'
project_page 'https://github.com/puppetlabs/puppetlabd-rsync'
dependency 'puppetlabs/xinetd', '>= 1.1.0'

View File

@ -8,13 +8,20 @@ providing defines to easily grab data via rsync.
get files via rsync
## Parameters: ##
$source - source to copy from
$path - path to copy to, defaults to $name
$user - username on remote system
$purge - if set, rsync will use '--delete'
$exlude - string to be excluded
$keyfile - ssh key used to connect to remote host
$timeout - timeout in seconds, defaults to 900
$source - source to copy from
$path - path to copy to, defaults to $name
$user - username on remote system
$purge - if set, rsync will use '--delete'
$recursive - if set, rsync will use '-r'
$links - if set, rsync will use '--links'
$hardlinks - if set, rsync will use '--hard-links'
$copylinks - if set, rsync will use '--copy-links'
$times - if set, rsycn will use '--times'
$include - string to be included
$exclude - string to be excluded
$keyfile - ssh key used to connect to remote host
$timeout - timeout in seconds, defaults to 900
$execuser - user to run the command (passed to exec)
## Actions: ##
get files via rsync
@ -29,6 +36,31 @@ get files via rsync
require => File['/foo'],
}
# Definition: rsync::put #
put files via rsync
## Parameters: ##
$source - source to copy from
$path - path to copy to, defaults to $name
$user - username on remote system
$purge - if set, rsync will use '--delete'
$exlude - string to be excluded
$keyfile - path to ssh key used to connect to remote host, defaults to /home/${user}/.ssh/id_rsa
$timeout - timeout in seconds, defaults to 900
## Actions: ##
put files via rsync
## Requires: ##
$source must be set
## Sample Usage: ##
rsync::put { '${rsyncDestHost}:/repo/foo':
user => 'user',
source => "/repo/foo/",
}
# Definition: rsync::server::module #
sets up a rsync server

View File

@ -0,0 +1,43 @@
# Debian defaults file for rsync daemon mode.
#### This file is being maintained by Puppet.
#### DO NOT EDIT!
# start rsync in daemon mode from init.d script?
# only allowed values are "true", "false", and "inetd"
# Use "inetd" if you want to start the rsyncd from inetd,
# all this does is prevent the init.d script from printing a message
# about not starting rsyncd (you still need to modify inetd's config yourself).
RSYNC_ENABLE=true
# which file should be used as the configuration file for rsync.
# This file is used instead of the default /etc/rsyncd.conf
# Warning: This option has no effect if the daemon is accessed
# using a remote shell. When using a different file for
# rsync you might want to symlink /etc/rsyncd.conf to
# that file.
# RSYNC_CONFIG_FILE=
# what extra options to give rsync --daemon?
# that excludes the --daemon; that's always done in the init.d script
# Possibilities are:
# --address=123.45.67.89 (bind to a specific IP address)
# --port=8730 (bind to specified port; default 873)
RSYNC_OPTS=''
# run rsyncd at a nice level?
# the rsync daemon can impact performance due to much I/O and CPU usage,
# so you may want to run it at a nicer priority than the default priority.
# Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''
# run rsyncd with ionice?
# "ionice" does for IO load what "nice" does for CPU load.
# As rsync is often used for backups which aren't all that time-critical,
# reducing the rsync IO priority will benefit the rest of the system.
# See the manpage for ionice for allowed options.
# -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
# the next line to activate this.
# RSYNC_IONICE='-c3'
# Don't forget to create an appropriate config file,
# else the daemon will not start.

View File

@ -26,16 +26,21 @@
#
define rsync::get (
$source,
$path = undef,
$user = undef,
$purge = undef,
$exclude = undef,
$keyfile = undef,
$timeout = '900'
$path = $name,
$user = undef,
$purge = undef,
$recursive = undef,
$links = undef,
$hardlinks = undef,
$copylinks = undef,
$times = undef,
$include = undef,
$exclude = undef,
$keyfile = undef,
$timeout = '900',
$execuser = 'root',
) {
include rsync
if $keyfile {
$Mykeyfile = $keyfile
} else {
@ -47,26 +52,52 @@ define rsync::get (
}
if $purge {
$MyPurge = '--delete'
$MyPurge = ' --delete'
}
# Not currently correct, there can be multiple --exclude arguments
if $exclude {
$MyExclude = "--exclude=${exclude}"
$MyExclude = " --exclude=${exclude}"
}
if $path {
$MyPath = $path
} else {
$MyPath = $name
# Not currently correct, there can be multiple --include arguments
if $include {
$MyInclude = " --include=${include}"
}
$rsync_options = "-a ${MyPurge} ${MyExclude} ${MyUser}${source} ${MyPath}"
if $recursive {
$MyRecursive = ' -r'
}
if $links {
$MyLinks = ' --links'
}
if $hardlinks {
$MyHardLinks = ' --hard-links'
}
if $copylinks {
$MyCopyLinks = ' --copy-links'
}
if $times {
$MyTimes = ' --times'
}
$rsync_options = "-a${MyPurge}${MyExclude}${MyInclude}${MyLinks}${MyHardLinks}${MyCopyLinks}${MyTimes}${MyRecursive} ${MyUser}${source} ${path}"
exec { "rsync ${name}":
command => "rsync -q ${rsync_options}",
path => [ '/bin', '/usr/bin' ],
path => [ '/bin', '/usr/bin', '/usr/local/bin' ],
user => $execuser,
# perform a dry-run to determine if anything needs to be updated
# this ensures that we only actually create a Puppet event if something needs to
# be updated
# TODO - it may make senes to do an actual run here (instead of a dry run)
# and relace the command with an echo statement or something to ensure
# that we only actually run rsync once
onlyif => "test `rsync --dry-run --itemize-changes ${rsync_options} | wc -l` -gt 0",
timeout => $timeout,
}
Package['rsync'] -> Exec["rsync ${name}"]
}

View File

@ -6,5 +6,5 @@ class rsync {
package { 'rsync':
ensure => installed,
}
} -> Rsync::Get<| |>
}

View File

@ -0,0 +1,76 @@
# Definition: rsync::put
#
# put files via rsync
#
# Parameters:
# $source - source to copy from
# $path - path to copy to, defaults to $name
# $user - username on remote system
# $purge - if set, rsync will use '--delete'
# $exlude - string to be excluded
# $keyfile - path to ssh key used to connect to remote host, defaults to /home/${user}/.ssh/id_rsa
# $timeout - timeout in seconds, defaults to 900
#
# Actions:
# put files via rsync
#
# Requires:
# $source must be set
#
# Sample Usage:
#
# rsync::put { '${rsyncDestHost}:/repo/foo':
# user => 'user',
# source => "/repo/foo/",
# } # rsync
#
define rsync::put (
$source,
$path = undef,
$user = undef,
$purge = undef,
$exclude = undef,
$keyfile = undef,
$timeout = '900'
) {
if $keyfile {
$Mykeyfile = $keyfile
} else {
$Mykeyfile = "/home/${user}/.ssh/id_rsa"
}
if $user {
$MyUserOpt = "-e 'ssh -i ${Mykeyfile} -l ${user}' "
$MyUser = "${user}@"
}
if $purge {
$MyPurge = '--delete'
}
if $exclude {
$MyExclude = "--exclude=${exclude}"
}
if $path {
$MyPath = $path
} else {
$MyPath = $name
}
$rsync_options = "-a ${MyPurge} ${MyExclude} ${MyUserOpt}${source} ${MyUser}${MyPath}"
exec { "rsync ${name}":
command => "rsync -q ${rsync_options}",
path => [ '/bin', '/usr/bin' ],
# perform a dry-run to determine if anything needs to be updated
# this ensures that we only actually create a Puppet event if something needs to
# be updated
# TODO - it may make senes to do an actual run here (instead of a dry run)
# and relace the command with an echo statement or something to ensure
# that we only actually run rsync once
onlyif => "test `rsync --dry-run --itemize-changes ${rsync_options} | wc -l` -gt 0",
timeout => $timeout,
}
}

View File

@ -10,12 +10,19 @@ class rsync::server(
$use_xinetd = true,
$address = '0.0.0.0',
$motd_file = 'UNSET',
$use_chroot = 'yes'
$use_chroot = 'yes',
$uid = 'nobody',
$gid = 'nobody'
) inherits rsync {
$conf_file = $::osfamily ? {
'Debian' => '/etc/rsyncd.conf',
default => '/etc/rsync.conf',
}
$rsync_fragments = '/etc/rsync.d'
if($use_xinetd) {
if $use_xinetd {
include xinetd
xinetd::service { 'rsync':
bind => $address,
@ -24,14 +31,23 @@ class rsync::server(
per_source => 'UNLIMITED',
flags => 'IPv4',
server => '/usr/bin/rsync',
server_args => '--daemon --config /etc/rsync.conf',
server_args => "--daemon --config ${conf_file}",
require => Package['rsync'],
}
} else {
service { 'rsync':
ensure => running,
enable => true,
subscribe => Exec['compile fragments'],
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
subscribe => Exec['compile fragments'],
}
if ( $::osfamily == 'Debian' ) {
file { '/etc/default/rsync':
source => 'puppet:///modules/rsync/defaults',
notify => Service['rsync'],
}
}
}
@ -45,23 +61,26 @@ class rsync::server(
ensure => directory,
}
# Template uses:
# - $use_chroot
# - $address
# - $motd_file
file { "${rsync_fragments}/header":
content => template('rsync/header.erb'),
}
file { $conf_file:
ensure => present,
} ~> Exec['compile fragments']
# perhaps this should be a script
# this allows you to only have a header and no fragments, which happens
# by default if you have an rsync::server but not an rsync::repo on a host
# which happens with cobbler systems by default
exec { 'compile fragments':
refreshonly => true,
command => "ls ${rsync_fragments}/frag-* 1>/dev/null 2>/dev/null && if [ $? -eq 0 ]; then cat ${rsync_fragments}/header ${rsync_fragments}/frag-* > /etc/rsync.conf; else cat ${rsync_fragments}/header > /etc/rsync.conf; fi; $(exit 0)",
command => "ls ${rsync_fragments}/frag-* 1>/dev/null 2>/dev/null && if [ $? -eq 0 ]; then cat ${rsync_fragments}/header ${rsync_fragments}/frag-* > ${conf_file}; else cat ${rsync_fragments}/header > ${conf_file}; fi; $(exit 0)",
subscribe => File["${rsync_fragments}/header"],
path => '/bin:/usr/bin',
path => '/bin:/usr/bin:/usr/local/bin',
}
anchor{'rsync_server_end':}
Exec ['compile fragments'] -> Anchor['rsync_server_end']
Service <| title=='xinetd' |> -> Anchor['rsync_server_end']
Service <| title=='rsync' |> -> Anchor['rsync_server_end']
}

View File

@ -40,11 +40,12 @@ define rsync::server::module (
$list = 'yes',
$uid = '0',
$gid = '0',
$incoming_chmod = 'a=r,u+w,D+x',
$outgoing_chmod = 'a=r,u+w,D+x',
$incoming_chmod = '0644',
$outgoing_chmod = '0644',
$max_connections = '0',
$lock_file = '/var/run/rsyncd.lock',
$secrets_file = undef,
$exclude = undef,
$auth_users = undef,
$hosts_allow = undef,
$hosts_deny = undef) {

View File

@ -58,4 +58,24 @@ describe 'rsync::server', :type => :class do
}
end
describe 'when overriding uid' do
let :params do
{ :uid => 'testuser' }
end
it {
should contain_file(fragment_file).with_content(/^uid\s*=\s*testuser$/)
}
end
describe 'when overriding gid' do
let :params do
{ :gid => 'testgroup' }
end
it {
should contain_file(fragment_file).with_content(/^gid\s*=\s*testgroup$/)
}
end
end

View File

@ -17,13 +17,22 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a example.com foobar',
#'onlyif' => 'test `rsync --dry-run --itemize-changes -a example.com foobar | wc -l` -gt 0',
'timeout' => '900'
'command' => 'rsync -q -a example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com foobar | wc -l` -gt 0",
'timeout' => '900',
'user' => 'root'
})
}
end
describe "when setting the execuser" do
let :params do
common_params.merge( { :execuser => 'username' } )
end
it{ should contain_exec("rsync foobar").with({ 'user' => 'username' }) }
end
describe "when setting the timeout" do
let :params do
common_params.merge( { :timeout => '200' } )
@ -41,8 +50,8 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a -e \'ssh -i /home/mr_baz/.ssh/id_rsa -l mr_baz\' mr_baz@example.com foobar'
#'onlyif' => "test `rsync --dry-run --itemize-changes -a -e \'ssh -i /home/mr_baz/.ssh/id_rsa -l mr_baz\' mr_baz@example.com foobar | wc -l` -gt 0",
'command' => 'rsync -q -a -e \'ssh -i /home/mr_baz/.ssh/id_rsa -l mr_baz\' mr_baz@example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a -e \'ssh -i /home/mr_baz/.ssh/id_rsa -l mr_baz\' mr_baz@example.com foobar | wc -l` -gt 0",
})
}
end
@ -54,8 +63,8 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a example.com foobar'
#'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com foobar | wc -l` -gt 0",
'command' => 'rsync -q -a example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com foobar | wc -l` -gt 0",
})
}
end
@ -70,8 +79,8 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a -e \'ssh -i /path/to/keyfile -l mr_baz\' mr_baz@example.com foobar'
#'onlyif' => "test `rsync --dry-run --itemize-changes -a -e \'ssh -i /path/to/keyfile -l mr_baz\' mr_baz@example.com foobar | wc -l` -gt 0",
'command' => 'rsync -q -a -e \'ssh -i /path/to/keyfile -l mr_baz\' mr_baz@example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a -e \'ssh -i /path/to/keyfile -l mr_baz\' mr_baz@example.com foobar | wc -l` -gt 0",
})
}
end
@ -83,8 +92,21 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --exclude=/path/to/exclude/ example.com foobar'
#'onlyif' => "test `rsync --dry-run --itemize-changes -a --exclude=/path/to/exclude/ example.com foobar | wc -l` -gt 0",
'command' => 'rsync -q -a --exclude=/path/to/exclude/ example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --exclude=/path/to/exclude/ example.com foobar | wc -l` -gt 0",
})
}
end
describe "when setting an include path" do
let :params do
common_params.merge({ :include => '/path/to/include/' })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --include=/path/to/include/ example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --include=/path/to/include/ example.com foobar | wc -l` -gt 0",
})
}
end
@ -96,8 +118,73 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --delete example.com foobar'
#'onlyif' => "test `rsync --dry-run --itemize-changes -a --delete example.com foobar | wc -l` -gt 0"
'command' => 'rsync -q -a --delete example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --delete example.com foobar | wc -l` -gt 0"
})
}
end
describe "when enabling recursive" do
let :params do
common_params.merge({ :recursive => true })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a -r example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a -r example.com foobar | wc -l` -gt 0"
})
}
end
describe "when enabling links" do
let :params do
common_params.merge({ :links => true })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --links example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --links example.com foobar | wc -l` -gt 0"
})
}
end
describe "when enabling hardlinks" do
let :params do
common_params.merge({ :hardlinks => true })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --hard-links example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --hard-links example.com foobar | wc -l` -gt 0"
})
}
end
describe "when enabling copylinks" do
let :params do
common_params.merge({ :copylinks => true })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --copy-links example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --copy-links example.com foobar | wc -l` -gt 0"
})
}
end
describe "when enabling times" do
let :params do
common_params.merge({ :times => true })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --times example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --times example.com foobar | wc -l` -gt 0"
})
}
end
@ -109,8 +196,8 @@ describe 'rsync::get', :type => :define do
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a example.com barfoo'
#'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com barfoo | wc -l` -gt 0"
'command' => 'rsync -q -a example.com barfoo',
'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com barfoo | wc -l` -gt 0"
})
}
end

View File

@ -0,0 +1,117 @@
require 'spec_helper'
describe 'rsync::put', :type => :define do
let :title do
'foobar'
end
let :common_params do
{
:source => 'example.com'
}
end
describe "when using default class paramaters" do
let :params do
common_params
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com foobar | wc -l` -gt 0",
'timeout' => '900'
})
}
end
describe "when setting the timeout" do
let :params do
common_params.merge( { :timeout => '200' } )
end
it {
should contain_exec("rsync foobar").with({ 'timeout' => '200' })
}
end
describe "when setting a user but not a keyfile" do
let :params do
common_params.merge({ :user => 'mr_baz' })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a -e \'ssh -i /home/mr_baz/.ssh/id_rsa -l mr_baz\' example.com mr_baz@foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a -e \'ssh -i /home/mr_baz/.ssh/id_rsa -l mr_baz\' example.com mr_baz@foobar | wc -l` -gt 0",
})
}
end
describe "when setting a keyfile but not a user" do
let :params do
common_params.merge( { :keyfile => "/path/to/keyfile" } )
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com foobar | wc -l` -gt 0",
})
}
end
describe "when setting a user and a keyfile" do
let :params do
common_params.merge({
:user => 'mr_baz',
:keyfile => '/path/to/keyfile'
})
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a -e \'ssh -i /path/to/keyfile -l mr_baz\' example.com mr_baz@foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a -e \'ssh -i /path/to/keyfile -l mr_baz\' example.com mr_baz@foobar | wc -l` -gt 0",
})
}
end
describe "when setting an exclude path" do
let :params do
common_params.merge({ :exclude => '/path/to/exclude/' })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --exclude=/path/to/exclude/ example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --exclude=/path/to/exclude/ example.com foobar | wc -l` -gt 0",
})
}
end
describe "when enabling purge" do
let :params do
common_params.merge({ :purge => true })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a --delete example.com foobar',
'onlyif' => "test `rsync --dry-run --itemize-changes -a --delete example.com foobar | wc -l` -gt 0"
})
}
end
describe "when setting a custom path" do
let :params do
common_params.merge({ :path => 'barfoo' })
end
it {
should contain_exec("rsync foobar").with({
'command' => 'rsync -q -a example.com barfoo',
'onlyif' => "test `rsync --dry-run --itemize-changes -a example.com barfoo | wc -l` -gt 0"
})
}
end
end

View File

@ -29,8 +29,8 @@ describe 'rsync::server::module', :type => :define do
it { should contain_file(fragment_file).with_content(/^list\s*=\s*yes$/) }
it { should contain_file(fragment_file).with_content(/^uid\s*=\s*0$/) }
it { should contain_file(fragment_file).with_content(/^gid\s*=\s*0$/) }
it { should contain_file(fragment_file).with_content(/^incoming chmod\s*=\s*a=r,u\+w,D\+x$/) }
it { should contain_file(fragment_file).with_content(/^outgoing chmod\s*=\s*a=r,u\+w,D\+x$/) }
it { should contain_file(fragment_file).with_content(/^incoming chmod\s*=\s*0644$/) }
it { should contain_file(fragment_file).with_content(/^outgoing chmod\s*=\s*0644$/) }
it { should contain_file(fragment_file).with_content(/^max connections\s*=\s*0$/) }
it { should_not contain_file(fragment_file).with_content(/^lock file\s*=.*$/) }
it { should_not contain_file(fragment_file).with_content(/^secrets file\s*=.*$/) }
@ -64,7 +64,7 @@ describe 'rsync::server::module', :type => :define do
let :params do
mandatory_params.merge({ k => v })
end
it { should contain_file(fragment_file).with_content(/^#{k.to_s.gsub('_', ' ')}\s*=\s*#{v.to_a.join(' ')}$/)}
it { should contain_file(fragment_file).with_content(/^#{k.to_s.gsub('_', ' ')}\s*=\s*#{Array(v).join(' ')}$/)}
end
end

View File

@ -2,11 +2,13 @@
# DO NOT EDIT
pid file = /var/run/rsyncd.pid
uid = nobody
gid = nobody
uid = <%= @uid %>
gid = <%= @gid %>
use chroot = <%= @use_chroot %>
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
address = <%= @address %>
<% if @motd_file != 'UNSET' %>motd file = <%= @motd_file %><% end %>
<% if @motd_file != 'UNSET' -%>
motd file = <%= @motd_file %>
<% end -%>

View File

@ -11,11 +11,24 @@ gid = <%= @gid %>
incoming chmod = <%= @incoming_chmod %>
outgoing chmod = <%= @outgoing_chmod %>
max connections = <%= @max_connections %>
<% if Integer(@max_connections) > 0 %>lock file = <%= @lock_file %><% end %>
<% if @comment %>comment = <%= @comment %><% end %>
<% if @secrets_file %>secrets file = <%= @secrets_file %><% end %>
<% if @auth_users %>auth users = <%= @auth_users.to_a.join(', ')%><% end %>
<% if @hosts_allow %>hosts allow = <%= @hosts_allow.to_a.join(' ')%><% end %>
<% if @hosts_deny %>hosts deny = <%= @hosts_deny.to_a.join(' ')%><% end %>
<% if Integer(@max_connections) > 0 -%>
lock file = <%= @lock_file %>
<% end -%>
<% if @comment -%>
comment = <%= @comment %>
<% end -%>
<% if @secrets_file -%>
secrets file = <%= @secrets_file %>
<% end -%>
<% if @auth_users -%>
auth users = <%= @auth_users.to_a.join(', ')%>
<% end -%>
<% if @hosts_allow -%>
hosts allow = <%= @hosts_allow.to_a.join(' ')%>
<% end -%>
<% if @hosts_deny -%>
hosts deny = <%= @hosts_deny.to_a.join(' ')%>
<% end -%>
<% if @exclude -%>
exclude = <%= @exclude.to_a.join(' ')%>
<% end -%>