jtyr.bacula_director

bacula_director

Ansible role which helps to install and configure Bacula Director.

The configuration of the role is done in such way that it should not be necessary to change the role for any kind of configuration. All can be done either by changing role parameters or by declaring completely new configuration as a variable. That makes this role absolutely universal. See the examples below for more details.

Please report any issues or send PR.

Examples

---

# Example of how to install Bacula on a single host
- name: Bacula all-in-one
  hosts: bacula-all
  vars:
    # Run client on the same host like the Bacula Director
    my_client: localhost.localdomain
    my_bacula_director_clients:
      - host: "{{ my_client }}"
        password: bacula
        file_retention: 30 days
        jobdefs: Default
    # Client
    bacula_client_config_filedaemon_options_name: "{{ my_client }}-fd"
    # Director
    bacula_director_config_schedule:
      - Schedule:
        - Name = Daily
        - Run = Full sun at 23:10
        - Run = Incremental mon-sat at 23:10
    bacula_director_config_fileset:
      - FileSet:
        - Name = Home
        - Include:
          - File = /home
        - Exclude:
          - File = /home/nobody
    bacula_director_config_jobdefs:
      - JobDefs:
        - Name = Default
        - Type = Backup
        - Level = Incremental
        - FileSet = Home
        - Messages = Standard
        - Pool = File
        - Storage = File
        - Schedule = Daily
    bacula_director_config_job:
      - template:
          - Job:
            - Name = Job-{[{ item['jobdefs'] }]}-{[{ item['host'] }]}
            - Client = {[{ item['host'] }]}-fd
            - JobDefs = {[{ item['jobdefs'] }]}
        items: "{{ my_bacula_director_clients }}"
    bacula_director_config_client:
      - template:
          - Client:
            - Name = {[{ item['host'] }]}-fd
            - Address = {[{ item['host'] }]}
            - FD Port = 9102
            - Catalog = Default
            - Password = {[{ item['password'] }]}
            - File Retention = {[{ item['file_retention'] }]}
            - Job Retention = 3 months
            - AutoPrune = yes
        items: "{{ my_bacula_director_clients }}"
  roles:
    - role: postgresql
      tags: postgresql
    - role: bacula_console
      tags: bacula_console
    - role: bacula_storage
      tags: bacula_storage
    - role: bacula_client
      tags: bacula_client
    - role: bacula_director
      tags: bacula_director

# The following plays are used for multi-node Bacula installation
- name: Bacula DB
  hosts: bacula-db
  vars:
    # Listen on all network interfaces
    postgresql_config_listen_addresses: 0.0.0.0
    # Configure access
    postgresql_hba_config__custom:
      # Allow access for the postgres user from the Bacula director host
      - type: host
        database: all
        user: postgres
        address: 192.168.50.201/32
        method: md5
      # Allow access for the bacula user to the bacula DB from the Bacula director host
      - type: host
        database: bacula
        user: bacula
        address: 192.168.50.201/32
        method: md5
  roles:
    - postgresql

- name: Bacula Console
  hosts: bacula-console
  vars:
    bacula_console_config_director_options_address: 192.168.50.201
  roles:
    - bacula_console

- name: Bacula Storage
  hosts: bacula-storage
  roles:
    - bacula_storage

- name: Bacula Client
  hosts: bacula-client
  roles:
    - bacula_client

- name: Bacula Director
  hosts: bacula-director
  vars:
    # Client runs on a different host now
    my_client: 192.168.50.204
    my_bacula_director_clients:
      - host: "{{ my_client }}"
        password: bacula
        file_retention: 30 days
        jobdefs: Default
    # Director
    bacula_director_config_storage_options_address: 192.168.50.202
    bacula_director_config_catalog_options_db_address: 192.168.50.205
    bacula_director_config_schedule:
      - Schedule:
        - Name = Daily
        - Run = Full sun at 23:10
        - Run = Incremental mon-sat at 23:10
    bacula_director_config_fileset:
      - FileSet:
        - Name = Home
        - Include:
          - File = /home
        - Exclude:
          - File = /home/nobody
    bacula_director_config_jobdefs:
      - JobDefs:
        - Name = Default
        - Type = Backup
        - Level = Incremental
        - FileSet = Home
        - Messages = Standard
        - Pool = File
        - Storage = File
        - Schedule = Daily
    bacula_director_config_job:
      - template:
          - Job:
            - Name = Job-{[{ item['jobdefs'] }]}-{[{ item['host'] }]}
            - Client = {[{ item['host'] }]}-fd
            - JobDefs = {[{ item['jobdefs'] }]}
        items: "{{ my_bacula_director_clients }}"
    bacula_director_config_client:
      - template:
          - Client:
            - Name = {[{ item['host'] }]}-fd
            - Address = {[{ item['host'] }]}
            - FD Port = 9102
            - Catalog = Default
            - Password = {[{ item['password'] }]}
            - File Retention = {[{ item['file_retention'] }]}
            - Job Retention = 3 months
            - AutoPrune = yes
        items: "{{ my_bacula_director_clients }}"
  roles:
    - bacula_director

