Skip to content
Open
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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
.DS_Store
pkg/
pkg/
.idea/
*~
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Module for provisioning Samba

Tested on Ubuntu 12.04, CentOS 6.3, patches to support other operating systems are welcome.
Tested on Ubuntu 12.04, CentOS 6.3, SLES 11 SP2 patches to support other operating systems are welcome.

## Installation

Expand Down Expand Up @@ -34,7 +34,7 @@ Tweak and add the following to your site manifest:
guest_account => "guest",
browsable => false,
create_mask => 0777,
force_create_mask => 0777,
force_create_mode => 0777,
directory_mask => 0777,
force_directory_mask => 0777,
force_group => 'group',
Expand Down Expand Up @@ -86,3 +86,4 @@ Most configuration options are optional.
This module is released under the MIT license:

* [http://www.opensource.org/licenses/MIT](http://www.opensource.org/licenses/MIT)

4 changes: 2 additions & 2 deletions manifests/init.pp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
class samba {
class samba inherits samba::params {
include samba::server

if samba::server::security == 'ads' {
include samba::server::ads
}
}
}
28 changes: 28 additions & 0 deletions manifests/params.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Class: samba::params
#
# This class defines default parameters used by the main module class samba
# Operating Systems differences in names and paths are addressed here
#
# == Variables
#
# Refer to samba class for the variables defined here.
#
# == Usage
#
# This class is not intended to be used directly.
# It may be imported or inherited by other classes
#
class samba::params {
$services = $::osfamily ? {
/(?i:RedHat)/ => 'smb',
/(?i:Debian)/ => 'smbd',
/(?i:Gentoo)/ => 'samba',
/(?i:Suse)/ => ['smb','nmb'],
default => 'smbd',
}

$samba_config_dir = '/etc/samba'
$samba_config_file = '/etc/samba/smb.conf'
}


50 changes: 31 additions & 19 deletions manifests/server.pp
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,60 @@
$security = '',
$server_string = '',
$unix_password_sync = '',
$workgroup = '') {
$workgroup = '',
$bind_interfaces_only = true,
$realm = '',
$machine_password_timeout = '',
$unix_extensions = '') inherits samba {

include samba::server::install
include samba::server::config
include samba::server::service

$incl = '/etc/samba/smb.conf'
$context = "/files/etc/samba/smb.conf"
$target = "target[. = 'global']"
$context = "/files${samba_config_file}"
$target = "target[. = 'global']"

augeas { 'global-section':
incl => $incl,
incl => "${samba_config_file}",
lens => 'Samba.lns',
context => $context,
changes => "set ${target} global",
require => Class['samba::server::config'],
notify => Class['samba::server::service']
}


set_samba_option {
'interfaces': value => $interfaces;
'bind interfaces only': value => 'yes';
'security': value => $security;
'server string': value => $server_string;
'unix password sync': value => $unix_password_sync;
'workgroup': value => $workgroup;
'interfaces': value => $interfaces;
'bind interfaces only': value => $bind_interfaces_only, bool => true;
'security': value => $security;
'server string': value => $server_string;
'unix password sync': value => $unix_password_sync;
'workgroup': value => $workgroup;
'realm': value => $realm;
'machine password timeout': value => $machine_password_timeout;
'unix extensions': value => $unix_extensions, bool => true;
}
}

