foreman_virt_who_configure 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/foreman_virt_who_configure/configs_controller.rb +1 -1
- data/app/helpers/foreman_virt_who_configure/configs_helper.rb +49 -2
- data/app/lib/actions/foreman_virt_who_configure/config/report.rb +37 -0
- data/app/models/foreman_virt_who_configure/config.rb +70 -12
- data/app/models/foreman_virt_who_configure/service_user.rb +1 -1
- data/app/views/dashboard/_foreman_virt_who_configs_status_widget.html.erb +59 -0
- data/app/views/foreman_virt_who_configure/configs/edit.html.erb +1 -1
- data/app/views/foreman_virt_who_configure/configs/index.html.erb +7 -5
- data/app/views/foreman_virt_who_configure/configs/new.html.erb +1 -1
- data/app/views/foreman_virt_who_configure/configs/show.html.erb +4 -3
- data/app/views/foreman_virt_who_configure/configs/steps/_general_information_form.erb +2 -0
- data/db/migrate/20170404152851_add_last_report_info_to_config.rb +6 -0
- data/db/migrate/20170407152851_add_name_to_config.rb +5 -0
- data/lib/foreman_virt_who_configure/engine.rb +14 -5
- data/lib/foreman_virt_who_configure/version.rb +1 -1
- data/test/factories/foreman_virt_who_configure_factories.rb +11 -0
- data/test/unit/config_test.rb +79 -0
- metadata +6 -3
- data/app/views/dashboard/_foreman_virt_who_configure_widget.html.erb +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc18a0a6855645558a541c028fdbc976a1e82a28
|
4
|
+
data.tar.gz: c665d9f4302ec737940875c5c668af1eeaf84588
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94a21f9543e5519eadfda90acdddc83f5d035e14eca3c1952d5228e79eb608a6658c7852166fee9a3b320bdc56fded20291f8e036abe86bc2415f647e0136f32
|
7
|
+
data.tar.gz: 4727236938d4b4e145fb6452698985173f6292d476ea123362b83a3b55674e9eaefa942d7c2896acaf09255846f852ee98d87d68b946584b56551dfaa93f1464
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ForemanVirtWhoConfigure
|
2
2
|
module ConfigsHelper
|
3
3
|
def hypervisor_server_help_data
|
4
|
-
{
|
4
|
+
@hypervisor_server_help_data ||= {
|
5
5
|
'esx' => _('VMware vCenter server’s fully qualified host name or IP address.'),
|
6
6
|
'rhevm' => _('Red Hat Virtualization Manager’s fully qualified host name or IP address. For example, <code>https://hostname:443/ovirt-engine/</code> for v4, <code>https://hostname_or_IP:443</code> for v3'),
|
7
7
|
# 'vdsm' => 'Red Hat Enterprise Linux Hypervisor (vdsm)',
|
@@ -12,7 +12,7 @@ module ForemanVirtWhoConfigure
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def hypervisor_username_help_data
|
15
|
-
{
|
15
|
+
@hypervisor_username_help_data ||= {
|
16
16
|
'esx' => _('Account name by which virt-who is to connect to the hypervisor, in the format <code>domain_name\account_name</code>. Note that only a single backslash separates the values for domain_name and account_name. If you are using a domain account, and the global configuration file <code>/etc/sysconfig/virt-who</code>, then <b>two</b> backslashes are required. For further details, see <a href="https://access.redhat.com/solutions/1270223">Red Hat Knowledgebase solution How to use a windows domain account with virt-who</a> for more information.'),
|
17
17
|
'rhevm' => _('Account name by which virt-who is to connect to the Red Hat Enterprise Virtualization Manager instance. The username option requires input in the format username@domain.'),
|
18
18
|
# 'vdsm' => '',
|
@@ -21,5 +21,52 @@ module ForemanVirtWhoConfigure
|
|
21
21
|
'libvirt' => _('Account name by which virt-who is to connect to the hypervisor.')
|
22
22
|
}
|
23
23
|
end
|
24
|
+
|
25
|
+
def config_report_status(config)
|
26
|
+
message = case config.status
|
27
|
+
when :unknown
|
28
|
+
_('No Report Yet')
|
29
|
+
when :ok
|
30
|
+
l(config.last_report_at, :format => :long)
|
31
|
+
when :error
|
32
|
+
l(config.last_report_at, :format => :long)
|
33
|
+
else
|
34
|
+
_('Unknown configuration status')
|
35
|
+
end
|
36
|
+
|
37
|
+
config_report_status_icon(config) + content_tag(:span, message, :class => config.status)
|
38
|
+
end
|
39
|
+
|
40
|
+
def config_report_status_icon(config)
|
41
|
+
content_tag(:span, ''.html_safe, :class => report_status_class(config.status), :title => config.status_description) + ' '.html_safe
|
42
|
+
end
|
43
|
+
|
44
|
+
def report_status_class(status)
|
45
|
+
icon_class = case status
|
46
|
+
when :ok
|
47
|
+
'pficon-ok'
|
48
|
+
when :error
|
49
|
+
'pficon-error-circle-o'
|
50
|
+
when :unknown
|
51
|
+
'pficon-info'
|
52
|
+
else
|
53
|
+
'pficon-help'
|
54
|
+
end
|
55
|
+
|
56
|
+
"virt-who-config-report-status #{icon_class} #{status_class(status)}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def status_class(status)
|
60
|
+
case status
|
61
|
+
when :ok
|
62
|
+
'status-ok'.html_safe
|
63
|
+
when :unknown
|
64
|
+
'status-info'.html_safe
|
65
|
+
when :error
|
66
|
+
'status-error'.html_safe
|
67
|
+
else
|
68
|
+
'status-warn'.html_safe
|
69
|
+
end
|
70
|
+
end
|
24
71
|
end
|
25
72
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Actions
|
2
|
+
module ForemanVirtWhoConfigure
|
3
|
+
module Config
|
4
|
+
class Report < Actions::EntryAction
|
5
|
+
middleware.use Actions::Middleware::KeepCurrentUser
|
6
|
+
|
7
|
+
def self.subscribe
|
8
|
+
Actions::Katello::Host::HypervisorsUpdate
|
9
|
+
end
|
10
|
+
|
11
|
+
def plan(hypervisors)
|
12
|
+
plan_self(:hypervisors => hypervisors)
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
# this is how we could do mapping to hypervisor hosts based on UUID provided by candelpin
|
17
|
+
# input['hypervisors'].each do |hv_attrs|
|
18
|
+
# # should always exist, Actions::Katello::Host::HypervisorsUpdate should create it
|
19
|
+
# # but we should be careful anyway
|
20
|
+
# hypervisor = ::Host.joins(:subscription_facet).where(:'katello_subscription_facets.uuid' => hv_attrs['uuid']).first
|
21
|
+
# end
|
22
|
+
|
23
|
+
config = ::ForemanVirtWhoConfigure::ServiceUser.find_by_user_id(User.current.id).try(:config)
|
24
|
+
if config.present?
|
25
|
+
config.virt_who_touch!
|
26
|
+
end
|
27
|
+
|
28
|
+
# if config was not found, the report is coming from unknown virt-who reporter, we could create a notification
|
29
|
+
# that this plugin can be used for configuration
|
30
|
+
|
31
|
+
# this could be used for mapping to existing compute resource
|
32
|
+
# config.hypervisor_server
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -3,7 +3,7 @@ module ForemanVirtWhoConfigure
|
|
3
3
|
PERMITTED_PARAMS = [
|
4
4
|
:interval, :organization_id, :compute_resource_id, :whitelist, :blacklist, :listing_mode, :hypervisor_id,
|
5
5
|
:hypervisor_type, :hypervisor_server, :hypervisor_username, :hypervisor_password, :debug,
|
6
|
-
:satellite_url, :proxy, :no_proxy
|
6
|
+
:satellite_url, :proxy, :no_proxy, :name
|
7
7
|
]
|
8
8
|
include Authorizable
|
9
9
|
audited
|
@@ -47,6 +47,20 @@ module ForemanVirtWhoConfigure
|
|
47
47
|
|
48
48
|
DEFAULT_INTERVAL = 120
|
49
49
|
|
50
|
+
STATUSES = {
|
51
|
+
'ok' => N_('OK'),
|
52
|
+
'error' => N_('Error'),
|
53
|
+
'unknown' => N_('Unknown')
|
54
|
+
}
|
55
|
+
|
56
|
+
STATUS_DESCRIPTIONS = Hash.new(N_('Unknown configuration status, caused by unexpected conditions')).merge(
|
57
|
+
{
|
58
|
+
:unknown => N_('The configuration was not deployed yet or the virt-who was unable to report the status'),
|
59
|
+
:ok => N_('The virt-who report arrived within the interval'),
|
60
|
+
:error => N_('The virt-who report has not arrived within the interval, please check the virt-who reporter status and logs')
|
61
|
+
}
|
62
|
+
)
|
63
|
+
|
50
64
|
include Encryptable
|
51
65
|
encrypts :hypervisor_password
|
52
66
|
|
@@ -57,8 +71,22 @@ module ForemanVirtWhoConfigure
|
|
57
71
|
belongs_to :service_user
|
58
72
|
|
59
73
|
scoped_search :on => :interval, :complete_value => true
|
74
|
+
scoped_search :on => :name
|
75
|
+
scoped_search :on => :status, :complete_value => true, :only_explicit => true, :operators => ['= '], :ext_method => :search_by_status
|
76
|
+
scoped_search :on => :out_of_date_at, :complete_value => true, :only_explicit => true
|
77
|
+
scoped_search :on => :last_report_at, :complete_value => true, :only_explicit => true
|
60
78
|
# TODO add more related objects and attributes
|
61
79
|
|
80
|
+
# Foreman 1.11 specifics, can be removed later, otherwise when string does not start with "encrypts" prefix
|
81
|
+
# we get 500 when we try to create log message that relies on name method
|
82
|
+
def name
|
83
|
+
title
|
84
|
+
end
|
85
|
+
|
86
|
+
def title
|
87
|
+
compute_resource ? compute_resource.name : hypervisor_server
|
88
|
+
end
|
89
|
+
|
62
90
|
# compatibility layer for 1.11 - pre strong params patch
|
63
91
|
if self.respond_to?(:attr_accessible)
|
64
92
|
attr_accessible(*PERMITTED_PARAMS)
|
@@ -68,7 +96,7 @@ module ForemanVirtWhoConfigure
|
|
68
96
|
after_destroy :destroy_service_user
|
69
97
|
|
70
98
|
validates :interval, :hypervisor_type, :hypervisor_server, :hypervisor_username, :hypervisor_password,
|
71
|
-
:satellite_url, :hypervisor_id, :organization_id,
|
99
|
+
:satellite_url, :hypervisor_id, :organization_id, :name,
|
72
100
|
:presence => true
|
73
101
|
validates :hypervisor_type, :inclusion => HYPERVISOR_TYPES.keys
|
74
102
|
validates :hypervisor_id, :inclusion => HYPERVISOR_IDS
|
@@ -80,6 +108,21 @@ module ForemanVirtWhoConfigure
|
|
80
108
|
|
81
109
|
before_validation :remove_whitespaces
|
82
110
|
|
111
|
+
scope :out_of_date, ->(deadline = DateTime.now.utc) { where(["out_of_date_at < ?", deadline.utc.to_s(:db)]) }
|
112
|
+
scope :for_organization, ->(org) { org.nil? ? where(nil) : where(:organization_id => org) }
|
113
|
+
|
114
|
+
def self.search_by_status(key, operator, value)
|
115
|
+
condition = case value
|
116
|
+
when 'ok'
|
117
|
+
sanitize_sql_for_conditions([' out_of_date_at >= ? ', DateTime.now.utc.to_s(:db)])
|
118
|
+
when 'unknown'
|
119
|
+
sanitize_sql_for_conditions({:last_report_at => nil})
|
120
|
+
when 'error'
|
121
|
+
sanitize_sql_for_conditions([' out_of_date_at < ? ', DateTime.now.utc.to_s(:db)])
|
122
|
+
end
|
123
|
+
{ :conditions => condition }
|
124
|
+
end
|
125
|
+
|
83
126
|
def create_service_user
|
84
127
|
password = User.random_password
|
85
128
|
service_user = self.build_service_user
|
@@ -117,20 +160,14 @@ module ForemanVirtWhoConfigure
|
|
117
160
|
# raise 'unsupported compute resource type'
|
118
161
|
# end
|
119
162
|
|
120
|
-
# Foreman 1.11 specifics, can be removed later, otherwise when string does not start with "encrypts" prefix
|
121
|
-
# we get 500 when we try to create log message that relies on name method
|
122
|
-
def name
|
123
|
-
title
|
124
|
-
end
|
125
|
-
|
126
|
-
def title
|
127
|
-
compute_resource ? compute_resource.name : hypervisor_server
|
128
|
-
end
|
129
|
-
|
130
163
|
def humanized_interval
|
131
164
|
_("every %s hours") % (self.interval / 60)
|
132
165
|
end
|
133
166
|
|
167
|
+
def out_of_date?(deadline = DateTime.now.utc)
|
168
|
+
self.out_of_date_at.present? && self.out_of_date_at < deadline
|
169
|
+
end
|
170
|
+
|
134
171
|
def step_name(step_key)
|
135
172
|
WIZARD_STEPS[step_key]
|
136
173
|
end
|
@@ -148,6 +185,27 @@ module ForemanVirtWhoConfigure
|
|
148
185
|
end
|
149
186
|
end
|
150
187
|
|
188
|
+
def virt_who_touch!
|
189
|
+
self.last_report_at = DateTime.now.utc
|
190
|
+
self.out_of_date_at = self.last_report_at + self.interval.minutes
|
191
|
+
self.save!
|
192
|
+
end
|
193
|
+
|
194
|
+
def status
|
195
|
+
case
|
196
|
+
when self.last_report_at.nil?
|
197
|
+
:unknown
|
198
|
+
when !self.out_of_date?
|
199
|
+
:ok
|
200
|
+
else
|
201
|
+
:error
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def status_description
|
206
|
+
_(STATUS_DESCRIPTIONS[status])
|
207
|
+
end
|
208
|
+
|
151
209
|
private
|
152
210
|
|
153
211
|
def remove_whitespaces
|
@@ -6,7 +6,7 @@ module ForemanVirtWhoConfigure
|
|
6
6
|
encrypts :encrypted_password
|
7
7
|
|
8
8
|
belongs_to :user
|
9
|
-
|
9
|
+
has_one :config
|
10
10
|
|
11
11
|
# Foreman 1.11 specifics, can be removed later, otherwise when string does not start with "encrypts" prefix
|
12
12
|
# we get 500 when we try to create log message that relies on name method
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<% scope = ForemanVirtWhoConfigure::Config.for_organization(Organization.current) %>
|
2
|
+
<% scope = scope.authorized(:view_virt_who_config) %>
|
3
|
+
<% out_of_date = scope.out_of_date.order('out_of_date_at DESC') %>
|
4
|
+
|
5
|
+
<h4 class="header ca"><%= _('Virt-who Configurations Statistics') %></h4>
|
6
|
+
<table class="table table-striped ellipsis">
|
7
|
+
<thead>
|
8
|
+
<tr>
|
9
|
+
<th><%= _("Status") %></th>
|
10
|
+
<th><%= _("Count") %></th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<tr>
|
15
|
+
<td><%= link_to _("Configurations Without Single Report"), foreman_virt_who_configure_configs_path(:search => "status = unknown") %></td>
|
16
|
+
<td><%= scope.where(:last_report_at => nil).count %></td>
|
17
|
+
</tr>
|
18
|
+
<tr>
|
19
|
+
<td><%= link_to _("Configurations Out Of Date"), foreman_virt_who_configure_configs_path(:search => "status = error") %></td>
|
20
|
+
<td><%= out_of_date.count %></td>
|
21
|
+
</tr>
|
22
|
+
<tr>
|
23
|
+
<td><%= link_to _("Configurations Up To Date"), foreman_virt_who_configure_configs_path(:search => "status = ok") %></td>
|
24
|
+
<td><%= scope.where.not(:last_report_at => nil).count - out_of_date.count %></td>
|
25
|
+
</tr>
|
26
|
+
<tr>
|
27
|
+
<td><%= link_to _("Total Configurations"), foreman_virt_who_configure_configs_path %></td>
|
28
|
+
<td><%= scope.count %></td>
|
29
|
+
</tr>
|
30
|
+
</tbody>
|
31
|
+
</table>
|
32
|
+
|
33
|
+
|
34
|
+
<h5 class="ca"><%= _('Out of Date Virt-who Configurations') %></h5>
|
35
|
+
<% if out_of_date.empty? %>
|
36
|
+
<%= _("No configuration for which the report has not been received during expected interval") %>
|
37
|
+
<% else %>
|
38
|
+
<table class="table table-striped ellipsis">
|
39
|
+
<thead>
|
40
|
+
<tr>
|
41
|
+
<th><%= s_("Config|Name") %></th>
|
42
|
+
<th><%= s_("Config|Last Report") %></th>
|
43
|
+
<th><%= s_("Config|Interval") %></th>
|
44
|
+
</tr>
|
45
|
+
</thead>
|
46
|
+
<tbody>
|
47
|
+
<% out_of_date.limit(3).each do |config| %>
|
48
|
+
<tr>
|
49
|
+
<td><%= config_report_status_icon(config) %><%= link_to config.name, foreman_virt_who_configure_config_path(config) %></td>
|
50
|
+
<td><%= l(config.last_report_at, :format => :long) %></td>
|
51
|
+
<td><%= config.humanized_interval %></td>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
</tbody>
|
55
|
+
</table>
|
56
|
+
<% end %>
|
57
|
+
|
58
|
+
|
59
|
+
|
@@ -1,23 +1,25 @@
|
|
1
|
-
<% title _("
|
1
|
+
<% title _("Virt-who Configurations") %>
|
2
2
|
|
3
3
|
<% title_actions new_config_link, help_button_or_path %>
|
4
4
|
|
5
5
|
<table class="<%= table_css_classes 'table-fixed' %>">
|
6
6
|
<thead>
|
7
7
|
<tr>
|
8
|
-
<th class="col-md-8"><%= sort :name, :as => s_("Config|
|
9
|
-
<th><%= s_("Config|Interval") %></th>
|
8
|
+
<th class="col-md-8"><%= sort :name, :as => s_("Config|Name") %></th>
|
9
|
+
<th><%= sort :interval, :as => s_("Config|Interval") %></th>
|
10
|
+
<th class="col-md-2"><%= sort :last_report_at, :as => _("Status") %></th>
|
10
11
|
<th><%= _('Actions') %></th>
|
11
12
|
</tr>
|
12
13
|
</thead>
|
13
14
|
<tbody>
|
14
15
|
<% @configs.each do |config| %>
|
15
16
|
<tr>
|
16
|
-
<td class="display-two-pane ellipsis"><%= link_to_if_authorized
|
17
|
+
<td class="display-two-pane ellipsis"><%= link_to_if_authorized config.name, hash_for_foreman_virt_who_configure_config_path(:id => config).merge(:auth_object => config, :authorizer => authorizer) %></td>
|
17
18
|
<td><%= config.humanized_interval %></td>
|
19
|
+
<td><%= config_report_status(config) %></td>
|
18
20
|
<td class="col-md-1"><%= action_buttons(
|
19
21
|
display_link_if_authorized(_('Edit'), hash_for_edit_foreman_virt_who_configure_config_path(:id => config).merge(:auth_object => config, :authorizer => authorizer)),
|
20
|
-
display_delete_if_authorized((hash_for_foreman_virt_who_configure_config_path(:id => config).merge(:auth_object => config, :authorizer => authorizer)), :data => { :confirm => _("Delete virt-who configuration %s?") % config.
|
22
|
+
display_delete_if_authorized((hash_for_foreman_virt_who_configure_config_path(:id => config).merge(:auth_object => config, :authorizer => authorizer)), :data => { :confirm => _("Delete virt-who configuration %s?") % config.name })
|
21
23
|
) %></td>
|
22
24
|
</tr>
|
23
25
|
<% end %>
|
@@ -6,9 +6,10 @@
|
|
6
6
|
<div class="col-md-12">
|
7
7
|
<label><%= _("Run this script on the target host which will run virt-who reporting, preferably Satellite host:") %></label>
|
8
8
|
<p>
|
9
|
-
<%= _("
|
10
|
-
<%= _("
|
11
|
-
<%= _("
|
9
|
+
<%= _("On the target virt-who host:") %></br>
|
10
|
+
<%= _("1. Copy this configuration script to a safe directory.") %></br>
|
11
|
+
<%= _("2. Make the script executable and run it.") %></br>
|
12
|
+
<%= _("3. Delete the script.") %></br>
|
12
13
|
</p>
|
13
14
|
</div>
|
14
15
|
</div>
|
@@ -7,6 +7,7 @@ module ForemanVirtWhoConfigure
|
|
7
7
|
config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
|
8
8
|
config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
|
9
9
|
config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
|
10
|
+
config.autoload_paths += Dir["#{config.root}/app/lib"]
|
10
11
|
config.autoload_paths += Dir["#{config.root}/test/"]
|
11
12
|
|
12
13
|
# Add any db migrations
|
@@ -23,10 +24,11 @@ module ForemanVirtWhoConfigure
|
|
23
24
|
|
24
25
|
# Add permissions
|
25
26
|
security_block :foreman_virt_who_configure do
|
26
|
-
|
27
|
-
permission :
|
28
|
-
permission :
|
29
|
-
permission :
|
27
|
+
permission_options = { :resource_type => 'ForemanVirtWhoConfigure::Config' }
|
28
|
+
permission :view_virt_who_config, { :'foreman_virt_who_configure/configs' => [:index, :show, :auto_complete_search] }, permission_options
|
29
|
+
permission :create_virt_who_config, { :'foreman_virt_who_configure/configs' => [:new, :create] }, permission_options
|
30
|
+
permission :edit_virt_who_config, { :'foreman_virt_who_configure/configs' => [:edit, :update] }, permission_options
|
31
|
+
permission :destroy_virt_who_config, { :'foreman_virt_who_configure/configs' => [:destroy] }, permission_options
|
30
32
|
end
|
31
33
|
|
32
34
|
reporter_permissions = [ :create_hosts, :edit_hosts, :view_lifecycle_environments, :my_organizations ]
|
@@ -48,6 +50,9 @@ module ForemanVirtWhoConfigure
|
|
48
50
|
role 'Virt-who Manager', [ :view_virt_who_config, :create_virt_who_config, :edit_virt_who_config, :destroy_virt_who_config ]
|
49
51
|
role 'Virt-who Viewer', [ :view_virt_who_config ]
|
50
52
|
|
53
|
+
# Available since Foreman 1.15
|
54
|
+
add_all_permissions_to_default_roles if respond_to?(:add_all_permissions_to_default_roles)
|
55
|
+
|
51
56
|
# add menu entry
|
52
57
|
menu :top_menu, :virt_who_configs,
|
53
58
|
url_hash: { controller: 'foreman_virt_who_configure/configs', action: :index },
|
@@ -56,7 +61,7 @@ module ForemanVirtWhoConfigure
|
|
56
61
|
after: :compute_resources
|
57
62
|
|
58
63
|
# add dashboard widget
|
59
|
-
|
64
|
+
widget 'foreman_virt_who_configs_status_widget', :name => N_('Virt-who Configs Status'), sizex: 6, sizey: 1
|
60
65
|
end
|
61
66
|
end
|
62
67
|
|
@@ -76,6 +81,10 @@ module ForemanVirtWhoConfigure
|
|
76
81
|
SETTINGS[:foreman_virt_who_configure] = { assets: { precompile: assets_to_precompile } }
|
77
82
|
end
|
78
83
|
|
84
|
+
initializer 'foreman_virt_who_configure.register_paths' do |_app|
|
85
|
+
ForemanTasks.dynflow.config.eager_load_paths.concat(%W(#{ForemanVirtWhoConfigure::Engine.root}/app/lib/actions))
|
86
|
+
end
|
87
|
+
|
79
88
|
# Include concerns in this config.to_prepare block
|
80
89
|
config.to_prepare do
|
81
90
|
SSO::METHODS.unshift SSO::BasicWithHidden
|
@@ -1,5 +1,6 @@
|
|
1
1
|
FactoryGirl.define do
|
2
2
|
factory :virt_who_config, :class => ::ForemanVirtWhoConfigure::Config do
|
3
|
+
sequence(:name) { |n| "config #{n}" }
|
3
4
|
organization
|
4
5
|
interval 120
|
5
6
|
hypervisor_id 'hostname'
|
@@ -10,4 +11,14 @@ FactoryGirl.define do
|
|
10
11
|
satellite_url 'foreman.example.com'
|
11
12
|
listing_mode ForemanVirtWhoConfigure::Config::UNLIMITED
|
12
13
|
end
|
14
|
+
|
15
|
+
trait :out_of_date do
|
16
|
+
last_report_at (1.minute.ago - 120.minutes).utc
|
17
|
+
out_of_date_at (1.minute.ago).utc
|
18
|
+
end
|
19
|
+
|
20
|
+
trait :ok do
|
21
|
+
last_report_at (1.minute.ago).utc
|
22
|
+
out_of_date_at (1.minute.ago + 120.minutes).utc
|
23
|
+
end
|
13
24
|
end
|
data/test/unit/config_test.rb
CHANGED
@@ -61,5 +61,84 @@ module ForemanVirtWhoConfigure
|
|
61
61
|
assert config.valid?
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
describe 'organization scoping' do
|
66
|
+
let(:another_org) { FactoryGirl.create(:organization) }
|
67
|
+
let(:config_1) { FactoryGirl.create(:virt_who_config) }
|
68
|
+
let(:config_2) { FactoryGirl.create(:virt_who_config, :organization => another_org) }
|
69
|
+
|
70
|
+
before do
|
71
|
+
# let is lazy
|
72
|
+
preload = config_1, config_2
|
73
|
+
end
|
74
|
+
|
75
|
+
test '.for_organization does not scope on any organization for nil' do
|
76
|
+
# useful for just passing Organization.current which can be nil
|
77
|
+
assert_includes ForemanVirtWhoConfigure::Config.for_organization(nil), config_1
|
78
|
+
assert_includes ForemanVirtWhoConfigure::Config.for_organization(nil), config_2
|
79
|
+
end
|
80
|
+
|
81
|
+
test '.for_organization scoped to specified organization' do
|
82
|
+
assert_includes ForemanVirtWhoConfigure::Config.for_organization(another_org), config_2
|
83
|
+
refute_includes ForemanVirtWhoConfigure::Config.for_organization(another_org), config_1
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
describe 'statuses and expiration' do
|
89
|
+
let(:out_of_date_config) { FactoryGirl.create(:virt_who_config, :out_of_date) }
|
90
|
+
let(:ok_config) { FactoryGirl.create(:virt_who_config, :ok) }
|
91
|
+
let(:unknown_config) { FactoryGirl.create(:virt_who_config) }
|
92
|
+
before do
|
93
|
+
# let is lazy
|
94
|
+
preload = out_of_date_config, ok_config, unknown_config
|
95
|
+
end
|
96
|
+
|
97
|
+
test 'scoped search definitions work correctly' do
|
98
|
+
assert_equal [ok_config], ForemanVirtWhoConfigure::Config.search_for('status = ok')
|
99
|
+
assert_equal [out_of_date_config], ForemanVirtWhoConfigure::Config.search_for('status = error')
|
100
|
+
assert_equal [unknown_config], ForemanVirtWhoConfigure::Config.search_for('status = unknown')
|
101
|
+
end
|
102
|
+
|
103
|
+
test '.out_of_date scope lists only out_of_date configs' do
|
104
|
+
assert_includes ForemanVirtWhoConfigure::Config.out_of_date, out_of_date_config
|
105
|
+
assert_not_includes ForemanVirtWhoConfigure::Config.out_of_date, ok_config
|
106
|
+
assert_not_includes ForemanVirtWhoConfigure::Config.out_of_date, unknown_config
|
107
|
+
end
|
108
|
+
|
109
|
+
test '#out_of_date?' do
|
110
|
+
assert out_of_date_config.out_of_date?
|
111
|
+
refute ok_config.out_of_date?
|
112
|
+
refute unknown_config.out_of_date?
|
113
|
+
end
|
114
|
+
|
115
|
+
test '#virt_who_touch! sets last_report_at to now' do
|
116
|
+
now = DateTime.now.utc
|
117
|
+
unknown_config.virt_who_touch!
|
118
|
+
assert now <= unknown_config.last_report_at
|
119
|
+
end
|
120
|
+
|
121
|
+
test '#virt_who_touch! makes out_of_date config ok again' do
|
122
|
+
out_of_date_config.virt_who_touch!
|
123
|
+
refute out_of_date_config.out_of_date?
|
124
|
+
end
|
125
|
+
|
126
|
+
test '#virt_who_touch! sets out_of_date_at based on interval and last_report_at' do
|
127
|
+
out_of_date_config.virt_who_touch!
|
128
|
+
assert_equal out_of_date_config.out_of_date_at, out_of_date_config.last_report_at + out_of_date_config.interval.minutes
|
129
|
+
end
|
130
|
+
|
131
|
+
test '#status returns the symbol representing the current status' do
|
132
|
+
assert_equal :ok, ok_config.status
|
133
|
+
assert_equal :error, out_of_date_config.status
|
134
|
+
assert_equal :unknown, unknown_config.status
|
135
|
+
end
|
136
|
+
|
137
|
+
test '#status description returns string describing the status' do
|
138
|
+
assert_kind_of String, ok_config.status_description
|
139
|
+
assert_kind_of String, out_of_date_config.status_description
|
140
|
+
assert_kind_of String, unknown_config.status_description
|
141
|
+
end
|
142
|
+
end
|
64
143
|
end
|
65
144
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_virt_who_configure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Foreman virt-who-configure team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: katello
|
@@ -69,12 +69,13 @@ files:
|
|
69
69
|
- app/controllers/foreman_virt_who_configure/configs_controller.rb
|
70
70
|
- app/helpers/foreman_virt_who_configure/compatibility_helper.rb
|
71
71
|
- app/helpers/foreman_virt_who_configure/configs_helper.rb
|
72
|
+
- app/lib/actions/foreman_virt_who_configure/config/report.rb
|
72
73
|
- app/models/foreman_virt_who_configure/auth_source_hidden_with_authentication.rb
|
73
74
|
- app/models/foreman_virt_who_configure/config.rb
|
74
75
|
- app/models/foreman_virt_who_configure/output_generator.rb
|
75
76
|
- app/models/foreman_virt_who_configure/service_user.rb
|
76
77
|
- app/services/sso/basic_with_hidden.rb
|
77
|
-
- app/views/dashboard/
|
78
|
+
- app/views/dashboard/_foreman_virt_who_configs_status_widget.html.erb
|
78
79
|
- app/views/foreman_virt_who_configure/configs/_form.html.erb
|
79
80
|
- app/views/foreman_virt_who_configure/configs/edit.html.erb
|
80
81
|
- app/views/foreman_virt_who_configure/configs/index.html.erb
|
@@ -91,6 +92,8 @@ files:
|
|
91
92
|
- db/migrate/20170102152851_add_satellite_url_to_config.rb
|
92
93
|
- db/migrate/20170215152851_change_default_interval.rb
|
93
94
|
- db/migrate/20170309161551_add_proxy_and_no_proxy_to_config.rb
|
95
|
+
- db/migrate/20170404152851_add_last_report_info_to_config.rb
|
96
|
+
- db/migrate/20170407152851_add_name_to_config.rb
|
94
97
|
- lib/foreman_virt_who_configure.rb
|
95
98
|
- lib/foreman_virt_who_configure/engine.rb
|
96
99
|
- lib/foreman_virt_who_configure/version.rb
|