Role variables

Next to the normal role variables (e.g. package name), there are mainly variables describing resources of the Director service configuration file. Those are of two main types:

  • Resource that can occure multiple times but usually occures only once (e.g. Catalogue {})
  • Resource that can occure multiple times and is usually used multiple times (e.g. Job {})

The full list of variables used by the role is as follows:

# Service name
bacula_director_service: bacula-dir

# Package to be installed (exact version can be specified here)
bacula_director_pkg: "{{
  'bacula-director-postgresql'
    if bacula_director_db_engine == 'pgsql'
    else
  'bacula-director-mysql' }}"

# Path the to the Director config file
bacula_director_config_file_path: /etc/bacula/bacula-dir.conf


# Default values of Director resource options
bacula_director_config_director_options_name: bacula-dir
bacula_director_config_director_options_port: 9101
bacula_director_config_director_options_query_file: /usr/libexec/bacula/query.sql
bacula_director_config_director_options_working_directory: /var/spool/bacula
bacula_director_config_director_options_pid_directory: /var/run
bacula_director_config_director_options_max_concurrent_jobs: 1
bacula_director_config_director_options_password: bacula
bacula_director_config_director_options_messages: Standard

# Default Director resource options
bacula_director_config_director_options__default:
  - Name = {{ bacula_director_config_director_options_name }}
  - DIR Port = {{ bacula_director_config_director_options_port }}
  - Query File = {{ bacula_director_config_director_options_query_file }}
  - Working Directory = {{ bacula_director_config_director_options_working_directory }}
  - Pid Directory = {{ bacula_director_config_director_options_pid_directory }}
  - Maximum Concurrent Jobs = {{ bacula_director_config_director_options_max_concurrent_jobs }}
  - Password = {{ bacula_director_config_director_options_password }}
  - Messages = {{ bacula_director_config_director_options_messages }}

# Custom Director resource options
bacula_director_config_director_options__custom: []

# First Director resource
bacula_director_config_director__default:
  - Director: "{{
      bacula_director_config_director_options__default +
      bacula_director_config_director_options__custom }}"

# Variable for additional Director resources (e.g. for monitor)
bacula_director_config_director__custom: []

# Final Director resource
bacula_director_config_director: "{{
  bacula_director_config_director__default +
  bacula_director_config_director__custom }}"


# Default DB engine (can be 'pgsql' or 'mysql')
bacula_director_db_engine: pgsql

# Packages required for the PostgreSQL DB creation
bacula_director_db_pgsql_pkgs:
    - python-psycopg2
    - postgresql

# Packages required for the MySQL DB creation
bacula_director_db_mysql_pkgs:
    - MySQL-python
    - mysql

# Default PostgreSQL DB port
bacula_director_db_port_pgsql_default: 5432

# Default MySQL DB port
bacula_director_db_port_mysql_default: 3306

# Default path to the MySQL config file
bacula_director_db_mysql_config: /etc/my.cfg

# Host from which the user can login to the MySQL server (all hosts by default)
bacula_director_db_mysql_user_host: "%"

# User used to create DB and user
bacula_director_db_login_user: "{{
  'postgres'
    if bacula_director_db_engine == 'pgsql'
    else
  'root' }}"

# Password used to create DB and user
bacula_director_db_login_password: "{{
  'postgres'
     if bacula_director_db_engine == 'pgsql'
     else
  None }}"

