foreman_expire_hosts 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +28 -2
- data/.rubocop_todo.yml +10 -47
- data/README.md +1 -0
- data/app/controllers/concerns/foreman_expire_hosts/host_controller_extensions.rb +11 -13
- data/app/helpers/concerns/foreman_expire_hosts/audits_helper_extensions.rb +2 -2
- data/app/helpers/concerns/foreman_expire_hosts/hosts_helper_extensions.rb +8 -11
- data/app/mailers/expire_hosts_mailer.rb +72 -20
- data/app/models/concerns/foreman_expire_hosts/host_ext.rb +3 -3
- data/app/models/host_status/expiration_status.rb +1 -1
- data/app/models/setting/expire_hosts.rb +2 -2
- data/app/services/foreman_expire_hosts/action/base.rb +57 -0
- data/app/services/foreman_expire_hosts/action/delete_expired_hosts.rb +23 -0
- data/app/services/foreman_expire_hosts/action/stop_expired_hosts.rb +37 -0
- data/app/services/foreman_expire_hosts/expiry_edit_authorizer.rb +21 -0
- data/app/services/foreman_expire_hosts/notification/base.rb +71 -0
- data/app/services/foreman_expire_hosts/notification/deleted_hosts.rb +15 -0
- data/app/services/foreman_expire_hosts/notification/expiry_warning.rb +26 -0
- data/app/services/foreman_expire_hosts/notification/failed_deleted_hosts.rb +15 -0
- data/app/services/foreman_expire_hosts/notification/failed_stopped_hosts.rb +15 -0
- data/app/services/foreman_expire_hosts/notification/stopped_hosts.rb +26 -0
- data/app/services/foreman_expire_hosts/safe_destroy.rb +23 -0
- data/app/services/foreman_expire_hosts/ui_notifications/hosts/base.rb +68 -0
- data/app/services/foreman_expire_hosts/ui_notifications/hosts/expiry_warning.rb +28 -0
- data/app/services/foreman_expire_hosts/ui_notifications/hosts/stopped_host.rb +11 -0
- data/app/views/expire_hosts_mailer/expiry_warning_notification.html.erb +4 -1
- data/app/views/expire_hosts_mailer/stopped_hosts_notification.html.erb +4 -1
- data/db/seeds.d/80_expire_hosts_ui_notification.rb +30 -0
- data/foreman_expire_hosts.gemspec +2 -2
- data/lib/expire_hosts_notifications.rb +7 -104
- data/lib/foreman_expire_hosts/engine.rb +14 -8
- data/lib/foreman_expire_hosts/version.rb +1 -1
- data/lib/tasks/expired_hosts.rake +7 -5
- data/test/factories/foreman_expire_hosts_factories.rb +1 -1
- data/test/functional/concerns/hosts_controller_extensions_test.rb +8 -6
- data/test/lib/expire_hosts_notifications_test.rb +128 -32
- data/test/test_plugin_helper.rb +8 -3
- data/test/unit/concerns/host_extensions_test.rb +17 -17
- data/test/unit/expire_hosts_mailer_test.rb +47 -27
- data/test/unit/expiry_edit_authorizer_test.rb +55 -0
- data/test/unit/host_status/expiration_status_test.rb +1 -1
- data/test/unit/safe_destroy_test.rb +26 -0
- metadata +30 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93ce6b56c3992acaf75ce33279400688b6feb3c6
|
4
|
+
data.tar.gz: c5ebb3c23813c35e438c1e636aaa0f89c265035a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c96161b39033fa298be9570693b7f216e8745cd7f615f54055119dcd63c7e2f0c8123e1a40f334bad43f4819233bd8e4c3636daef9c00168ca69bb4986d0044
|
7
|
+
data.tar.gz: 17c238e649d88559d2e7708ae0a35b31604d7a201df5721b4ff231c6fe1d4bfc8cac21170a6e2b63b27685eb633b3958a9931f6c9b4489f81bf8ac0aaa697680
|
data/.rubocop.yml
CHANGED
@@ -22,7 +22,7 @@ Rails/ActionFilter:
|
|
22
22
|
Metrics/MethodLength:
|
23
23
|
Max: 40
|
24
24
|
|
25
|
-
|
25
|
+
Naming/AccessorMethodName:
|
26
26
|
Enabled: false
|
27
27
|
|
28
28
|
Style/RedundantSelf:
|
@@ -31,7 +31,7 @@ Style/RedundantSelf:
|
|
31
31
|
Metrics/ClassLength:
|
32
32
|
Max: 500
|
33
33
|
|
34
|
-
|
34
|
+
Naming/FileName:
|
35
35
|
Exclude:
|
36
36
|
- 'db/seeds.d/*'
|
37
37
|
|
@@ -52,3 +52,29 @@ Style/EachWithObject:
|
|
52
52
|
|
53
53
|
Metrics/ParameterLists:
|
54
54
|
Enabled: false
|
55
|
+
|
56
|
+
Rails/HttpPositionalArguments:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Style/SymbolArray:
|
60
|
+
Enabled: false
|
61
|
+
|
62
|
+
Style/FormatString:
|
63
|
+
Enabled: false
|
64
|
+
|
65
|
+
Style/FormatStringToken:
|
66
|
+
Enabled: false
|
67
|
+
|
68
|
+
Style/HashSyntax:
|
69
|
+
Enabled: false
|
70
|
+
|
71
|
+
Rails/HasManyOrHasOneDependent:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
Style/CommentedKeyword:
|
75
|
+
Enabled: false
|
76
|
+
|
77
|
+
|
78
|
+
# May be enabled for Foreman >= 1.16
|
79
|
+
Rails/ApplicationRecord:
|
80
|
+
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
@@ -1,26 +1,11 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2017-08-01 16:36:14 +0200 using RuboCop version 0.49.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 4
|
10
|
-
# Cop supports --auto-correct.
|
11
|
-
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
12
|
-
Lint/UnusedBlockArgument:
|
13
|
-
Exclude:
|
14
|
-
- 'lib/expire_hosts_notifications.rb'
|
15
|
-
- 'lib/foreman_expire_hosts/engine.rb'
|
16
|
-
|
17
|
-
# Offense count: 1
|
18
|
-
# Cop supports --auto-correct.
|
19
|
-
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
|
20
|
-
Lint/UnusedMethodArgument:
|
21
|
-
Exclude:
|
22
|
-
- 'app/models/host_status/expiration_status.rb'
|
23
|
-
|
24
9
|
# Offense count: 1
|
25
10
|
Lint/UselessAssignment:
|
26
11
|
Exclude:
|
@@ -30,12 +15,19 @@ Lint/UselessAssignment:
|
|
30
15
|
Metrics/AbcSize:
|
31
16
|
Max: 51
|
32
17
|
|
18
|
+
# Offense count: 4
|
19
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
20
|
+
Metrics/BlockLength:
|
21
|
+
Max: 35
|
22
|
+
Exclude:
|
23
|
+
- 'test/**/*.rb'
|
24
|
+
|
33
25
|
# Offense count: 3
|
34
26
|
Metrics/CyclomaticComplexity:
|
35
27
|
Max: 11
|
36
28
|
|
37
|
-
# Offense count:
|
38
|
-
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
29
|
+
# Offense count: 89
|
30
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
39
31
|
# URISchemes: http, https
|
40
32
|
Metrics/LineLength:
|
41
33
|
Max: 362
|
@@ -53,32 +45,3 @@ Metrics/PerceivedComplexity:
|
|
53
45
|
Rails/OutputSafety:
|
54
46
|
Exclude:
|
55
47
|
- 'app/helpers/concerns/foreman_expire_hosts/audits_helper_extensions.rb'
|
56
|
-
|
57
|
-
# Offense count: 4
|
58
|
-
# Cop supports --auto-correct.
|
59
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
60
|
-
# SupportedStyles: empty_lines, no_empty_lines
|
61
|
-
Style/EmptyLinesAroundClassBody:
|
62
|
-
Exclude:
|
63
|
-
- 'app/mailers/expire_hosts_mailer.rb'
|
64
|
-
- 'app/models/setting/expire_hosts.rb'
|
65
|
-
- 'lib/expire_hosts_notifications.rb'
|
66
|
-
|
67
|
-
# Offense count: 105
|
68
|
-
# Cop supports --auto-correct.
|
69
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
|
70
|
-
# SupportedStyles: ruby19, ruby19_no_mixed_keys, hash_rockets
|
71
|
-
Style/HashSyntax:
|
72
|
-
Enabled: false
|
73
|
-
|
74
|
-
# Offense count: 12
|
75
|
-
# Cop supports --auto-correct.
|
76
|
-
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
|
77
|
-
# SupportedStyles: space, no_space, compact
|
78
|
-
Style/SpaceInsideHashLiteralBraces:
|
79
|
-
Exclude:
|
80
|
-
- 'app/controllers/concerns/foreman_expire_hosts/host_controller_extensions.rb'
|
81
|
-
- 'app/helpers/concerns/foreman_expire_hosts/hosts_helper_extensions.rb'
|
82
|
-
- 'lib/expire_hosts_notifications.rb'
|
83
|
-
- 'lib/foreman_expire_hosts/engine.rb'
|
84
|
-
- 'test/functional/concerns/hosts_controller_extensions_test.rb'
|
data/README.md
CHANGED
@@ -15,6 +15,7 @@ This plugin will send two warning notifications before host expiry (see Settings
|
|
15
15
|
| >= 1.11 | ~> 2.0 |
|
16
16
|
| >= 1.13 | ~> 2.1 |
|
17
17
|
| >= 1.15 | ~> 3.0 |
|
18
|
+
| >= 1.16 | ~> 4.0 |
|
18
19
|
|
19
20
|
# Screenshots
|
20
21
|

|
@@ -1,16 +1,14 @@
|
|
1
1
|
module ForemanExpireHosts
|
2
2
|
module HostControllerExtensions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
alias_method :find_multiple_with_expire_hosts, :find_multiple
|
3
|
+
def self.prepended(base)
|
4
|
+
base.class_eval do
|
5
|
+
before_filter :validate_multiple_expiration, :only => :update_multiple_expiration
|
6
|
+
before_filter :find_multiple_with_expire_hosts, :only => [:select_multiple_expiration, :update_multiple_expiration]
|
7
|
+
alias_method :find_multiple_with_expire_hosts, :find_multiple
|
8
|
+
end
|
10
9
|
end
|
11
10
|
|
12
|
-
def select_multiple_expiration
|
13
|
-
end
|
11
|
+
def select_multiple_expiration; end
|
14
12
|
|
15
13
|
def update_multiple_expiration
|
16
14
|
expiration_date = params[:host][:expired_on]
|
@@ -22,10 +20,10 @@ module ForemanExpireHosts
|
|
22
20
|
begin
|
23
21
|
host.expired_on = expiration_date
|
24
22
|
host.save!
|
25
|
-
rescue => error
|
23
|
+
rescue StandardError => error
|
26
24
|
failed_hosts[host.name] = error
|
27
25
|
message = if expiration_date.present?
|
28
|
-
_('Failed to set expiration date for %{host} to %{expiration_date}.') % {:host => host, :expiration_date => l(expiration_date)}
|
26
|
+
_('Failed to set expiration date for %{host} to %{expiration_date}.') % { :host => host, :expiration_date => l(expiration_date) }
|
29
27
|
else
|
30
28
|
_('Failed to clear expiration date for %s.') % host
|
31
29
|
end
|
@@ -62,12 +60,12 @@ module ForemanExpireHosts
|
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
65
|
-
def
|
63
|
+
def action_permission
|
66
64
|
case params[:action]
|
67
65
|
when 'select_multiple_expiration', 'update_multiple_expiration'
|
68
66
|
:edit
|
69
67
|
else
|
70
|
-
|
68
|
+
super
|
71
69
|
end
|
72
70
|
end
|
73
71
|
end
|
@@ -3,12 +3,12 @@ module ForemanExpireHosts
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
def destroyed_expired_host_audit_comment_in_list(audit)
|
6
|
-
return unless audit.auditable_type.to_s == 'Host' && audit.action == 'destroy' &&
|
6
|
+
return unless audit.auditable_type.to_s == 'Host' && audit.action == 'destroy' && audit.comment.present?
|
7
7
|
"<div style='color: #737373;font-size: 14px'>Comment: #{audit.comment}</div>".html_safe
|
8
8
|
end
|
9
9
|
|
10
10
|
def destroyed_expired_host_audit_comment_in_show(audit)
|
11
|
-
return unless audit.auditable_type.to_s == 'Host' && audit.action == 'destroy' &&
|
11
|
+
return unless audit.auditable_type.to_s == 'Host' && audit.action == 'destroy' && audit.comment.present?
|
12
12
|
"<tr><td>Comment</td><td>#{audit.comment}</td></tr>".html_safe
|
13
13
|
end
|
14
14
|
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
module ForemanExpireHosts
|
2
2
|
module HostsHelperExtensions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def multiple_actions_with_expire_hosts
|
10
|
-
return multiple_actions_without_expire_hosts unless authorized_for(:controller => :hosts, :action => :edit)
|
11
|
-
multiple_actions_without_expire_hosts + [[_('Change Expiration'), select_multiple_expiration_hosts_path]]
|
3
|
+
def multiple_actions
|
4
|
+
actions = super
|
5
|
+
if authorized_for(:controller => :hosts, :action => :edit)
|
6
|
+
actions << [_('Change Expiration'), select_multiple_expiration_hosts_path]
|
7
|
+
end
|
8
|
+
actions
|
12
9
|
end
|
13
10
|
|
14
11
|
def host_expiry_warning_message(host)
|
@@ -16,11 +13,11 @@ module ForemanExpireHosts
|
|
16
13
|
if host.expired_past_grace_period?
|
17
14
|
message = _('This host has expired %s ago and needs to be deleted manually.') % time_ago_in_words(host.expired_on)
|
18
15
|
elsif host.expired?
|
19
|
-
message = _('This host has expired %{time_ago} ago and will be deleted on %{delete_date}.') % {:delete_date => l(host.expiration_grace_period_end_date), :time_ago => time_ago_in_words(host.expired_on)}
|
16
|
+
message = _('This host has expired %{time_ago} ago and will be deleted on %{delete_date}.') % { :delete_date => l(host.expiration_grace_period_end_date), :time_ago => time_ago_in_words(host.expired_on) }
|
20
17
|
elsif host.expires_today?
|
21
18
|
message = _('This host will expire today.')
|
22
19
|
elsif host.pending_expiration?
|
23
|
-
message = _('This host will expire in %{distance_of_time} (on %{expire_date}).') % {:expire_date => l(host.expired_on), :distance_of_time => future_time_in_words(host.expired_on)}
|
20
|
+
message = _('This host will expire in %{distance_of_time} (on %{expire_date}).') % { :expire_date => l(host.expired_on), :distance_of_time => future_time_in_words(host.expired_on) }
|
24
21
|
end
|
25
22
|
message
|
26
23
|
end
|
@@ -1,37 +1,89 @@
|
|
1
1
|
class ExpireHostsMailer < ApplicationMailer
|
2
|
-
|
3
2
|
default :content_type => 'text/html', :from => Setting[:email_reply_address] || 'noreply@your-foreman.com'
|
4
3
|
|
5
|
-
def deleted_hosts_notification(
|
6
|
-
|
7
|
-
|
4
|
+
def deleted_hosts_notification(recipient, hosts)
|
5
|
+
build_mail(
|
6
|
+
recipient: recipient,
|
7
|
+
subject: N_('Deleted expired hosts in Foreman'),
|
8
|
+
hosts: hosts
|
9
|
+
)
|
8
10
|
end
|
9
11
|
|
10
|
-
def failed_to_delete_hosts_notification(
|
11
|
-
|
12
|
-
|
12
|
+
def failed_to_delete_hosts_notification(recipient, hosts)
|
13
|
+
build_mail(
|
14
|
+
recipient: recipient,
|
15
|
+
subject: N_('Failed to delete expired hosts in Foreman'),
|
16
|
+
hosts: hosts
|
17
|
+
)
|
13
18
|
end
|
14
19
|
|
15
|
-
def stopped_hosts_notification(
|
16
|
-
@hosts = hosts
|
20
|
+
def stopped_hosts_notification(recipient, delete_date, hosts)
|
17
21
|
@delete_date = delete_date
|
18
|
-
|
19
|
-
|
20
|
-
|
22
|
+
build_mail(
|
23
|
+
recipient: recipient,
|
24
|
+
subject: N_('Stopped expired hosts in Foreman'),
|
25
|
+
hosts: hosts
|
26
|
+
)
|
21
27
|
end
|
22
28
|
|
23
|
-
def failed_to_stop_hosts_notification(
|
29
|
+
def failed_to_stop_hosts_notification(recipient, hosts)
|
30
|
+
build_mail(
|
31
|
+
recipient: recipient,
|
32
|
+
subject: N_('Failed to stop expired hosts in Foreman'),
|
33
|
+
hosts: hosts
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def expiry_warning_notification(recipient, expiry_date, hosts)
|
38
|
+
@expiry_date = expiry_date
|
39
|
+
build_mail(
|
40
|
+
recipient: recipient,
|
41
|
+
subject: N_('Expiring hosts in foreman'),
|
42
|
+
hosts: hosts
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def build_mail(opts = {})
|
49
|
+
recipient = opts[:recipient]
|
50
|
+
subject = opts[:subject]
|
51
|
+
hosts = opts[:hosts]
|
52
|
+
user = user_for_recipient(recipient)
|
24
53
|
@hosts = hosts
|
25
|
-
|
26
|
-
|
54
|
+
@authorized_for_expiry_date_change = ForemanExpireHosts::ExpiryEditAuthorizer.new(
|
55
|
+
:user => user,
|
56
|
+
:hosts => hosts
|
57
|
+
).authorized?
|
58
|
+
set_locale_for(user) do
|
59
|
+
mail(
|
60
|
+
:to => recipient_mail(recipient),
|
61
|
+
:subject => _(subject),
|
62
|
+
:importance => 'High'
|
63
|
+
) do |format|
|
64
|
+
format.html { render :layout => 'application_mailer' }
|
65
|
+
end
|
27
66
|
end
|
28
67
|
end
|
29
68
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
69
|
+
def user_for_recipient(recipient)
|
70
|
+
case recipient
|
71
|
+
when Array
|
72
|
+
User.anonymous_admin
|
73
|
+
when User
|
74
|
+
recipient
|
75
|
+
else
|
76
|
+
raise Foreman::Exception.new(N_('Cannot map recipient %s to user'), recipient.inspect)
|
35
77
|
end
|
36
78
|
end
|
79
|
+
|
80
|
+
def recipient_mail(recipient)
|
81
|
+
return recipient if recipient.is_a?(Array)
|
82
|
+
return recipient.mail if recipient.mail.present?
|
83
|
+
admin_email
|
84
|
+
end
|
85
|
+
|
86
|
+
def admin_email
|
87
|
+
Setting[:administrator]
|
88
|
+
end
|
37
89
|
end
|
@@ -17,7 +17,7 @@ module ForemanExpireHosts
|
|
17
17
|
scope :expiring_today, -> { expiring.with_expire_date(Date.today) }
|
18
18
|
scope :expired_past_grace_period, -> { expiring.where('expired_on <= ?', Date.today - Setting[:days_to_delete_after_host_expiration].to_i) }
|
19
19
|
|
20
|
-
scoped_search :on => :expired_on, :complete_value =>
|
20
|
+
scoped_search :on => :expired_on, :complete_value => true, :rename => :expires, :only_explicit => true
|
21
21
|
end
|
22
22
|
|
23
23
|
def validate_expired_on
|
@@ -26,7 +26,7 @@ module ForemanExpireHosts
|
|
26
26
|
unless expired_on.to_s.to_date > Date.today
|
27
27
|
errors.add(:expired_on, _('must be in the future'))
|
28
28
|
end
|
29
|
-
rescue => e
|
29
|
+
rescue StandardError => e
|
30
30
|
errors.add(:expired_on, _('is invalid'))
|
31
31
|
end
|
32
32
|
end
|
@@ -76,7 +76,7 @@ module ForemanExpireHosts
|
|
76
76
|
return true if self.owner_type.nil? || self.owner.nil?
|
77
77
|
Setting[:can_owner_modify_host_expiry_date] &&
|
78
78
|
((self.owner_type == 'User' && self.owner == User.current) ||
|
79
|
-
(self.owner_type == 'Usergroup' && self.owner.
|
79
|
+
(self.owner_type == 'Usergroup' && self.owner.all_users.include?(User.current)))
|
80
80
|
end
|
81
81
|
|
82
82
|
private
|
@@ -1,4 +1,5 @@
|
|
1
1
|
class Setting::ExpireHosts < Setting
|
2
|
+
Setting::BLANK_ATTRS.push('host_expiry_email_recipients')
|
2
3
|
|
3
4
|
def self.load_defaults
|
4
5
|
# Check the table exists
|
@@ -11,11 +12,10 @@ class Setting::ExpireHosts < Setting
|
|
11
12
|
self.set('notify1_days_before_host_expiry', N_('Send first notification to owner of hosts about his hosts expiring in given days. Must be integer only'), 7, N_('First expiry notification')),
|
12
13
|
self.set('notify2_days_before_host_expiry', N_('Send second notification to owner of hosts about his hosts expiring in given days. Must be integer only'), 1, N_('Second expiry notification')),
|
13
14
|
self.set('days_to_delete_after_host_expiration', N_('Delete expired hosts after given days of hosts expiry date. Must be integer only'), 3, N_('Expiry grace period in days')),
|
14
|
-
self.set('host_expiry_email_recipients', N_('All notifications will be delivered to its owner. If any other users/admins need to receive those expiry
|
15
|
+
self.set('host_expiry_email_recipients', N_('All notifications will be delivered to its owner. If any other users/admins need to receive those expiry warning notifications then those emails can be configured comma separated here.'), nil, N_('Expiry e-mail recipients'))
|
15
16
|
].each { |s| self.create! s.update(:category => 'Setting::ExpireHosts') }
|
16
17
|
end
|
17
18
|
|
18
19
|
true
|
19
20
|
end
|
20
|
-
|
21
21
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module ForemanExpireHosts
|
2
|
+
module Action
|
3
|
+
class Base
|
4
|
+
attr_accessor :successful_hosts, :failed_hosts
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
self.successful_hosts = []
|
8
|
+
self.failed_hosts = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def engage
|
12
|
+
process
|
13
|
+
notify
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def process
|
19
|
+
hosts.each do |host|
|
20
|
+
if action(host)
|
21
|
+
self.successful_hosts << host
|
22
|
+
else
|
23
|
+
self.failed_hosts << host
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def notify
|
29
|
+
success_notification.new(
|
30
|
+
success_notification_options
|
31
|
+
).deliver
|
32
|
+
failure_notification.new(
|
33
|
+
failure_notification_options
|
34
|
+
).deliver
|
35
|
+
end
|
36
|
+
|
37
|
+
def hosts
|
38
|
+
selector.preload(:owner)
|
39
|
+
end
|
40
|
+
|
41
|
+
def success_notification_options
|
42
|
+
{
|
43
|
+
:hosts => successful_hosts
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def failure_notification_options
|
48
|
+
{
|
49
|
+
:hosts => failed_hosts,
|
50
|
+
:to => User.anonymous_admin
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
delegate :logger, :to => :Rails
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|