A puppet module for the Bacula backup system.
- OpenBSD
- FreeBSD
- Linux (Debian, Ubuntu, RedHat, Centos, Fedora, SLES)
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.
To understand Bacula, the Component Overview in the Bacula documentation is a useful start to begin understanding the moving parts.
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.
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 set the following hiera data that will allow many of the classes in this module to use those defaults sanely.
bacula::storage_name: 'mystorage.example.com'
bacula::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 following parameter.
bacula::director::manage_defaults: false
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
.
Users should prefer setting hiera data to set class parameter values where possible. A couple calls in this module rely on hiera data present to avoid scoping issues associated with defined types and default values.
Users of a previous version of this module should refer to the wiki for upgrading instructions.
Refer to the TLS Setup page on the wiki for instructions about configuring communication encryption.
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 $::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.
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',
}
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.
bacula::client::default_pool: 'Corp'
Refer to the PKI Setup section of the wiki to configure data encryption on clients.
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.
Defines a Bacula FileSet resource. Parameters are:
files
: string or array of files to backup. BaculaFile
directive.excludes
: string or array of files to exclude from a backup. Defaults to''
. BaculaExclude
directive.options
: hash of options. Defaults to{'signature' => 'MD5', 'compression' => 'GZIP'}
. BaculaOptions
directive.
Define a Bacula Job resource resource which can create new
bacula::director::fileset
resources if needed. Parameters are:
files
: array of files to backup as part ofbacula::director::fileset[$name]
Defaults to[]
.excludes
: array of files to exclude inbacula::director::fileset[$name]
Defaults to[]
.jobtype
: one ofBackup
(default),Restore
,Admin
,Verify
,Copy
orMigrate
. Defaults toBackup
. BaculaType
directive.fileset
: determines whether to use theCommon
fileset (false
), define a newbacula::director::fileset[$name]
(true
) or use a previously definedbacula::director::fileset
resource (any other string value). Defaults totrue
. BaculaFileSet
directive.template
: template to use for the fragment. Defaults tobacula/job.conf.erb
.pool
: name of thebacula::director::pool
to use. Defaults tobacula::client::default_pool
. BaculaPool
directive.pool_full
: name of the pool to be used for 'Full' jobs. Defaults tobacula::client::default_pool_full
. BaculaFull Backup Pool
directive.pool_inc
: name of the pool to be used for 'Incremental' jobs. Defaults tobacula::client::default_pool_inc
. BaculaIncremental Backup Pool
directive.pool_diff
: name of the pool to be used for 'Incremental' jobs. Defaults tobacula::client::default_pool_diff
. BaculaDifferential Backup Pool
directive.jobdef
: name of thebacula::jobdef
to use. Defaults toDefault
. BaculaJobDefs
directive.level
: default job level to run the job as. BaculaLevel
directive.accurate
: whether to enable accurate mode. NB, can be memory intensive on the client. Defaults to 'no'. Bacula 'Accurate' directive.messages
: the name of the message resource to use for this job. Defaults tofalse
which disables this directive. BaculaMessages
directive. To ensure compatibility with existing installations, the BaculaMessages
directive is set toStandard
whenJobtype
isRestore
and themessages
parameter isfalse
.restoredir
: the prefix for restore jobs. Defaults to/tmp/bacula-restores
. BaculaWhere
directive.sched
: the name of the scheduler resource to use for this job. Defaults tofalse
which disables this directive. BaculaSchedule
directive.priority
: the priority of the job. Defaults tofalse
which disables this directive. BaculaPriority
directive.selection_type
: determines how a copy/migration job will go about selecting what JobIds to migrateselection_pattern
: gives you fine control over exactly what JobIds are selected for a copy/migration job.
See also bacula::jobdefs
.
Define a Bacula JobDefs resource resource. Parameters are:
jobtype
: one ofBackup
,Restore
,Admin
,Verify
,Copy
orMigrate
. Defaults toBackup
. BaculaType
directive.sched
: name of thebacula::schedule
to use. Defaults toDefault
. BaculaSchedule
directive.messages
: which messages resource to deliver to. Defaults toStandard
. BaculaMessages
directive.priority
: priority of the job. Defaults to10
. BaculaPriority
directive.pool
: name of thebacula::director::pool
to use. Defaults toDefault
. BaculaPool
directive.level
: default job level for jobs using this JobDefs. BaculaLevel
directive.accurate
: whether to enable accurate mode. NB, can be memory intensive on the client. Defaults to 'no'. Bacula 'Accurate' directive.reschedule_on_error
: Enable rescheduling of failed jobs. Default: false. BaculaReschedule On Error
directive.reschedule_interval
: The time between retries for failed jobs. BaculaReschedule Interval
directive.reschedule_times
: The number of retries for failed jobs. BaculaReschedule Times
directive.
Define a Bacula Messages resource. Parameters are:
mname
: name of theMessages
resource. Defaults toStandard
. BaculaName
directive.daemon
: Defaults todir
.director
: BaculaDirector
directive. Note this is not just the name of a director, but director string as found in the documentation for Messages resource under the director option. The message type must be included with the proper formatting.append
: BaculaAppend
directive.Catalog
: BaculaCatalog
directive.syslog
: BaculaSyslog
directive.Console
: BaculaConsole
directive.mail
: BaculaMail
directive.Operator
: BaculaOperator
directive.mailcmd
: BaculaMail Command
directive.operatorcmd
: BaculaOperator Command
directive.
Define a Bacula Schedule resource. Parameter is:
runs
: define when a job is run. BaculaRun
directive.
Define a Bacula Pool resource. Parameters are:
pooltype
: Defaults toBackup
. BaculaPool Type
directive.recycle
BaculaRecycle
directive.autoprune
: Defaults toYes
. BaculaAutoPrune
directive.volret
: BaculaVolume Retention
directive.maxvols
: BaculaMaximum Volumes
directive.maxvoljobs
: BaculaMaximum Volume Jobs
directive.maxvolbytes
: BaculaMaximum Volume Bytes
directive.purgeaction
: BaculaAction On Purge
directive. Defaults toTruncate
.label
: BaculaLabel Format
directive.voluseduration
: BaculaVolume Use Duration
directive.storage
: name of theStorage
resource backing the pool. Defaults to$bacula::storage_name
. BaculaStorage
directive.next_pool
: specifies that data from aCopy
orMigrate
job should go to the provided pool