# DB user priviledges
bacula_director_db_user_priv: "{{
  'ALL/unsavedfiles:ALL/basefiles:ALL/jobmedia:ALL/file:ALL/job:ALL/media:ALL/client:ALL/pool:ALL/fileset:ALL/path:ALL/filename:ALL/counters:ALL/version:ALL/cdimages:ALL/mediatype:ALL/storage:ALL/device:ALL/status:ALL/location:ALL/locationlog:ALL/log:ALL/jobhisto:ALL/pathhierarchy:ALL/pathvisibility:SELECT,UPDATE/filename_filenameid_seq:SELECT,UPDATE/path_pathid_seq:SELECT,UPDATE/fileset_filesetid_seq:SELECT,UPDATE/pool_poolid_seq:SELECT,UPDATE/client_clientid_seq:SELECT,UPDATE/media_mediaid_seq:SELECT,UPDATE/job_jobid_seq:SELECT,UPDATE/file_fileid_seq:SELECT,UPDATE/jobmedia_jobmediaid_seq:SELECT,UPDATE/basefiles_baseid_seq:SELECT,UPDATE/storage_storageid_seq:SELECT,UPDATE/mediatype_mediatypeid_seq:SELECT,UPDATE/device_deviceid_seq:SELECT,UPDATE/location_locationid_seq:SELECT,UPDATE/locationlog_loclogid_seq:SELECT,UPDATE/log_logid_seq:ALL'
    if bacula_director_db_engine == 'pgsql'
    else
  (bacula_director_config_catalog_options_db_name + '.*:ALL') }}"


# Values of the default Catalog options
bacula_director_config_catalog_options_name: Default
bacula_director_config_catalog_options_db_name: bacula
bacula_director_config_catalog_options_db_user: bacula
bacula_director_config_catalog_options_db_password: bacula
bacula_director_config_catalog_options_db_address: localhost
bacula_director_config_catalog_options_db_port: "{{
  bacula_director_db_port_pgsql_default
    if bacula_director_db_engine == 'pgsql'
    else
  bacula_director_db_port_mysql_default }}"

# Default Catalog resource options for the first Catalog definition
bacula_director_config_catalog_options__default:
  - Name = {{ bacula_director_config_catalog_options_name }}
  - DB Name = {{ bacula_director_config_catalog_options_db_name }}
  - User = {{ bacula_director_config_catalog_options_db_user }}
  - Password = {{ bacula_director_config_catalog_options_db_password }}
  - DB Address = {{ bacula_director_config_catalog_options_db_address }}
  - DB Port = {{ bacula_director_config_catalog_options_db_port }}

# Custom Catalog resource options for the first Catalog definition
bacula_director_config_catalog_options__custom: []

# Default Catalog resource options
bacula_director_config_catalog__default:
  - Catalog: "{{
      bacula_director_config_catalog_options__default +
      bacula_director_config_catalog_options__custom }}"

# Custom Catalog resource options
bacula_director_config_catalog__custom: []

# Final Catalog resource
bacula_director_config_catalog: "{{
  bacula_director_config_catalog__default +
  bacula_director_config_catalog__custom }}"


# Values of the default Storage options
bacula_director_config_storage_options_name: File
bacula_director_config_storage_options_address: "{{ ansible_fqdn }}"
bacula_director_config_storage_options_sdport: 9103
bacula_director_config_storage_options_password: bacula
bacula_director_config_storage_options_device: FileStorage
bacula_director_config_storage_options_media_type: File

# Default Storage resource options for the first Storage definition
bacula_director_config_storage_options__default:
  - Name = {{ bacula_director_config_storage_options_name }}
  - Address = {{ bacula_director_config_storage_options_address }}
  - SD Port = {{ bacula_director_config_storage_options_sdport }}
  - Password = {{ bacula_director_config_storage_options_password }}
  - Device = {{ bacula_director_config_storage_options_device }}
  - Media Type = {{ bacula_director_config_storage_options_media_type }}

# Custom Storage resource options for the first Storage definition
bacula_director_config_storage_options__custom: []

# Default Storage resource options
bacula_director_config_storage__default:
  - Storage: "{{
      bacula_director_config_storage_options__default +
      bacula_director_config_storage_options__custom }}"

# Custom Storage resource options
bacula_director_config_storage__custom: []

# Final Storage resource
bacula_director_config_storage: "{{
  bacula_director_config_storage__default +
  bacula_director_config_storage__custom }}"


# Values of the default Pool options
bacula_director_config_pool_options_name: File
bacula_director_config_pool_options_pool_type: Backup
bacula_director_config_pool_options_recycle: "yes"
bacula_director_config_pool_options_autoprune: "yes"
bacula_director_config_pool_options_volume_retention: 365 days

# Default Pool resource options for the first Pool definition
bacula_director_config_pool_options__default:
  - Name = {{ bacula_director_config_pool_options_name }}
  - Pool Type = {{ bacula_director_config_pool_options_pool_type }}
  - Recycle = {{ bacula_director_config_pool_options_recycle }}
  - AutoPrune = {{ bacula_director_config_pool_options_autoprune }}
  - Volume Retention = {{ bacula_director_config_pool_options_volume_retention }}

