foreman_virt_who_configure 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +35 -0
  4. data/Rakefile +47 -0
  5. data/app/assets/javascripts/foreman_virt_who_configure/config_edit.js +31 -0
  6. data/app/assets/stylesheets/foreman_virt_who_configure/config.css.scss +13 -0
  7. data/app/controllers/foreman_virt_who_configure/application_controller.rb +11 -0
  8. data/app/controllers/foreman_virt_who_configure/concerns/config_parameters.rb +22 -0
  9. data/app/controllers/foreman_virt_who_configure/configs_controller.rb +94 -0
  10. data/app/helpers/foreman_virt_who_configure/compatibility_helper.rb +22 -0
  11. data/app/helpers/foreman_virt_who_configure/configs_helper.rb +25 -0
  12. data/app/models/foreman_virt_who_configure/auth_source_hidden_with_authentication.rb +13 -0
  13. data/app/models/foreman_virt_who_configure/config.rb +157 -0
  14. data/app/models/foreman_virt_who_configure/output_generator.rb +152 -0
  15. data/app/models/foreman_virt_who_configure/service_user.rb +21 -0
  16. data/app/services/sso/basic_with_hidden.rb +11 -0
  17. data/app/views/dashboard/_foreman_virt_who_configure_widget.html.erb +2 -0
  18. data/app/views/foreman_virt_who_configure/configs/_form.html.erb +20 -0
  19. data/app/views/foreman_virt_who_configure/configs/edit.html.erb +3 -0
  20. data/app/views/foreman_virt_who_configure/configs/index.html.erb +27 -0
  21. data/app/views/foreman_virt_who_configure/configs/new.html.erb +3 -0
  22. data/app/views/foreman_virt_who_configure/configs/show.html.erb +24 -0
  23. data/app/views/foreman_virt_who_configure/configs/steps/_connection_form.erb +16 -0
  24. data/app/views/foreman_virt_who_configure/configs/steps/_general_information_form.erb +12 -0
  25. data/app/views/foreman_virt_who_configure/configs/steps/_schedule_form.erb +4 -0
  26. data/app/views/foreman_virt_who_configure/configs/welcome.html.erb +14 -0
  27. data/config/routes.rb +9 -0
  28. data/db/migrate/20170102152649_create_service_users.rb +12 -0
  29. data/db/migrate/20170102152650_create_configs.rb +22 -0
  30. data/db/migrate/20170102152751_add_lab_attrs_to_config.rb +9 -0
  31. data/db/migrate/20170102152851_add_satellite_url_to_config.rb +5 -0
  32. data/db/migrate/20170215152851_change_default_interval.rb +9 -0
  33. data/db/migrate/20170309161551_add_proxy_and_no_proxy_to_config.rb +11 -0
  34. data/lib/foreman_virt_who_configure/engine.rb +108 -0
  35. data/lib/foreman_virt_who_configure/version.rb +3 -0
  36. data/lib/foreman_virt_who_configure.rb +4 -0
  37. data/lib/tasks/foreman_virt_who_configure_tasks.rake +47 -0
  38. data/locale/Makefile +60 -0
  39. data/locale/en/foreman_virt_who_configure.po +19 -0
  40. data/locale/foreman_virt_who_configure.pot +19 -0
  41. data/locale/gemspec.rb +2 -0
  42. data/test/factories/foreman_virt_who_configure_factories.rb +13 -0
  43. data/test/test_plugin_helper.rb +6 -0
  44. data/test/unit/config_test.rb +65 -0
  45. data/test/unit/output_generator_test.rb +89 -0
  46. metadata +134 -0
