Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F1966669
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, May 17, 12:19 AM
Size
4 KB
Mime Type
text/x-diff
Expires
Tue, May 19, 12:19 AM (6 h, 58 m)
Engine
blob
Format
Raw Data
Handle
382891
Attached To
rARCHIVING archiving
View Options
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
Log In to Comment