# Custom Pool resource options for the first Pool definition
bacula_director_config_pool_options__custom: []

# Default Pool resource options
bacula_director_config_pool__default:
  - Pool: "{{
      bacula_director_config_pool_options__default +
      bacula_director_config_pool_options__custom }}"

# Custom Pool resource options
bacula_director_config_pool__custom: []

# Final Pool resource
bacula_director_config_pool: "{{
  bacula_director_config_pool__default +
  bacula_director_config_pool__custom }}"


# Schedule resource
bacula_director_config_schedule: []
# Example of a Schedule resource:
#bacula_director_config_schedule:
#  - Schedule:
#    - Name = Daily
#    - Run = Full sun at 23:10
#    - Run = Incremental mon-sat at 23:10


# FileSet resource
bacula_director_config_fileset: []
# Example of a FileSet resource:
#bacula_director_config_fileset:
#  - FileSet:
#    - Name = Home
#    - Include:
#      - File = /home
#    - Exclude:
#      - File = /home/nobody


# Default values of Messages resource options
bacula_director_config_messages_options_name: Standard
bacula_director_config_messages_options_console: all, !skipped, !saved
bacula_director_config_messages_options_append: /var/log/bacula/bacula.log = all, !skipped
bacula_director_config_messages_options_catalog: all

# Default Messages resource options
bacula_director_config_messages_options__default:
  - Name = {{ bacula_director_config_messages_options_name }}
  - Console = {{ bacula_director_config_messages_options_console }}
  - Append = {{ bacula_director_config_messages_options_append }}
  - Catalog = {{ bacula_director_config_messages_options_catalog }}

# Custom Messages resource options
bacula_director_config_messages_options__custom: []

# First Messages resource
bacula_director_config_messages__default:
  - Messages: "{{
      bacula_director_config_messages_options__default +
      bacula_director_config_messages_options__custom }}"

# Variable for additional Messages resources
bacula_director_config_messages__custom: []

# Final Messages resource
bacula_director_config_messages: "{{
  bacula_director_config_messages__default +
  bacula_director_config_messages__custom }}"


# JobDefs resource
bacula_director_config_jobdefs: []
# Example of a JobDefs resource:
#bacula_director_config_jobdefs:
#  - JobDefs:
#    - Name = Default
#    - Type = Backup
#    - Level = Incremental
#    - FileSet = Home
#    - Messages = Standard
#    - Pool = File
#    - Storage = File
#    - Schedule = Daily

# Job resource
bacula_director_config_job: []
# Example of a Job resource:
#bacula_director_config_job:
#  - template:
#      - Job:
#        - Name = TestJob
#        - JobDefs = Default
#        - Client = {[{ item }]}-fd
#    items:
#      - localhost.localdomain


# Client resource
bacula_director_config_client: []
# Example of a Client resource:
#bacula_director_config_client:
#  - template:
#      - Client:
#        - Name = {[{ item['host'] }]}-fd
#        - Address = {[{ item['host'] }]}
#        - FD Port = 9102
#        - Catalog = Default
#        - Password = {[{ item['password'] }]}
#        - File Retention = {[{ item['file_retention'] }]}
#        - Job Retention = 3 months
#        - AutoPrune = yes
#    items:
#      - host: localhost.localdomain
#        password: bacula
#        file_retention: 30 days


# Custom resources (e.g. Counter, include subfiles, ...)
bacula_director_config_custom: []


# Path to the sysconfig file
bacula_director_sysconfig_file: /etc/sysconfig/bacula-dir

# Default values of the default sysconfig options
bacula_director_sysconfig_user: "bacula"
bacula_director_sysconfig_group: "bacula"

# Default sysconfig options
bacula_director_sysconfig__default:
  DIR_USER: "{{ bacula_director_sysconfig_user }}"
  DIR_GROUP: "{{ bacula_director_sysconfig_group }}"

# Custom sysconfig options
bacula_director_sysconfig__custom: {}

# Final sysconfig
bacula_director_sysconfig: "{{
  bacula_director_sysconfig__default.update(bacula_director_sysconfig__custom) }}{{
  bacula_director_sysconfig__default }}"

Dependencies

License

MIT

Author

Jiri Tyr

About

Role which installs the Bacula Director

Install
ansible-galaxy install jtyr.bacula_director
GitHub repository
License
mit
Downloads
111
Owner
DevOps Engineer