Page MenuHomeGRNET

No OneTemporary

File Metadata

Created
Sun, May 17, 12:19 AM
diff --git a/app/models/host.rb b/app/models/host.rb
index 648ab65..39389dc 100644
--- a/app/models/host.rb
+++ b/app/models/host.rb
@@ -1,75 +1,75 @@
class Host < ActiveRecord::Base
establish_connection Baas::settings[:local_db]
FILE_RETENTION_DAYS = 60
JOB_RETENTION_DAYS = 180
CATALOG = 'MyCatalog'
AUTOPRUNE = 1
enum status: { draft: 0, pending: 1, config: 2, ready: 3 }
belongs_to :client, class_name: :Client, foreign_key: :name, primary_key: :name
has_many :filesets, dependent: :destroy
has_many :job_templates, dependent: :destroy
validates :file_retention, :job_retention,
:port, :password, presence: true
validates :port, numericality: true
validates :name, presence: true, uniqueness: true
validate :fqdn_format
scope :not_baculized, -> { where(baculized: false) }
before_validation :set_retention, :unset_baculized, :sanitize_name
def baculize_config
templates = job_templates.enabled.includes(:fileset, :schedule)
- result = [self] + templates.map {|x| [x, x.fileset, x.schedule] }.flatten
+ result = [self] + templates.map {|x| [x, x.fileset, x.schedule] }.flatten.compact.uniq
result.map(&:to_bacula_config_array)
end
def to_bacula_config_array
[
"Client {",
" Name = #{name}",
" Address = #{fqdn}",
" FDPort = #{port}",
" Catalog = #{CATALOG}",
" Password = \"#{password}\"",
" File Retention = #{file_retention} days",
" Job Retention = #{job_retention} days",
" AutoPrune = yes",
"}"
]
end
def auto_prune_human
AUTOPRUNE == 1 ? 'yes' : 'no'
end
private
def sanitize_name
self.name = fqdn
end
def set_retention
self.file_retention = FILE_RETENTION_DAYS
self.job_retention = JOB_RETENTION_DAYS
end
def unset_baculized
self.baculized = false if new_record?
true
end
def fqdn_format
regex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)/
unless fqdn =~ regex
self.errors.add(:fqdn)
end
end
end
diff --git a/app/models/job_template.rb b/app/models/job_template.rb
index 04a2b15..1b6995a 100644
--- a/app/models/job_template.rb
+++ b/app/models/job_template.rb
@@ -1,71 +1,75 @@
class JobTemplate < ActiveRecord::Base
establish_connection Baas::settings[:local_db]
enum job_type: { backup: 0, restore: 1, verify: 2, admin: 3 }
belongs_to :host
belongs_to :fileset
belongs_to :schedule
validates :name, :fileset_id, presence: true
validates :schedule_id, presence: true, unless: :restore?
before_save :set_job_type
scope :enabled, -> { where(enabled: true) }
# configurable
DEFAULT_OPTIONS = {
storage: :File,
pool: :Default,
messages: :Standard,
priority: 10,
:'Write Bootstrap' => '"/var/lib/bacula/%c.bsr"'
}
def to_bacula_config_array
['Job {'] +
- DEFAULT_OPTIONS.map { |k,v| " #{k.capitalize} = #{v}" } +
options_array.map { |x| " #{x}" } +
+ DEFAULT_OPTIONS.map { |k,v| " #{k.capitalize} = #{v}" } +
['}']
end
def priority
DEFAULT_OPTIONS[:priority]
end
def enabled_human
enabled? ? 'yes' : 'no'
end
def schedule_human
schedule.present? ? schedule.name : '-'
end
def save_and_create_restore_job
if save_status = save
restore_job = JobTemplate.new(host: host, job_type: :restore,
fileset: fileset, name: 'Restore_' + name)
restore_job.save
end
save_status
end
private
# Sets the default job_type as backup
def set_job_type
self.job_type = :backup if job_type.nil?
end
def options_array
- result = restore? ? ['Where = "/tmp/bacula-restores"'] : []
- result += [
+ result = [
"Name = \"#{name}\"",
"FileSet = \"#{fileset.name}\"",
"Client = \"#{host.name}\"",
- "Type = \"#{job_type.capitalize}\"",
- "Schedule = \"#{schedule.name}\""
+ "Type = \"#{job_type.capitalize}\""
]
+ if restore?
+ result += ['Where = "/tmp/bacula-restores"']
+ else
+ result += ["Schedule = \"#{schedule.name}\""]
+ end
+ result
end
end

Event Timeline