@@ -0,0 +1,152 @@
1
+ module ForemanVirtWhoConfigure
2
+ class OutputGenerator
3
+ attr_reader :config
4
+
5
+ def initialize(config)
6
+ @config = config
7
+ end
8
+
9
+ def ready_for_virt_who_output?
10
+ missing_virt_who_input_messages.empty?
11
+ end
12
+
13
+ def missing_virt_who_input_messages
14
+ messages = []
15
+ messages.push _('Owner was not provided') unless config.organization_id?
16
+ messages.push _('Interval was not provided') unless config.interval.present?
17
+ # messages.push _('Cofiguration not stored') unless config.persisted?
18
+ # messages.push _('Service user was not provided') unless config.service_user_id.present?
19
+ messages
20
+ end
21
+
22
+ def virt_who_output
23
+ <<EOS
24
+ echo "Installing virt-who.."
25
+ yum install -y virt-who
26
+ echo "Encrypting password.."
27
+ cr_password=`virt-who-password --password "#{cr_password}" 2> /dev/null`
28
+ user_password=`virt-who-password --password "#{service_user_password}" 2> /dev/null`
29
+
30
+ echo "Creating virt-who configuration.."
31
+ cat > #{config_file_path} << EOF
32
+ [#{identifier}]
33
+ type=#{type}
34
+ hypervisor_id=#{hypervisor_id}
35
+ owner=#{owner}
36
+ env=Library
37
+ server=#{cr_server}
38
+ username=#{cr_username}
39
+ encrypted_password=$cr_password#{filtering}
40
+ rhsm_hostname=#{satellite_url}
41
+ rhsm_username=#{service_user_username}
42
+ rhsm_encrypted_password=$user_password
43
+ rhsm_prefix=/rhsm
44
+ EOF
45
+
46
+ echo "Creating sysconfig virt-who configuration.."
47
+ cat > /etc/sysconfig/virt-who << EOF
48
+ VIRTWHO_SATELLITE6=1
49
+ VIRTWHO_DEBUG=#{config.debug? ? 1 : 0}
50
+ VIRTWHO_INTERVAL=#{config.interval * 60}#{proxy_strings}
51
+ EOF
52
+
53
+ echo "Enabling and restarting the virt-who service"
54
+ chkconfig virt-who on
55
+ service virt-who restart
56
+
57
+ echo "Done."
58
+ EOS
59
+ end
60
+
61
+ def filtering
62
+ case config.listing_mode.to_i
63
+ when ForemanVirtWhoConfigure::Config::UNLIMITED
64
+ return ''
65
+ when ForemanVirtWhoConfigure::Config::WHITELIST
66
+ return filtering_line_sanitized('filter_hosts', config.whitelist)
67
+ when ForemanVirtWhoConfigure::Config::BLACKLIST
68
+ return filtering_line_sanitized('exclude_hosts', config.blacklist)
69
+ end
70
+ end
71
+
72
+ def filtering_line_sanitized(filter, list)
73
+ "\n" + filter + '=' + sanitize_filter(list.to_s)
74
+ end
75
+
76
+ def sanitize_filter(list)
77
+ sanitize(list)
78
+ end
79
+
80
+ def config_file_path
81
+ "/etc/virt-who.d/#{identifier}.conf"
82
+ end
83
+
84
+ def identifier
85
+ "virt-who-config-#{config.id}"
86
+ end
87
+
88
+ def hypervisor_id
89
+ config.hypervisor_id
90
+ end
91
+
92
+ def owner
93
+ config.organization.label
94
+ end
95
+
96
+ def type
97
+ config.hypervisor_type
98
+ end
99
+
100
+ # returns nil if url could not be parsed or is invalid, e.g. qemu:///system
101
+ def cr_server
102
+ config.hypervisor_server
103
+ end
104
+
105
+ def cr_username
106
+ config.hypervisor_username
107
+ end
108
+
109
+ def cr_password
110
+ config.hypervisor_password
111
+ end
112
+
113
+ def satellite_url
114
+ config.satellite_url
115
+ end
116
+
117
+ def service_user_username
118
+ config.service_user.username
119
+ end
120
+
121
+ def service_user_password
122
+ config.service_user.encrypted_password
123
+ end
124
+
125
+ def cr
126
+ config.compute_resource
127
+ end
128
+
129
+ def proxy
130
+ config.proxy
131
+ end
132
+
133
+ def no_proxy
134
+ config.no_proxy
135
+ end
136
+
137
+ def sanitize_proxy(string)
138
+ sanitize(string)
139
+ end
140
+
141
+ def proxy_strings
142
+ output = ''
143
+ output << "\nhttp_proxy=#{sanitize_proxy(proxy)}" if proxy.present?
144
+ output << "\nno_proxy=#{sanitize_proxy(no_proxy)}" if no_proxy.present?
145
+ output
146
+ end
147
+
148
+ def sanitize(string)
149
+ string.tr("\r\n", '').strip.chomp(",")
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,21 @@
1
+ module ForemanVirtWhoConfigure
2
+ # holds the encrypted password for internal user that can be deployed to virt who reporter
3
+ class ServiceUser < ActiveRecord::Base
4
+ include Authorizable
5
+ include Encryptable
6
+ encrypts :encrypted_password
7
+
8
+ belongs_to :user
9
+ has_many :configs
10
+
11
+ # Foreman 1.11 specifics, can be removed later, otherwise when string does not start with "encrypts" prefix
12
+ # we get 500 when we try to create log message that relies on name method
13
+ def name
14
+ self.username || self.to_s
15
+ end
16
+
17
+ def username
18
+ self.user.login if self.user
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module SSO
2
+ class BasicWithHidden < Basic
3
+ def available?
4
+ controller.api_request? && http_auth_set? && controller.is_a?(::Katello::Api::Rhsm::CandlepinProxiesController)
5
+ end
6
+
7
+ def current_user
8
+ User.unscoped.where(:auth_source_id => ForemanVirtWhoConfigure::AuthSourceHiddenWithAuthentication.default.id).find_by_login(self.user)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ <h4 class="header ca"><%= _('ForemanVirtWhoConfigure') %></h4>
2
+ <%= _('Widget content') %>
@@ -0,0 +1,20 @@
1
+ <% javascript 'foreman_virt_who_configure/config_edit' %>
2
+
3
+ <%= form_for @config, :as => 'foreman_virt_who_configure_config', :url => (@config.new_record? ? foreman_virt_who_configure_configs_path : foreman_virt_who_configure_config_path(:id => @config)) do |f| %>
4
+ <%= base_errors_for @config %>
5
+
6
+ <div class="tab-content">
7
+
8
+ <% @config.steps.each do |step| %>
9
+ <fieldset>
10
+ <h3><%= @config.step_name(step) %></h3>
11
+ <hr>
12
+ <%= render :partial => "foreman_virt_who_configure/configs/steps/#{step.downcase.tr(' ', '_')}_form", :locals => { :f => f } %>
13
+ </fieldset>
14
+
15
+ <% end %>
16
+
17
+ </div>
18
+
19
+ <%= submit_or_cancel f %>
20
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% title _("Edit Config") %>
2
+
3
+ <%= render :partial => 'form' %>
@@ -0,0 +1,27 @@
1
+ <% title _("Configs") %>
2
+
3
+ <% title_actions new_config_link, help_button_or_path %>
4
+
5
+ <table class="<%= table_css_classes 'table-fixed' %>">
6
+ <thead>
7
+ <tr>
8
+ <th class="col-md-8"><%= sort :name, :as => s_("Config|Title") %></th>
9
+ <th><%= s_("Config|Interval") %></th>
10
+ <th><%= _('Actions') %></th>
11
+ </tr>
12
+ </thead>
13
+ <tbody>
14
+ <% @configs.each do |config| %>
15
+ <tr>
16
+ <td class="display-two-pane ellipsis"><%= link_to_if_authorized (config.title), hash_for_foreman_virt_who_configure_config_path(:id => config).merge(:auth_object => config, :authorizer => authorizer) %></td>
17
+ <td><%= config.humanized_interval %></td>
18
+ <td class="col-md-1"><%= action_buttons(
19
+ 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.title })
21
+ ) %></td>
22
+ </tr>
23
+ <% end %>
24
+ </tbody>
25
+ </table>
26
+
27
+ <%= will_paginate_with_info @configs %>
@@ -0,0 +1,3 @@
1
+ <% title _("New Virt Who Config") %>
2
+
3
+ <%= render :partial => "foreman_virt_who_configure/configs/form" %>
@@ -0,0 +1,24 @@
1
+ <% stylesheet 'foreman_virt_who_configure/config' %>
2
+
3
+ <div class="clearfix">
4
+ <div class="form-group">
5
+ <div class="row">
6
+ <div class="col-md-12">
7
+ <label><%= _("Run this script on the target host which will run virt-who reporting, preferably Satellite host:") %></label>
8
+ <p>
9
+ <%= _("1. Copy this configuration script to a safe directory on the host.") %></br>
10
+ <%= _("2. Make the script executable and run it on the host.") %></br>
11
+ <%= _("3. Delete the script on the host.") %></br>
12
+ </p>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="row">
17
+ <div class="col-md-8">
18
+ <pre class="terminal"><%= @config.virt_who_config_file %></pre>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+
24
+ <%= link_to _('Change this configuration'), edit_foreman_virt_who_configure_config_path(@config), :class => 'btn btn-default' %>
@@ -0,0 +1,16 @@
1
+ <div id="config_connection">
2
+ <%= text_f f, :satellite_url, :help_inline => popover('', _('Satellite Server’s fully-qualified host name, for example: satellite.example.com')), :label => _('Satellite Server FQDN') %>
3
+ <%= select_f f, :hypervisor_id, ForemanVirtWhoConfigure::Config::HYPERVISOR_IDS, :to_s, :to_s, {}, :label => _('Hypervisor ID'),
4
+ :help_inline => popover('', _("Specifies that hypervisors will be identified by their <b>hostname</b>, <b>uuid</b> or <b>hwuuid</b>.
5
+ Note that some virtualization backends don't have all of them implemented.
6
+ Default is <b>uuid</b>, which we also recommend to use. <b>hostname</b> provides more meaningful hypervisor
7
+ names but can cause duplicated hypervisor registrations if the host is renamed. <b>hwuuid</b> is applicable to esx and rhevm only.
8
+ This property is meant to be set up before the initial run of virt-who. Changing it later will result in duplicated entries in the subscription manager.").html_safe) %>
9
+ <%= select_f f, :listing_mode, ForemanVirtWhoConfigure::Config::FILTERING_MODES, :first, :last, {}, :label => _('Filtering'),
10
+ :help_inline => popover('', _("If you run a hybrid environment, with virtual machines running Red Hat Enterprise Linux and other operating systems, you may want to limit the scope of virt-who’s access to hosts. For example, if some hypervisors host only Microsoft Windows Server instances, there is no benefit in having those hypervisors reported by the virt-who agent."))%>
11
+ <%= textarea_f f, :whitelist, :help_inline => popover('', _('Only hosts which uuid (or hostname or hwuuid, based on <code>hypervisor_id</code>) is specified in comma-separated list in this option will be reported. Wildcards and regular expressions are supported, multiple records must be separated by comma. Put the value into the double-quotes if it contains special characters like comma. All new line characters will be removed in resulting configuration file, white spaces are removed from beginning and end.')), :label => _('Filter hosts') %>
12
+ <%= textarea_f f, :blacklist, :help_inline => popover('', _('Hosts which uuid (or hostname or hwuuid, based on <code>hypervisor_id</code>) is specified in comma-separated list in this option will <b>NOT</b> be reported. Wildcards and regular expressions are supported, multiple records must be separated by comma. Put the value into the double-quotes if it contains special characters like comma. All new line characters will be removed in resulting configuration file, white spaces are removed from beginning and end.').html_safe), :label => _('Exclude hosts') %>
13
+ <%= checkbox_f f, :debug, :label => _('Do you want to enable debugging output?') %>
14
+ <%= text_f f, :proxy, :help_inline => popover('', _('HTTP proxy that should be used for communication between the server on which virt-who is running and the hypervisors and virtualization managers. Leave this blank if no proxy is used.')), :label => _('HTTP Proxy') %>
15
+ <%= text_f f, :no_proxy, :help_inline => popover('', _('A comma-separated list of hostnames or domains or ip addresses to ignore proxy settings for. Optionally this may be set to <code>*</code> to bypass proxy settings for all hostnames domains or ip addresses.')), :label => _('Ignore Proxy') %>
16
+ </div>
@@ -0,0 +1,12 @@
1
+ <div id="config_general_information">
2
+ <% if f.object.organization_id.present? %>
3
+ <%= f.hidden_field :organization_id %>
4
+ <% else %>
5
+ <%= select_f f, :organization_id, Organization.authorized(:view_organizations), :id, :to_s, {}, :label => _('Owner') %>
6
+ <% end %>
7
+
8
+ <%= select_f f, :hypervisor_type, ForemanVirtWhoConfigure::Config::HYPERVISOR_TYPES, :first, :last %>
9
+ <%= text_f f, :hypervisor_server, :help_inline => popover('', hypervisor_server_help_data[f.object.hypervisor_type].html_safe), :data => { :help => hypervisor_server_help_data } %>
10
+ <%= text_f f, :hypervisor_username, :help_inline => popover('', hypervisor_username_help_data[f.object.hypervisor_type].html_safe), :data => { :help => hypervisor_username_help_data } %>
11
+ <%= password_f f, :hypervisor_password, :value => f.object.hypervisor_password, :help_inline => popover('', _('Account password by which virt-who is to connect to the hypervisor instance.')) %>
12
+ </div>
@@ -0,0 +1,4 @@
1
+ <div id="config_schedule">
2
+ <%= select_f f, :interval, ForemanVirtWhoConfigure::Config::AVAILABLE_INTERVALS, :first, :last, {},
3
+ :help_inline => popover('', _("How often to check connected hypervisors for changes? Also affects how often a mapping is reported. The recommended value for most environments is every two hours.")) %>
4
+ </div>
@@ -0,0 +1,14 @@
1
+ <div class="blank-slate-pf">
2
+ <div class="blank-slate-pf-icon">
3
+ <%= icon_text("globe", "", :kind => "fa") %>
4
+ </div>
5
+ <h1><%= _('Configs') %></h1>
6
+ <p>
7
+ <%= _("On this page you can define virt-who configurations for your hypervisors.") %></br>
8
+ <%= _("One virt-who configuration represents one config file in /etc/virt-who.d directory and maps to single hypervisor, organization and lifecycle environment.") %></br>
9
+ <%= _("To define a new configuration, click the New Config button and fill in the form. After you provide all required information a virt-who configuration script will be generated. You could either install it manually by copying the script or deploy it on a selected target host through Remote Execution.") %></br>
10
+ </p>
11
+ <div class="blank-slate-pf-main-action">
12
+ <%= new_config_link({}, { :class => "btn btn-primary btn-lg" }) %>
13
+ </div>
14
+ </div>
data/config/routes.rb ADDED
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+ namespace :foreman_virt_who_configure do
3
+ resources :configs do
4
+ collection do
5
+ get 'auto_complete_search'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class CreateServiceUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :foreman_virt_who_configure_service_users do |t|
4
+ t.string :encrypted_password, :null => false
5
+ t.references :user, :index => { :name => 'fvwc_su_user_id' }, :null => false
6
+
7
+ t.timestamps :null => false
8
+ end
9
+
10
+ add_foreign_key :foreman_virt_who_configure_service_users, :users, :column => :user_id
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ class CreateConfigs < ActiveRecord::Migration
2
+ def change
3
+ create_table :foreman_virt_who_configure_configs do |t|
4
+ t.integer :interval, :default => 60, :null => true
5
+ # this is not a foreign key but one of 'hostname', 'uuid', 'hwuuid'
6
+ t.string :hypervisor_id, :null => true
7
+ t.integer :listing_mode, :null => true
8
+ t.text :whitelist, :null => true
9
+ t.text :blacklist, :null => true
10
+
11
+ t.references :compute_resource, :index => { :name => 'fvwc_c_compute_resource_id' }, :null => true
12
+ t.references :organization, :index => { :name => 'fvwc_c_oragnization_id' }, :null => true
13
+ t.references :service_user, :index => { :name => 'fvwc_su_service_user' }, :null => true
14
+
15
+ t.timestamps :null => false
16
+ end
17
+
18
+ add_foreign_key :foreman_virt_who_configure_configs, :compute_resources, :column => :compute_resource_id
19
+ add_foreign_key :foreman_virt_who_configure_configs, :taxonomies, :column => :organization_id
20
+ add_foreign_key :foreman_virt_who_configure_configs, :foreman_virt_who_configure_service_users, :column => :service_user_id
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ class AddLabAttrsToConfig < ActiveRecord::Migration
2
+ def change
3
+ add_column :foreman_virt_who_configure_configs, :debug, :boolean, :default => false, :null => true
4
+ add_column :foreman_virt_who_configure_configs, :hypervisor_type, :string, :null => true
5
+ add_column :foreman_virt_who_configure_configs, :hypervisor_server, :string, :null => true
6
+ add_column :foreman_virt_who_configure_configs, :hypervisor_username, :string, :null => true
7
+ add_column :foreman_virt_who_configure_configs, :hypervisor_password, :string, :null => true
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class AddSatelliteUrlToConfig < ActiveRecord::Migration
2
+ def change
3
+ add_column :foreman_virt_who_configure_configs, :satellite_url, :string, :null => true
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class ChangeDefaultInterval < ActiveRecord::Migration
2
+ def up
3
+ change_column :foreman_virt_who_configure_configs, :interval, :integer, :default => 120
4
+ end
5
+
6
+ def down
7
+ change_column :foreman_virt_who_configure_configs, :interval, :integer, :default => 60
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class AddProxyAndNoProxyToConfig < ActiveRecord::Migration
2
+ def up
3
+ add_column :foreman_virt_who_configure_configs, :proxy, :string
4
+ add_column :foreman_virt_who_configure_configs, :no_proxy, :string
5
+ end
6
+
7
+ def down
8
+ remove_column :foreman_virt_who_configure_configs, :no_proxy
9
+ remove_column :foreman_virt_who_configure_configs, :proxy
10
+ end
11
+ end
@@ -0,0 +1,108 @@
1
+ require 'katello'
2
+
3
+ module ForemanVirtWhoConfigure
4
+ class Engine < ::Rails::Engine
5
+ engine_name 'foreman_virt_who_configure'
6
+
7
+ config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
8
+ config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
9
+ config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
10
+ config.autoload_paths += Dir["#{config.root}/test/"]
11
+
12
+ # Add any db migrations
13
+ initializer 'foreman_virt_who_configure.load_app_instance_data' do |app|
14
+ ForemanVirtWhoConfigure::Engine.paths['db/migrate'].existent.each do |path|
15
+ app.config.paths['db/migrate'] << path
16
+ end
17
+ end
18
+
19
+ initializer 'foreman_virt_who_configure.register_plugin', :before => :finisher_hook do |_app|
20
+ Foreman::Plugin.register :foreman_virt_who_configure do
21
+ requires_foreman '>= 1.11'
22
+ requires_foreman_plugin 'katello', '>= 3.0.0'
23
+
24
+ # Add permissions
25
+ security_block :foreman_virt_who_configure do
26
+ permission :view_virt_who_config, :'foreman_virt_who_configure/configs' => [:index, :show, :auto_complete_search], :resource_type => 'ForemanVirtWhoConfigure::Config'
27
+ permission :create_virt_who_config, :'foreman_virt_who_configure/configs' => [:new, :create], :resource_type => 'ForemanVirtWhoConfigure::Config'
28
+ permission :edit_virt_who_config, :'foreman_virt_who_configure/configs' => [:edit, :update], :resource_type => 'ForemanVirtWhoConfigure::Config'
29
+ permission :destroy_virt_who_config, :'foreman_virt_who_configure/configs' => [:destroy], :resource_type => 'ForemanVirtWhoConfigure::Config'
30
+ end
31
+
32
+ reporter_permissions = [ :create_hosts, :edit_hosts, :view_lifecycle_environments, :my_organizations ]
33
+ begin
34
+ if Permission.where(:name => ['create_content_hosts', 'edit_content_hosts']).count > 0
35
+ # old Katello permissions detected (6.2 era)
36
+ reporter_permissions += [:create_content_hosts, :edit_content_hosts]
37
+ end
38
+ rescue ActiveRecord::StatementInvalid
39
+ # permissions could not be loaded, probably migration hasn't been run yet
40
+ end
41
+
42
+ begin
43
+ role 'Virt-who Reporter', reporter_permissions
44
+ rescue ArgumentError
45
+ # could not configure role, some permissions are missing
46
+ end
47
+
48
+ role 'Virt-who Manager', [ :view_virt_who_config, :create_virt_who_config, :edit_virt_who_config, :destroy_virt_who_config ]
49
+ role 'Virt-who Viewer', [ :view_virt_who_config ]
50
+
51
+ # add menu entry
52
+ menu :top_menu, :virt_who_configs,
53
+ url_hash: { controller: 'foreman_virt_who_configure/configs', action: :index },
54
+ caption: N_('Virt-who configurations'),
55
+ parent: :infrastructure_menu,
56
+ after: :compute_resources
57
+
58
+ # add dashboard widget
59
+ # widget 'foreman_virt_who_configure_widget', name: N_('Foreman plugin template widget'), sizex: 4, sizey: 1
60
+ end
61
+ end
62
+
63
+ # Precompile any JS or CSS files under app/assets/
64
+ # If requiring files from each other, list them explicitly here to avoid precompiling the same
65
+ # content twice.
66
+ assets_to_precompile =
67
+ Dir.chdir(root) do
68
+ Dir['app/assets/javascripts/foreman_virt_who_configure/**/*', 'app/assets/stylesheets/foreman_virt_who_configure/**/*'].map do |f|
69
+ f.split(File::SEPARATOR, 4).last.gsub(/\.scss\Z/, '')
70
+ end
71
+ end
72
+ initializer 'foreman_virt_who_configure.assets.precompile' do |app|
73
+ app.config.assets.precompile += assets_to_precompile
74
+ end
75
+ initializer 'foreman_virt_who_configure.configure_assets', group: :assets do
76
+ SETTINGS[:foreman_virt_who_configure] = { assets: { precompile: assets_to_precompile } }
77
+ end
78
+
79
+ # Include concerns in this config.to_prepare block
80
+ config.to_prepare do
81
+ SSO::METHODS.unshift SSO::BasicWithHidden
82
+ end
83
+
84
+ rake_tasks do
85
+ Rake::Task['db:seed'].enhance do
86
+ ForemanVirtWhoConfigure::Engine.load_seed
87
+ end
88
+ end
89
+
90
+ initializer 'foreman_virt_who_configure.register_gettext', after: :load_config_initializers do |_app|
91
+ locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
92
+ locale_domain = 'foreman_virt_who_configure'
93
+ Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
94
+ end
95
+ end
96
+
97
+ def self.with_katello?
98
+ (Katello rescue false) ? true : false
99
+ end
100
+
101
+ def self.table_name_prefix
102
+ "foreman_virt_who_configure_"
103
+ end
104
+
105
+ def self.use_relative_model_naming?
106
+ true
107
+ end
108
+ end