Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F461454
job_template.rb
No One
Temporary
Actions
Download 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 18, 1:13 AM
Size
2 KB
Mime Type
text/x-ruby
Expires
Tue, May 20, 1:13 AM (1 d, 5 h)
Engine
blob
Format
Raw Data
Handle
220291
Attached To
rARCHIVING archiving
job_template.rb
View Options
# JobTemplate class is a helper class that enables us to configure Bacula job
# configurations, without messing with Bacula's native models (Job).
# It has a unique:
#
# * host
# * fileset
# * schedule
class
JobTemplate
<
ActiveRecord
::
Base
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?
validates
:name
,
uniqueness
:
{
scope
:
:host
}
validates_with
NameValidator
before_save
:set_job_type
after_save
:notify_host
scope
:enabled
,
->
{
where
(
enabled
:
true
)
}
# Constructs an array where each element is a line for the Job's bacula config
#
# @return [Array]
def
to_bacula_config_array
[
'Job {'
]
+
options_array
.
map
{
|
x
|
"
#{
x
}
"
}
+
job_settings
.
map
{
|
k
,
v
|
"
#{
k
.
capitalize
}
=
#{
v
}
"
}
+
[
'}'
]
end
# Fetches the Job's priority
def
priority
job_settings
[
:priority
]
end
# Helper method for the job template's enabled status
def
enabled_human
enabled?
?
'yes'
:
'no'
end
# Helper method for the job template's schedule name
#
# @return [String] The schedule's name or nothing
def
schedule_human
schedule
.
present?
?
schedule
.
name
:
'-'
end
# Generates a name that will be used for the configuration file.
# It is the name that will be sent to Bacula through the configuration
# files.
#
# @return [String]
def
name_for_config
"
#{
host
.
name
}
#{
name
}
"
end
# Sends a hot backup request to Bacula via BaculaHandler
def
backup_now
return
false
if
not
(
enabled?
&&
baculized?
&&
backup?
)
host
.
backup_now
(
name
)
end
private
def
name_format
unless
name
=~
/^[a-zA-Z0-1\.-_ ]+$/
self
.
errors
.
add
(
:name
,
:format
)
end
end
def
notify_host
host
.
recalculate
end
# Sets the default job_type as backup
def
set_job_type
self
.
job_type
=
:backup
if
job_type
.
nil?
end
def
options_array
result
=
[
"Name =
\"
#{
name_for_config
}
\"
"
,
"Enabled =
#{
enabled_human
}
"
,
"FileSet =
\"
#{
fileset
.
name_for_config
}
\"
"
,
"Client =
\"
#{
host
.
name
}
\"
"
,
"Type =
\"
#{
job_type
.
capitalize
}
\"
"
,
"Schedule =
\"
#{
schedule
.
name_for_config
}
\"
"
]
if
client_before_run_file
.
present?
result
+=
[
"Client Run Before Job =
\"
#{
client_before_run_file
}
\"
"
]
end
if
client_after_run_file
.
present?
result
+=
[
"Client Run After Job =
\"
#{
client_after_run_file
}
\"
"
]
end
result
end
# Fetches and memoizes the general configuration settings for Jobs
#
# @see ConfigurationSetting.current_job_settings
# @return [Hash] containing the settings
def
job_settings
@job_settings
||=
ConfigurationSetting
.
current_job_settings
end
end
Event Timeline
Log In to Comment