Version information
This version is compatible with:
- Puppet Enterprise 2023.8.x, 2023.7.x, 2023.6.x, 2023.5.x, 2023.4.x, 2023.3.x, 2023.2.x, 2023.1.x, 2023.0.x, 2021.7.x, 2021.6.x, 2021.5.x, 2021.4.x, 2021.3.x, 2021.2.x, 2021.1.x, 2021.0.x
- Puppet >= 7.0.0 < 9.0.0
- , , , , ,
Start using this module
Add this module to your Puppetfile:
mod 'puppet-bacula', '8.0.0'
Learn more about managing modules with a PuppetfileDocumentation
Bacula
A puppet module for the Bacula backup system.
Supported Platforms
- OpenBSD
- FreeBSD
- Linux (Debian, Ubuntu, RedHat, Centos, Fedora, SLES)
Requirements
This module requires that exported resources have been setup (e.g. with PuppetDB). Including manifests on the Bacula client, assumes that it can export bits of data to the director to end up with fully functional configs. As such, to get the benefits of using this module, you should be using it on at least the director and client, and most likely the storage, though this might be gotten around, if one were so inclined.
Usage
To understand Bacula, the Component Overview in the Bacula documentation is a useful start to begin understanding the moving parts.
A Minimal Setup
What follows here is the bare minimum you would need to get a fully functional Bacula environment with Puppet. This setup assumes that the three components of Bacula (Director, Storage, and Client) all run on three separate nodes. If desired, there is no reason this setup can not be built on a single node, just updating the hostnames used below to all point to the same system.
Defaults
Bacula's functionality depends on connecting several components, together. Due to the number of moving pieces in this module, you will likely want to set some site defaults, and tune more specifically where desired.
As such, it is reasonable to use the following declaration in a profile used by all your nodes:
class bacula {
storage_name => 'mystorage.example.com',
director_name => 'mydirector.example.com',
}
When using the default settings from this module, some resources get provisioned. The provisioning of these default resources can be disabled with the manage_defaults
parameter.
class { 'bacula::director':
manage_defaults => false,
}
Classification
This may be on the same host, or different hosts, but the name you put here
should be the fqdn of the target system. The Director will require the
classification of bacula::director
, and the Storage node will require the
classification of bacula::storage
. All nodes will require classification
of bacula::client
, and all nodes will require the shared config by being classified bacula
.
A common way of using the module in a simple setup is using a single node that act as a director and storage daemon for all other nodes of the fleet. In such a scenario, you can create two profiles: profile::bacula_client
and profile::bacula_server
:
class profile::bacula_client (
Sensitive $password,
) {
class { 'bacula':
storage_name => 'bacula.example.com',
director_name => 'bacula.example.com',
# Other common settings, see below
}
class { 'bacula::client':
password => $password,
# File daemon specific settings, see below
}
}
class profile::bacula_server (
) {
include profile::bacula_client
class { 'bacula::director':
password => 'director-password',
# Director specific settings, see below
}
class { 'bacula::storage':
password => 'storage-password',
# File storage specific settings, see below
}
}
Upgrading from an older version
Users of a previous version of this module should refer to the wiki for upgrading instructions.
Communication Encryption (TLS Setup)
Refer to the TLS Setup page on the wiki for instructions about configuring communication encryption.
Director Setup
The director component handles coordination of backups and databasing of transactions. In its simplest form, the director can be configured with a simple declaration:
class { 'bacula::director':
storage => 'mystorage.example.com',
}
The storage
parameter here defines which storage server should be used for
all default jobs. If left empty, it will default to the $facts['fqdn']
of the
director. This is not a problem for all in one installations, but in scenarios
where directors to not have the necessary storage devices attached, default
jobs can be pointed elsewhere.
Note that if you expect an SD to be located on the Director, you will also need
to include the bacula::storage
class as follows.
By default a 'Common' fileset is created.
Storage Setup
The storage component allocates disk storage for pools that can be used for holding backup data.
class { 'bacula::storage':
director => 'mydirector.example.com',
}
You will also want a storage pool that defines the retention. You can define this in the Director catalog without exporting it, or you can use an exported resource.
bacula::director::pool { 'Corp':
volret => '14 days',
maxvolbytes => '5g',
maxvols => '200',
label => 'Corp-',
storage => 'mystorage.example.com',
}
Client Setup
The client component is run on each system that needs something backed up.
class { 'bacula::client':
director => 'mydirector.example.com',
}
To direct all jobs to a specific pool like the one defined above set the following data.
class { 'bacula::client':
default_pool => 'Corp',
}
Data Encryption (PKI Setup)
Refer to the PKI Setup section of the wiki to configure data encryption on clients.
Creating Backup Jobs
In order for clients to be able to define jobs on the director, exported
resources are used, thus there was a reliance on PuppetDB availability in the
environment. In the client manifest the bacula::job
exports a job definition
to the director. If you deploy multiple directors that use the same PuppetDB
and you don't want each director to collect every job, specify a job_tag to
group them.
bacula::job { 'obsidian_logs':
files => ['/var/log'],
}
This resource will create a new Job
entry in /etc/bacula/conf.d/job.conf
the next time the director applies it's catalog that will instruct the system
to backup the files or directories at the paths specified in the files
parameter.
If a group of jobs will contain the same files, a FileSet resource can be
used to simplify the bacula::job
resource. This can be exported from the
node (ensuring the resource title will be unique when realized) or a simple
resource specified on the director using the bacula::director::fileset
defined type as follows:
bacula::director::fileset { 'Puppet':
files => ['/etc/puppet'],
options => {'compression' => 'LZO' }
}
If you set a job_tag on your bacula::job
, make sure to also set the tag of
the bacula::director::fileset
to the same value.
Reference
Table of Contents
Classes
bacula
: Main classbacula::client
: Configure the Bacula File Daemonbacula::common
: Utility class for the File Daemonbacula::director
: Configure the Bacula Directorbacula::director::defaults
: Bacula Director default resourcesbacula::director::postgresql
: Manage Bacula Director PostgreSQL databasebacula::storage
: Configure a Bacula Storage Daemon
Defined types
bacula::director::client
: Define a Bacula Director Clientbacula::director::fileset
: Configure a Bacula Director Filesetbacula::director::job
: Configure a Bacula Director Jobbacula::director::pool
: Configure a Bacula Director Poolbacula::director::storage
: Configure a Bacula Director Storage resourcebacula::job
: Define a Bacula Jobbacula::jobdefs
: Define a Bacula Jobdefsbacula::messages
: Define a Bacula Messagesbacula::schedule
: Define a Bacula Schedulebacula::storage::device
: Configure a Bacula Storage Daemon Device
Functions
bacula::escape
: Return a quoted escaped string suitable for bacula configurationbacula::yesno2str
: Convert various representations of 'yes' and 'no' to 'yes' and 'no'.
Data types
Bacula::JobType
: The type of jobBacula::Message
: A Bacula message specificationBacula::Runscript
: A Bacula Runscript specificationBacula::Size
: A size indicationBacula::Time
: A time indicationBacula::Yesno
: A Boolean value
Classes
bacula
This class is here to hold the data about a bacula instalation. The parameters in this class are intended to be configured through hiera. Other module classes will reference the values here.
- TODO director_address is confusing, and is only used by the bconsole template; Document the use of storage_name; Document the use of director_name
Examples
include bacula
Parameters
The following parameters are available in the bacula
class:
conf_dir
bacula_user
bacula_group
homedir
rundir
director_address
director_name
storage_name
db_type
homedir_mode
monitor
device_seltype
tls_enable
tls_require
tls_certificate
tls_key
tls_verify_peer
tls_allowed_cn
tls_ca_certificate_file
tls_ca_certificate_dir
tls_dh_file
job_tag
conf_dir
Data type: String
The path to the bacula configuration directory
bacula_user
Data type: String
The posix user for bacula
bacula_group
Data type: String
The posix group for bacula
homedir
Data type: String
The bacula user's home directory path
rundir
Data type: String
The run dir for the daemons
director_address
Data type: String
The default address of the director used by bconsole
director_name
Data type: String
The default director name
storage_name
Data type: String
The default storage name
db_type
Data type: String
The database provider used by Bacula
Default value: 'pgsql'
homedir_mode
Data type: String
The bacula user's home director mode
Default value: '0770'
monitor
Data type: Bacula::Yesno
Enable the Bacula Monitor option
Default value: true
device_seltype
Data type: String
SELinux type for the device
Default value: 'bacula_store_t'
tls_enable
Data type: Optional[Bacula::Yesno]
Enable TLS support
Default value: undef
tls_require
Data type: Optional[Bacula::Yesno]
Require TLS connections
Default value: undef
tls_certificate
Data type: Optional[String]
The full path and filename of a PEM encoded TLS certificate
Default value: undef
tls_key
Data type: Optional[String]
The full path and filename of a PEM encoded TLS private key
Default value: undef
tls_verify_peer
Data type: Optional[Bacula::Yesno]
Verify peer certificate
Default value: undef
tls_allowed_cn
Data type: Array[String]
Common name attribute of allowed peer certificates
Default value: []
tls_ca_certificate_file
Data type: Optional[String]
The full path and filename specifying a PEM encoded TLS CA certificate(s)
Default value: undef
tls_ca_certificate_dir
Data type: Optional[String]
Full path to TLS CA certificate directory
Default value: undef
tls_dh_file
Data type: Optional[String]
Path to PEM encoded Diffie-Hellman parameter file
Default value: undef
job_tag
Data type: Optional[String]
A tag to add to all job resources
Default value: undef
bacula::client
This class installs and configures the File Daemon to backup a client system.
Examples
class { 'bacula::client': director_name => 'mydirector.example.com' }
Parameters
The following parameters are available in the bacula::client
class:
packages
services
default_pool
default_pool_full
default_pool_inc
default_pool_diff
port
listen_address
password
max_concurrent_jobs
director_name
autoprune
file_retention
job_retention
client
address
pki_signatures
pki_encryption
pki_keypair
pki_master_key
plugin_dir
packages
Data type: Array[String]
A list of packages to install; loaded from hiera
services
Data type: String
A list of services to operate; loaded from hiera
default_pool
Data type: String
The name of the Pool for this FD to use by default
default_pool_full
Data type: Optional[String]
The name of the Pool to use for Full jobs
default_pool_inc
Data type: Optional[String]
The name of the Pool to use for Incremental jobs
default_pool_diff
Data type: Optional[String]
The name of the Pool to use for Differential jobs
port
Data type: Integer
The listening port for the File Daemon
Default value: 9102
listen_address
Data type: Array[String[1]]
The listening IP addresses for the File Daemon By default, Bacula listen an all IPv4 only, which is equivalent to
listen_address => [
'0.0.0.0',
],
Listening on both IPv6 and IPv4 depends on your system configuration of IPv4-mapped IPv6 (RFC 3493): when enabled, the following is enough to listen on both all IPv6 and all IPv4:
listen_address => [
'::',
],
If IPv4-mapped IPv6 is not used, each address must be indicated separately:
listen_address => [
'::',
'0.0.0.0',
],
Indicating both addresses with IPv4-mapped IPv6 enabled will result in Bacula being unable to bind twice to the IPv4 address and fail to start.
Default value: []
password
Data type: String
A password to use for communication with this File Daemon
Default value: 'secret'
max_concurrent_jobs
Data type: Integer
Bacula FD option for 'Maximum Concurrent Jobs'
Default value: 2
director_name
Data type: String
The hostname of the director for this FD
Default value: $bacula::director_name
autoprune
Data type: Bacula::Yesno
Bacula FD option for 'AutoPrune'
Default value: true
file_retention
Data type: Bacula::Time
Bacula FD option for 'File Retention'
Default value: '45 days'
job_retention
Data type: Bacula::Time
Bacula FD option for 'Job Retention'
Default value: '6 months'
client
Data type: String
The name or address by which to contact this FD
Default value: $trusted['certname']
address
Data type: String
The listening address for the File Daemon
Default value: $facts['networking']['fqdn']
pki_signatures
Data type: Optional[Bacula::Yesno]
Bacula FD option for 'PKI Signatures'
Default value: undef
pki_encryption
Data type: Optional[Bacula::Yesno]
Bacula FD option for 'PKI Encryption'
Default value: undef
pki_keypair
Data type: Optional[String]
Bacula FD option for 'PKI Keypair'
Default value: undef
pki_master_key
Data type: Optional[String]
Bacula FD option for 'PKI Master Key'
Default value: undef
plugin_dir
Data type: Optional[String]
Bacula FD option for the 'Plugin Directory'
Default value: undef
bacula::common
This class configures and installs the bacula client packages and enables the service, so that bacula jobs can be run on the client including this manifest.
bacula::director
This class installs and configures the Bacula Director
- TODO director_address is only used by bconsole, and is confusing as director is likely the same
Examples
class { 'bacula::director':
storage => 'mystorage.example.com'
}
Parameters
The following parameters are available in the bacula::director
class:
messages
packages
services
manage_db
conf_dir
db_name
db_pw
db_user
db_address
db_port
director_address
director
group
homedir
job_tag
listen_address
max_concurrent_jobs
manage_defaults
password
port
rundir
storage_name
make_bacula_tables
messages
Data type: Hash[String, Bacula::Message]
Logging configuration; loaded from hiera
packages
Data type: Array[String]
A list of packages to install; loaded from hiera
services
Data type: String
A list of services to operate; loaded from hiera
manage_db
Data type: Bacula::Yesno
Whether the module should manage the director database
Default value: true
conf_dir
Data type: String
Path to bacula configuration directory
Default value: $bacula::conf_dir
db_name
Data type: String
The database name
Default value: 'bacula'
db_pw
Data type: String
The database user's password
Default value: 'notverysecret'
db_user
Data type: String
The database user
Default value: 'bacula'
db_address
Data type: Optional[String]
The database address
Default value: undef
db_port
Data type: Optional[String]
The database port
Default value: undef
director_address
Data type: String
The address of the director used by bconsole
Default value: $bacula::director_address
director
Data type: String
The name of the director
Default value: $trusted['certname']
group
Data type: String
The posix group for bacula
Default value: $bacula::bacula_group
homedir
Data type: String
The bacula director working directory
Default value: $bacula::homedir
job_tag
Data type: Optional[String]
A string to use when realizing jobs and filesets
Default value: $bacula::job_tag
listen_address
Data type: Array[String[1]]
The listening IP addresses for the director
The notes for bacula::client::listen_address
apply.
Default value: []
max_concurrent_jobs
Data type: Integer
Bacula Director option for 'Maximum Concurrent Jobs'
Default value: 20
manage_defaults
Data type: Boolean
Setup default jobdef, schedule, pool and restoration jobs
Default value: true
password
Data type: String
password to connect to the director
Default value: 'secret'
port
Data type: Integer
The listening port for the Director
Default value: 9101
rundir
Data type: String
Bacula Director option for 'Pid Directory'
Default value: $bacula::rundir
storage_name
Data type: String
The Name of the Storage daemon
Default value: $bacula::storage_name
make_bacula_tables
Data type: String
Path to the script that loads the database schema
bacula::director::defaults
Some default resources for the bacula director. These are referenced by defaults in other parts of this module, but need not be used. They are here to ensure that the simple case of deploying a director and storage on the same machine, allows clients to receive the correct configuration.
bacula::director::postgresql
Deploys a postgres database server for hosting the Bacula director database.
Parameters
The following parameters are available in the bacula::director::postgresql
class:
make_bacula_tables
Data type: String
Path to the script that loads the database schema
Default value: $bacula::director::make_bacula_tables
db_name
Data type: String
The database name
Default value: $bacula::director::db_name
db_pw
Data type: String
The database user's password
Default value: $bacula::director::db_pw
db_user
Data type: String
The database user
Default value: $bacula::director::db_user
bacula::storage
This class configures the Bacula storage daemon.
Parameters
The following parameters are available in the bacula::storage
class:
services
packages
conf_dir
device
device_mode
device_name
device_owner
device_seltype
director_name
group
homedir
listen_address
maxconcurjobs
media_type
password
port
rundir
storage
address
user
services
Data type: String
A list of services to operate; loaded from hiera
packages
Data type: Array[String]
A list of packages to install; loaded from hiera
conf_dir
Data type: String
Path to bacula configuration directory
Default value: $bacula::conf_dir
device
Data type: String
The system file name of the storage device managed by this storage daemon
Default value: '/bacula'
device_mode
Data type: Stdlib::Filemode
The posix mode for device
Default value: '0770'
device_name
Data type: String
The Name that the Director will use when asking to backup or restore to or from to this device
Default value: "${trusted['certname']}-device"
device_owner
Data type: String
The posix user owning the device directory
Default value: $bacula::bacula_user
device_seltype
Data type: String
SELinux type for the device
Default value: $bacula::device_seltype
director_name
Data type: String
Specifies the Name of the Director allowed to connect to the Storage daemon
Default value: $bacula::director_name
group
Data type: String
The posix group for bacula
Default value: $bacula::bacula_group
homedir
Data type: String
The directory in which the Storage daemon may put its status files
Default value: $bacula::homedir
listen_address
Data type: Array[String[1]]
The listening IP addresses for the storage daemon
The notes for bacula::client::listen_address
apply.
Default value: []
maxconcurjobs
Data type: Integer
maximum number of Jobs that may run concurrently
Default value: 5
media_type
Data type: String
The type of media supported by this device
Default value: 'File'
password
Data type: String
Specifies the password that must be supplied by the named Director
Default value: 'secret'
port
Data type: Integer
The listening port for the Storage Daemon
Default value: 9103
rundir
Data type: String
The directory in which the Director may put its process Id file files
Default value: $bacula::rundir
storage
Data type: String
The address to be configured on the director to communicate with this storage server
Default value: $trusted['certname']
address
Data type: String
The listening address for the Storage Daemon
Default value: $facts['networking']['fqdn']
user
Data type: String
The posix user for bacula
Default value: $bacula::bacula_user
Defined types
bacula::director::client
This define handles informing the director about a client. This class should
not be used directly, but only ever exported through the bacula::client
define. This is the director's configuration for a given client.
Examples
Taken from the bacula::client
define:
@@bacula::director::client { $client:
port => $port,
password => $password,
autoprune => $autoprune,
file_retention => $file_retention,
job_retention => $job_retention,
tag => "bacula-${director_name}",
}
Parameters
The following parameters are available in the bacula::director::client
defined type:
address
Data type: String
The address of the Bacula File server daemon
port
Data type: Variant[String,Integer]
The port of the Bacula File server daemon
password
Data type: String
The password to be used when establishing a connection with the File services
file_retention
Data type: Bacula::Time
The File Retention directive defines the length of time that Bacula will keep File records in the Catalog database after the End time of the Job corresponding to the File records
job_retention
Data type: Bacula::Time
The Job Retention directive defines the length of time that Bacula will keep Job records in the Catalog database after the Job End time
autoprune
Data type: Bacula::Yesno
If AutoPrune is set to yes, Bacula will automatically apply the File retention period and the Job retention period for the Client at the end of the Job
conf_dir
Data type: String
The path to the bacula configuration directory
Default value: $bacula::conf_dir
bacula::director::fileset
This class handles a Director's fileset.conf entry. Filesets are intended to be included on the Director catalog. Resources of this type may also be exported to be realized by the director.
Examples
bacula::director::fileset { 'Home':
files => ['/home'],
}
Parameters
The following parameters are available in the bacula::director::fileset
defined type:
files
Data type: Array[String]
The list of directories and/or files to be processed in the backup job
conf_dir
Data type: String
The bacula configuration director. Should not need adjusting
Default value: $bacula::conf_dir
director_name
Data type: String
The name of the director intended to receive this fileset
Default value: $bacula::director_name
excludes
Data type: Array[String]
A list of paths to exclude from the filest
Default value: []
options
Data type: Hash[String, Variant[String, Array[String], Bacula::Yesno]]
A hash of options to include in the fileset
Default value:
{
'signature' => 'SHA1',
'compression' => 'GZIP9',
}
bacula::director::job
This define handles the director portion of a job. This define should not be
used directly. It is intended to be used only from the bacula::job
define.
This makes it simpler for the director to realize and override the conf_dir setting, so that the client conf_dir and the director conf_dir can differ, which is useful in a multi platform environment.
Examples
from bacula::job
@@bacula::director::job { $name:
content => template($template),
tag => $real_tags,
}
Parameters
The following parameters are available in the bacula::director::job
defined type:
content
Data type: String
The full content of the job definition
conf_dir
Data type: String
Overridden at realize, should not need adjusting
Default value: $bacula::conf_dir
bacula::director::pool
This define adds a pool to the bacula director configuration in the conf.d method. This resources is intended to be used from bacula::storage as a way to export the pool resources to the director.
Examples
bacula::director::pool {
"PuppetLabsPool-Full":
volret => "2 months",
maxvolbytes => 2000000000,
maxvoljobs => 10,
maxvols => 20,
label => "Full-";
}
Parameters
The following parameters are available in the bacula::director::pool
defined type:
volret
maxvoljobs
maxvolbytes
maxvols
label
voluseduration
storage
pooltype
recycle
autoprune
purgeaction
next_pool
conf_dir
volret
Data type: Optional[String]
Bacula pool configuration option "Volume Retention"
Default value: undef
maxvoljobs
Data type: Optional[Variant[String,Integer]]
Bacula pool configuration option "Maximum Volume Jobs"
Default value: undef
maxvolbytes
Data type: Optional[Bacula::Size]
Bacula pool configuration option "Maximum Volume Bytes"
Default value: undef
maxvols
Data type: Optional[Variant[String,Integer]]
Bacula pool configuration option "Maximum Volumes"
Default value: undef
label
Data type: Optional[String]
Bacula pool configuration option "Label Format"
Default value: undef
voluseduration
Data type: Optional[String]
Bacula pool configuration option "Volume Use Duration"
Default value: undef
storage
Data type: String
Bacula pool configuration option "Storage"
Default value: $bacula::director::storage
pooltype
Data type: String
Bacula pool configuration option "Pool Type"
Default value: 'Backup'
recycle
Data type: Bacula::Yesno
Bacula pool configuration option "Recycle"
Default value: true
autoprune
Data type: Bacula::Yesno
Bacula pool configuration option "AutoPrune"
Default value: true
purgeaction
Data type: String
Bacula pool configuration option "Action On Purge"
Default value: 'Truncate'
next_pool
Data type: Optional[String]
Bacula pool configuration option "Next Pool"
Default value: undef
conf_dir
Data type: String
The path to the bacula configuration directory
Default value: $bacula::conf_dir
bacula::director::storage
This define creates a storage declaration for the director. This informs the director which storage servers are available to send client backups to.
This resource is intended to be used from bacula::storage as an exported resource, so that each storage server is available as a configuration on the director.
Parameters
The following parameters are available in the bacula::director::storage
defined type:
address
Data type: String
Bacula director configuration for Storage option 'SDAddress'
Default value: $name
port
Data type: Integer
Bacula director configuration for Storage option 'SDPort'
Default value: 9103
password
Data type: String
Bacula director configuration for Storage option 'Password'
Default value: 'secret'
device_name
Data type: String
Bacula director configuration for Storage option 'Device'
Default value: "${facts['networking']['fqdn']}-device"
media_type
Data type: String
Bacula director configuration for Storage option 'Media Type'
Default value: 'File'
maxconcurjobs
Data type: Integer
Bacula director configuration for Storage option 'Maximum Concurrent Jobs'
Default value: 1
conf_dir
Data type: String
Bacula configuration directory
Default value: $bacula::conf_dir
bacula::job
This class installs a bacula job on the director. This can be used for specific applications as well as general host backups
Examples
bacula::job { "${fqdn}-common":
fileset => "Root",
}
bacula::job { "${fqdn}-mywebapp":
files => ["/var/www/mywebapp","/etc/mywebapp"],
excludes => ["/var/www/mywebapp/downloads"],
}
Parameters
The following parameters are available in the bacula::job
defined type:
files
excludes
fileset
jobtype
template
pool
pool_full
pool_inc
pool_diff
storage
jobdef
runscript
level
accurate
reschedule_on_error
reschedule_interval
reschedule_times
messages
restoredir
sched
priority
job_tag
selection_type
selection_pattern
max_concurrent_jobs
write_bootstrap
max_full_interval
files
Data type: Array[String]
An array of files that you wish to get backed up on this job for this host. ie: ["/etc","/usr/local"]
Default value: []
excludes
Data type: Array[String]
An array of files to skip for the given job. ie: ["/usr/local/src"]
Default value: []
fileset
Data type: Optional[String]
If set to true, a fileset will be genereated based on the files and excludes paramaters specified above. If set to false, the job will attempt to use the fileset named "Common". If set to anything else, provided it's a String, that named fileset will be used. NOTE: the fileset Common or the defined fileset must be declared elsewhere for this to work. See Class::Bacula for details
Default value: undef
jobtype
Data type: Bacula::JobType
The type of job
Default value: 'Backup'
template
Data type: String
Template to use for generating the job configuration fragment
Default value: 'bacula/job.conf.epp'
pool
Data type: Optional[String]
Name of the pool to use by default for this job
Default value: undef
pool_full
Data type: Optional[String]
Name of the pool to use for Full jobs
Default value: undef
pool_inc
Data type: Optional[String]
Name of the pool to use for Incremental jobs
Default value: undef
pool_diff
Data type: Optional[String]
Name of the pool to use for Differential jobs
Default value: undef
storage
Data type: Optional[String]
Name of the storage service to use
Default value: undef
jobdef
Data type: Variant[Boolean, String]
If a JobDefs-Resource-Name is specified, all the values contained in the named JobDefs resource will be used as the defaults for the current Job
Default value: 'Default'
runscript
Data type: Array[Bacula::Runscript]
Array of hash(es) containing RunScript directives
Default value: []
level
Data type: Optional[String]
The Level directive specifies the default Job level to be run
Default value: undef
accurate
Data type: Bacula::Yesno
In accurate mode, the File daemon knowns exactly which files were present after the last backup. So it is able to handle deleted or renamed files
Default value: false
reschedule_on_error
Data type: Bacula::Yesno
boolean for enableing disabling job option "Reschedule On Error"
Default value: false
reschedule_interval
Data type: Bacula::Time
time-spec for job option "Reschedule Interval"
Default value: '1 hour'
reschedule_times
Data type: Integer
count for job option "Reschedule Times"
Default value: 10
messages
Data type: Optional[String]
containing the name of the message resource to use for this job set to false to disable this option
Default value: undef
restoredir
Data type: Stdlib::Absolutepath
containing the prefix for restore jobs
Default value: '/tmp/bacula-restores'
sched
Data type: Optional[String]
containing the name of the scheduler set to false to disable this option
Default value: undef
priority
Data type: Optional[Integer]
containing the priority number for the job set to false to disable this option
Default value: undef
job_tag
Data type: Optional[String]
that might be used for grouping of jobs. Pass this to bacula::director to only collect jobs that match this tag
Default value: undef
selection_type
Data type: Optional[String]
Determines how the migration job will go about selecting what JobIds to migrate
Default value: undef
selection_pattern
Data type: Optional[String]
Pattern to match against to filter items with selection_type
Default value: undef
max_concurrent_jobs
Data type: Integer
Maximum number of Jobs from the current Job resource that can run concurrently
Default value: 1
write_bootstrap
Data type: Optional[String]
The writebootstrap directive specifies a file name where Bacula will write a bootstrap file for each Backup job run
Default value: undef
max_full_interval
Data type: Optional[String]
The time specifies the maximum allowed age (counting from start time) of the most recent successful Full backup that is required in order to run Incremental or Differential backup jobs. f the most recent Full backup is older than this interval, Incremental and Differential backups will be upgraded to Full backups automatically.
Default value: undef
bacula::jobdefs
This define adds a jobdefs entry on the bacula director for reference by the client configurations.
Parameters
The following parameters are available in the bacula::jobdefs
defined type:
jobtype
sched
messages
priority
pool
full_backup_pool
differential_backup_pool
level
accurate
reschedule_on_error
reschedule_interval
reschedule_times
max_concurrent_jobs
write_bootstrap
max_full_interval
jobtype
Data type: Bacula::JobType
The Type directive specifies the Job type
Default value: 'Backup'
sched
Data type: String
The Schedule directive defines what schedule is to be used for the Job
Default value: 'Default'
messages
Data type: String
The Messages directive defines what Messages resource should be used for this job, and thus how and where the various messages are to be delivered
Default value: 'Standard'
priority
Data type: Integer
This directive permits you to control the order in which your jobs will be run by specifying a positive non-zero number
Default value: 10
pool
Data type: String
The Pool directive defines the pool of Volumes where your data can be backed up
Default value: 'Default'
full_backup_pool
Data type: Optional[String]
The Full Backup Pool specifies a Pool to be used for Full backups
Default value: undef
differential_backup_pool
Data type: Optional[String]
The Differential Backup Pool specifies a Pool to be used for Differential backups
Default value: undef
level
Data type: Optional[String]
The Level directive specifies the default Job level to be run
Default value: undef
accurate
Data type: Bacula::Yesno
In accurate mode, the File daemon knowns exactly which files were present after the last backup
Default value: false
reschedule_on_error
Data type: Bacula::Yesno
If this directive is enabled, and the job terminates in error, the job will be rescheduled as determined by the Reschedule Interval and Reschedule Times directives
Default value: false
reschedule_interval
Data type: Bacula::Time
If you have specified Reschedule On Error = yes and the job terminates in error, it will be rescheduled after the interval of time specified by time-specification
Default value: '1 hour'
reschedule_times
Data type: Integer
This directive specifies the maximum number of times to reschedule the job
Default value: 10
max_concurrent_jobs
Data type: Integer
Maximum number of Jobs from the current Job resource that can run concurrently
Default value: 1
write_bootstrap
Data type: Optional[String]
The writebootstrap directive specifies a file name where Bacula will write a bootstrap file for each Backup job run
Default value: undef
max_full_interval
Data type: Optional[String]
The time specifies the maximum allowed age (counting from start time) of the most recent successful Full backup that is required in order to run Incremental or Differential backup jobs. f the most recent Full backup is older than this interval, Incremental and Differential backups will be upgraded to Full backups automatically.
Default value: undef
bacula::messages
Create a Messages resource on the $daemon (director, storage or file).
Parameters
The following parameters are available in the bacula::messages
defined type:
append
catalog
console
daemon
director
mailcmd
mail
mailonerrorcmd
mailonerror
mailonsuccesscmd
mailonsuccess
mname
operatorcmd
operator
syslog
append
Data type: Optional[String]
Append the message to the filename given in the address field
Default value: undef
catalog
Data type: Optional[String]
Send the message to the Catalog database
Default value: undef
console
Data type: Optional[String]
Send the message to the Bacula console
Default value: undef
daemon
Data type: Enum['dir', 'fd', 'sd']
Daemon to add Messages resource to
Default value: 'dir'
director
Data type: Optional[String]
Send the message to the Director whose name is given in the address field
Default value: undef
mailcmd
Data type: Optional[String]
Specify exactly how to send the mail
Default value: undef
mail
Data type: Optional[String]
Send the message to the email addresses that are given as a comma separated list in the address field
Default value: undef
mailonerrorcmd
Data type: Optional[String]
Specify exactly how to send error mail
Default value: undef
mailonerror
Data type: Optional[String]
Send the error message to the email addresses that are given as a comma separated list in the address field
Default value: undef
mailonsuccesscmd
Data type: Optional[String]
Specify exactly how to send success mail
Default value: undef
mailonsuccess
Data type: Optional[String]
Send the success message to the email addresses that are given as a comma separated list in the address field
Default value: undef
mname
Data type: String
The name of the Messages resource. The name you specify here will be used to tie this Messages resource to a Job and/or to the daemon
Default value: 'Standard'
operatorcmd
Data type: Optional[String]
This resource specification is similar to the MailCommand except that it is used for Operator messages
Default value: undef
operator
Data type: Optional[String]
Send the message to the email addresses that are specified as a comma separated list in the address field
Default value: undef
syslog
Data type: Optional[String]
Send the message to the system log (syslog) using the facility specified in the address field
Default value: undef
bacula::schedule
Creates a schedule to which jobs and jobdefs can adhere.
Examples
bacula::schedule { 'Regularly':
runs => [
'Level=Incremental monday-saturday at 12:15',
'Level=Incremental monday-saturday at 0:15',
'Level=Full sunday at 0:05',
]
}
Parameters
The following parameters are available in the bacula::schedule
defined type:
runs
Data type: Array[String]
A list of Bacula Run directives
conf_dir
Data type: String
Path to bacula configuration directory
Default value: $bacula::conf_dir
bacula::storage::device
This define creates a storage device declaration. This informs the storage daemon which storage devices are available to send client backups to.
Parameters
The following parameters are available in the bacula::storage::device
defined type:
device_name
media_type
device
label_media
random_access
automatic_mount
removable_media
always_open
maxconcurjobs
conf_dir
device_mode
device_owner
device_seltype
director_name
group
device_name
Data type: String
Bacula director configuration for Device option 'Name'
Default value: $name
media_type
Data type: String
Bacula director configuration for Device option 'Media Type'
Default value: 'File'
device
Data type: String
Bacula director configuration for Device option 'Archive Device'
Default value: '/bacula'
label_media
Data type: Bacula::Yesno
Bacula director configuration for Device option 'LabelMedia'
Default value: true
random_access
Data type: Bacula::Yesno
Bacula director configuration for Device option 'Random Access'
Default value: true
automatic_mount
Data type: Bacula::Yesno
Bacula director configuration for Device option 'AutomaticMount'
Default value: true
removable_media
Data type: Bacula::Yesno
Bacula director configuration for Device option 'RemovableMedia'
Default value: false
always_open
Data type: Bacula::Yesno
Bacula director configuration for Device option 'AlwaysOpen'
Default value: false
maxconcurjobs
Data type: Integer
Bacula director configuration for Device option 'Maximum Concurrent Jobs'
Default value: 1
conf_dir
Data type: String
Path to bacula configuration directory
Default value: $bacula::conf_dir
device_mode
Data type: Stdlib::Filemode
Unix mode of the Archive Device directory
Default value: '0770'
device_owner
Data type: String
Owner of the Archive Device directory
Default value: $bacula::bacula_user
device_seltype
Data type: String
SELinux type for the device
Default value: $bacula::device_seltype
director_name
Data type: String
Name of the Director allowed to connect to the Storage daemon
Default value: $bacula::director_name
group
Data type: String
The posix group for bacula
Default value: $bacula::bacula_group
Functions
bacula::escape
Type: Ruby 4.x API
Return a quoted escaped string suitable for bacula configuration
Examples
bacula::escape('sed -i "" -e s|a|b| /tmp/tmp.U6BF0NIS') #=> "\"sed -i \\\"\\\" -e s|a|b| /tmp/tmp.U6BF0NIS\""
bacula::escape(String $value)
Return a quoted escaped string suitable for bacula configuration
Returns: String
The escaped string
Examples
bacula::escape('sed -i "" -e s|a|b| /tmp/tmp.U6BF0NIS') #=> "\"sed -i \\\"\\\" -e s|a|b| /tmp/tmp.U6BF0NIS\""
value
Data type: String
The string to escape
bacula::yesno2str
Type: Ruby 4.x API
Convert various representations of 'yes' and 'no' to 'yes' and 'no'.
Examples
bacula::yesno2str(true) #=> 'yes'
bacula::yesno2str('true') #=> 'yes'
bacula::yesno2str('yes') #=> 'yes'
bacula::yesno2str(false) #=> 'no'
bacula::yesno2str('false') #=> 'no'
bacula::yesno2str('no') #=> 'no'
bacula::yesno2str(Variant[Boolean, Enum["yes", "true", "no", "false"]] $value)
Convert various representations of 'yes' and 'no' to 'yes' and 'no'.
Returns: String
Either 'yes' or 'no'
Examples
bacula::yesno2str(true) #=> 'yes'
bacula::yesno2str('true') #=> 'yes'
bacula::yesno2str('yes') #=> 'yes'
bacula::yesno2str(false) #=> 'no'
bacula::yesno2str('false') #=> 'no'
bacula::yesno2str('no') #=> 'no'
value
Data type: Variant[Boolean, Enum["yes", "true", "no", "false"]]
A boolean value
Data types
Bacula::JobType
The type of job
Alias of Pattern[/^Backup/, /^Restore/, /^Admin/, /^Verify/, /^Copy/, /^Migrate/]
Bacula::Message
A Bacula message specification
Alias of
Struct[{
mname => String,
append => Optional[String],
catalog => Optional[String],
console => Optional[String],
daemon => Optional[String],
director => Optional[String],
mail => Optional[String],
mailcmd => Optional[String],
mailonsuccess => Optional[String],
mailonsuccesscmd => Optional[String],
mailonerror => Optional[String],
mailonerrorcmd => Optional[String],
operator => Optional[String],
operatorcmd => Optional[String],
syslog => Optional[String],
}]
Bacula::Runscript
A Bacula Runscript specification
Alias of
Struct[{
runs_when => Optional[Enum[
'Before',
'After',
'Always',
'AfterVSS',
'Never',
]],
fail_job_on_error => Optional[Bacula::Yesno],
runs_on_success => Optional[Bacula::Yesno],
runs_on_failure => Optional[Bacula::Yesno],
runs_on_client => Optional[Bacula::Yesno],
command => String,
}]
Bacula::Size
A size indication
Examples
12
"7MB"
"3 GB"
Alias of
Variant[Integer, Pattern[
/(?i:\A\d+\s*[mg]b?\Z)/,
]]
Bacula::Time
A time indication
Examples
"12"
"12 hours 7 seconds"
"8d 2h 12m"
Alias of Pattern[/^\d+$/, /^\d+\s+(s|sec|seconds?|mins?|minutes?|h|hours?|d|days?|w|weeks?|m|months?|q|quarters?|y|years?)(\s+\d+\s+(s|sec|seconds?|mins?|minutes?|h|hours?|d|days?|w|weeks?|m|months?|q|quarters?|y|years?))*$/]
Bacula::Yesno
A Boolean value
Alias of
Variant[Boolean, Enum[
'yes',
'no',
'true', # lint:ignore:quoted_booleans
'false', # lint:ignore:quoted_booleans
]]
Changelog
All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module.
v8.0.0 (2024-07-17)
Breaking changes:
Implemented enhancements:
- Add RedHat 9 support #202 (Valantin)
- Add CentOS 9 support #201 (Valantin)
- Add ubuntu 22.04 support #199 (Valantin)
- Add Debian 12 support #197 (Valantin)
- puppetlabs/postgresql: Allow 10.x #196 (zilchms)
Merged pull requests:
v7.0.0 (2023-07-01)
Breaking changes:
- Drop Puppet 6 support #182 (bastelfreak)
Implemented enhancements:
Merged pull requests:
v6.0.0 (2022-10-06)
Breaking changes:
- Allow to listen on multiple IP addresses #174 (smortex)
- Drop support for Puppet 5 (EOL) #173 (smortex)
Implemented enhancements:
- Allow up-to-date dependencies #177 (smortex)
- Add support for up-to-date OSes #169 (smortex)
- Allow the latest version of dependencies #167 (smortex)
- Add support for "Mail on success" / "Mail on error" #160 (smortex)
Fixed bugs:
Closed issues:
Merged pull requests:
- Update module documentation #176 (smortex)
- Transfer the module to Voxpupuli #172 (smortex)
- Drop support of OSes which have reached EOL #168 (smortex)
5.8.0 (2020-08-29)
Implemented enhancements:
Fixed bugs:
Merged pull requests:
5.7.0 (2020-05-02)
Fixed bugs:
5.6.0 (2019-12-28)
Implemented enhancements:
- Make it easier to set $make_bacula_tables #146 (fraenki)
- Use the configured DH parameters with all services #143 (smortex)
- Minor README fixes #142 (smortex)
- No more lookup #141 (smortex)
- "write bootstrap" & "full/diff backup pool" #139 (tmanninger)
Fixed bugs:
Closed issues:
- future maintenance and collaboration #136
5.5.1 (2019-02-27)
Implemented enhancements:
- Switch to Bacula 9 on FreeBSD #133 (smortex)
- Added option to not include the director defaults #132 (tcassaert)
- Switch ERB to EPP templates, improve parameters validation #128 (smortex)
- Improve $packages data-types consistency #126 (smortex)
- Normalize logging accross services #123 (smortex)
- minor improvements to make some params more forgiving #120 (jflorian)
Fixed bugs:
Closed issues:
- Virtual resource #101
Merged pull requests:
- Update supported dependencies versions #130 (smortex)
- Switch to Hiera 5 #129 (smortex)
- Modernize and fix style #127 (smortex)
- Remove unused template #125 (smortex)
- Use ensure_packages to simpify packages management #122 (smortex)
5.5.0 (2019-02-14)
Switch to Bacula 9 on FreeBSD
2018-05-26 5.4.0
Switch to more strict data types
2018-05-26 5.3.1
Improve Debian support. Use the correct group (tape) for the bacula-sd configuration file on Debian.
2018-05-13 5.3.0
Revamp TLS handling and Improve class/define parameter data types. See the github wiki for details.
2017-10-22 5.2.0
Introduce PKI support for encrypting and signing backups with a self-signed cert. See the README for details.
2017-10-04 5.1.1
Summary
Syntax fix for newer Puppet.
2017-07-24 5.1.0
Summary
This update contains many small fixes, and clean up. Thanks to the several people who sent in PRs for this work and filed issues.
Features
- Encourage hiera for class params in documentation
- Create bacula::storage::device define for greater flexibility
- Add support for Max Concurrent Jobs tuning
- Use trusted facts for node name references
Bugfixes
- Refactor ssl variable references
- Relocate default client pool and package data to hiera
- Fix use pool name when job or client request pool_{full,inc, diff} by name
- Fix job_tag reference
- Improve classification documentation in the README
- Fix template name template reference fixes #87
- Fix missing variable references fixes #95
- Change director's client address reference to use the node address, not name
- Clean up old variable references and comments
2017-04-16 5.0.0
Summary
This update contains a data overhaul removing the params class entirely, some
testing changes and a couple small features. Please see the Upgrading
section in the README.
Features
- Allow for multiple directors
- Move to data in modules entirely dropping params class
Testing
- Drop older versions of puppet and ruby from test matrix
- Test all primary classes with improved platform coverage
- Lint ruby code for rubocop compliance
2017-01-18 4.1.0
Summary
Testing updates, bug fix, and more usage of hiera.
Bugfixes
- Only include an Append in messages when its been requested
Testing
- Drop puppet 4.2 from testing to allow data_provider from heira
- Include newer Puppet versions in testing
Features
- Allow the director messages to be configurable using hiera
2017-01-17 4.0.1
Summary
This release contains small bugfixes and a couple feature tweaks.
Bugfixes
- Fix SELinux setype on file type storage devices
- Fix parameter pass through for client options
Features
- Sort the jobs by name in config to be reflected in bconsole
- Disable diff for secret-containing files, keeping puppetdb clean
2016-07-29 4.0.0
Summary
This release contains backwards incompatible changes.
Features
- Native Puppet4 module data and type validation
- Drop support for puppet 3.x
- database make-tables script has been removed in favor of packaged scripts
2016-04-04 3.0.1
Summary
This release contains bugfixes and testing updates for puppet4.
Testing
- Add puppet4 for the test matrix
- Include ipaddress fact in testing
Features
- Allow user specified device mode on bacula::storage
2015-10-20 Release 3.0.0
Summary
This release contains breaking changes to how director and storage daemon hostnames are referred to in the params class. Users will need to remove any instances of the deprecated variables and replace them. See the README.
Features
- Clean up template whitespace
- Relocate templates to match daemon namespace context
- Clean up documentation and add notes about upgrading
- Default pools 'Inc' and 'Full' are no longer created. Users are now required to define the required pools explicitly.
- Modify client pool parameters to expose desired pool information
- Add documentation on creating pools per above
2015-10-18 Release 2.0.2
Summary
This release contains improvements to IP address handling to better support IPv6 for all components of the bacula system.
Features
- Add function to validate and determine the inet family of an IP
- Centralize address handling in single template and instrument
2015-10-17 Release 2.0.1
Summary
This release contains bugfixes.
Bugfixes
- Use the correct client address variable for the director resource
2015-10-15 Release 2.0.0
Summary
Features
This release drops a dependency on the ploperations/puppet module by implementing a parameter 'ssl_dir' allowing/requiring the user to specify the directory to retrieve the Puppet SSL data.
* This Changelog was automatically generated by github_changelog_generator
Dependencies
- puppetlabs/concat (>= 1.0.0 < 10.0.0)
- puppetlabs/stdlib (>= 4.25.1 < 10.0.0)
- puppetlabs/postgresql (>= 6.4.0 < 11.0.0)
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS Copyright 2014 Puppet Labs Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.