define set_samba_option ( $value = '', $signal = 'samba::server::service' ) {
$incl = $samba::server::incl
define set_samba_option ( $value = '', $signal = 'samba::server::service', $bool = false ) {
$context = $samba::server::context
$target = $samba::server::target

$changes = $value ? {
default => "set \"${target}/$name\" \"$value\"",
'' => "rm ${target}/$name",
if ($bool) {
$changes = $value ? {
true => "set \"${target}/$name\" yes",
false => "set \"${target}/$name\" no",
default => "rm ${target}/$name"
}
}
else {
$changes = $value ? {
default => "set \"${target}/$name\" \"$value\"",
'' => "rm ${target}/$name",
}
}

augeas { "samba-$name":
incl => $incl,
incl => "${samba_config_file}",
lens => 'Samba.lns',
context => $context,
changes => $changes,
Expand Down
10 changes: 5 additions & 5 deletions manifests/server/config.pp
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
class samba::server::config {
class samba::server::config inherits samba {

file { '/etc/samba':
file { "${samba_config_dir}":
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
}

file { '/etc/samba/smb.conf':
file { "${samba_config_file}":
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
mode => '0444',
require => [File['/etc/samba'], Class['samba::server::install']],
notify => Class['samba::server::service']
}

}

2 changes: 1 addition & 1 deletion manifests/server/install.pp
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
package { 'samba':
ensure => installed
}
}
}
23 changes: 3 additions & 20 deletions manifests/server/service.pp
Original file line number Diff line number Diff line change
@@ -1,27 +1,10 @@
class samba::server::service ($ensure = running, $enable = true) {
case $::osfamily {
Redhat: { $service_name = 'smb' }
Debian: { $service_name = 'smbd' }
Gentoo: { $service_name = 'samba' }

# Currently Gentoo has $::osfamily = "Linux". This should change in
# Factor 1.7.0 <http://projects.puppetlabs.com/issues/17029>, so
# adding workaround.
Linux: {
case $::operatingsystem {
Gentoo: { $service_name = 'samba' }
default: { fail("$::operatingsystem is not supported by this module.") }
}
}
default: { fail("$::osfamily is not supported by this module.") }
}

service { "$service_name" :
class samba::server::service ($ensure = running, $enable = true) inherits samba {
service { $services:
ensure => $ensure,
hasstatus => true,
hasrestart => true,
enable => $enable,
require => Class['samba::server::config']
}

}

60 changes: 39 additions & 21 deletions manifests/server/share.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
$copy = '',
$create_mask = '',
$directory_mask = '',
$force_create_mask = '',
$force_directory_mask = '',
$force_create_mode = '',
$force_directory_mode = '',
$force_group = '',
$force_user = '',
$guest_account = '',
Expand All @@ -15,13 +15,16 @@
$read_only = '',
$public = '',
$writable = '',
$printable = '') {
$incl = $samba::server::incl
$context = $samba::server::context
$target = "target[. = '${name}']"
$printable = '',
$wide_links = '',
$follow_symlinks = '',
$valid_users = '') {
$config_file = $samba::params::samba_config_file
$target = "target[. = '${name}']"
$context = $samba::server::context

augeas { "${name}-section":
incl => $incl,
incl => "${config_file}",
lens => 'Samba.lns',
context => $context,
changes => $ensure ? {
Expand All @@ -35,17 +38,17 @@
if $ensure == 'present' {
$changes = [
$browsable ? {
true => "set \"${target}/browsable\" yes",
false => "set \"${target}/browsable\" no",
default => "rm \"${target}/browsable\"",
true => "set \"${target}/browsable\" yes",
false => "set \"${target}/browsable\" no",
default => "rm \"${target}/browsable\"",
},
$comment ? {
default => "set \"${target}/comment\" '${comment}'",
'' => "rm \"${target}/comment\"",
default => "set \"${target}/comment\" '${comment}'",
'' => "rm \"${target}/comment\"",
},
$copy ? {
default => "set \"${target}/copy\" '${copy}'",
'' => "rm \"${target}/copy\"",
default => "set \"${target}/copy\" '${copy}'",
'' => "rm \"${target}/copy\"",
},
$create_mask ? {
default => "set \"${target}/create mask\" '${create_mask}'",
Expand All @@ -55,13 +58,13 @@
default => "set \"${target}/directory mask\" '${directory_mask}'",
'' => "rm \"${target}/directory mask\"",
},
$force_create_mask ? {
default => "set \"${target}/force create mask\" '${force_create_mask}'",
'' => "rm \"${target}/force create mask\"",
$force_create_mode ? {
default => "set \"${target}/force create mode\" '${force_create_mode}'",
'' => "rm \"${target}/force create mode\"",
},
$force_directory_mask ? {
default => "set \"${target}/force directory mask\" '${force_directory_mask}'",
'' => "rm \"${target}/force directory mask\"",
$force_directory_mode ? {
default => "set \"${target}/force directory mode\" '${force_directory_mode}'",
'' => "rm \"${target}/force directory mode\"",
},
$force_group ? {
default => "set \"${target}/force group\" '${force_group}'",
Expand Down Expand Up @@ -109,10 +112,24 @@
false => "set \"${target}/printable\" no",
default => "rm \"${target}/printable\"",
},
$wide_links ? {
true => "set \"${target}/wide links\" yes",
false => "set \"${target}/wide links\" no",
default => "rm \"${target}/wide links\"",
},
$follow_symlinks ? {
true => "set \"${target}/follow symlinks\" yes",
false => "set \"${target}/follow symlinks\" no",
default => "rm \"${target}/follow symlinks\"",
},
$valid_users ? {
default => "set \"${target}/valid users\" '${valid_users}'",
'' => "rm \"${target}/valid users\"",
},
]

augeas { "${name}-changes":
incl => $incl,
incl => "${config_file}",
lens => 'Samba.lns',
context => $context,
changes => $changes,
Expand All @@ -121,3 +138,4 @@
}
}
}

1 change: 1 addition & 0 deletions manifests/server/winbind.pp
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
}

}

1 change: 1 addition & 0 deletions templates/configure_active_directory.erb
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,4 @@ rm -f $KRB5CCNAME &> /dev/null || :
fi

[ "$success" = "true" ] && exit 0 || exit 1

1 change: 1 addition & 0 deletions templates/verify_active_directory.erb
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,4 @@ fi
[[ $success == "false" ]] && exit 1

exit 0