foreman_patch 1.1.5 → 1.1.6.alpha5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_patch/concerns/hosts_controller_extensions.rb +35 -41
  3. data/app/controllers/foreman_patch/react_controller.rb +12 -0
  4. data/app/helpers/foreman_patch/hosts_helper.rb +1 -1
  5. data/app/lib/actions/foreman_patch/cycle/create.rb +5 -1
  6. data/app/lib/actions/foreman_patch/cycle/initiate.rb +5 -1
  7. data/app/lib/actions/foreman_patch/invocation/action.rb +23 -29
  8. data/app/lib/actions/foreman_patch/invocation/patch.rb +16 -7
  9. data/app/lib/actions/foreman_patch/invocation/process_logging.rb +44 -0
  10. data/app/lib/actions/foreman_patch/invocation/proxy_action.rb +52 -0
  11. data/app/lib/actions/foreman_patch/invocation/wait_for_host.rb +4 -29
  12. data/app/lib/actions/foreman_patch/round/patch.rb +5 -1
  13. data/app/lib/actions/foreman_patch/window/publish.rb +5 -1
  14. data/app/lib/actions/foreman_patch/window/resolve_hosts.rb +5 -1
  15. data/app/models/foreman_patch/event.rb +13 -0
  16. data/app/models/foreman_patch/invocation.rb +2 -4
  17. data/app/views/foreman_patch/api/v2/invocations/base.json.rabl +1 -1
  18. data/app/views/foreman_patch/api/v2/invocations/event.json.rabl +3 -0
  19. data/app/views/foreman_patch/api/v2/invocations/show.json.rabl +2 -2
  20. data/app/views/foreman_patch/groups/index.html.erb +1 -1
  21. data/app/views/foreman_patch/invocations/show.html.erb +1 -26
  22. data/app/views/foreman_patch/layouts/react.html.erb +1 -1
  23. data/config/api_routes.rb +26 -28
  24. data/config/routes.rb +40 -29
  25. data/db/migrate/20230706092400_nullify_group_on_delete.rb +11 -0
  26. data/db/migrate/20230707102800_create_invocation_events.rb +16 -0
  27. data/db/seeds.d/100-assign_features_with_templates.rb +6 -12
  28. data/lib/foreman_patch/engine.rb +11 -46
  29. data/lib/foreman_patch/register.rb +119 -0
  30. data/lib/foreman_patch/version.rb +1 -1
  31. data/locale/en/foreman_patch.po +1 -1
  32. data/locale/foreman_patch.pot +1 -1
  33. data/locale/gemspec.rb +1 -1
  34. data/package.json +4 -0
  35. data/public/assets/foreman_patch/cycle_plans-ff3d252119622a68828ff70f4a97328303963002237dbf850e92d6a706e93667.scss +6 -0
  36. data/public/assets/foreman_patch/cycle_plans-ff3d252119622a68828ff70f4a97328303963002237dbf850e92d6a706e93667.scss.gz +0 -0
  37. data/public/assets/foreman_patch/foreman_patch-be2e2ba89548f4a490612e8a6cd1cdebc0473be89f8023a3df7612f05a75d301.css +1 -0
  38. data/public/assets/foreman_patch/foreman_patch-be2e2ba89548f4a490612e8a6cd1cdebc0473be89f8023a3df7612f05a75d301.css.gz +0 -0
  39. data/public/assets/foreman_patch/foreman_patch.json +1 -0
  40. data/public/assets/foreman_patch/plan_edit_windows-9ba20f84f3ecf2c4eb903acd57d30ee3e16f023a79db30bc614aa22f26442ce3.js +1 -0
  41. data/public/assets/foreman_patch/plan_edit_windows-9ba20f84f3ecf2c4eb903acd57d30ee3e16f023a79db30bc614aa22f26442ce3.js.gz +0 -0
  42. data/public/webpack/foreman_patch/bundle-831173d6ae39953b2409.css +1 -0
  43. data/public/webpack/foreman_patch/bundle-831173d6ae39953b2409.css.gz +0 -0
  44. data/public/webpack/foreman_patch/bundle-831173d6ae39953b2409.js +6 -0
  45. data/public/webpack/foreman_patch/bundle-831173d6ae39953b2409.js.gz +0 -0
  46. data/public/webpack/foreman_patch/bundle-831173d6ae39953b2409.js.map +1 -0
  47. data/public/webpack/foreman_patch/bundle-831173d6ae39953b2409.js.map.gz +0 -0
  48. data/public/webpack/foreman_patch/foreman_patch-8909c3e06f012a43f769.css +1 -0
  49. data/public/webpack/foreman_patch/foreman_patch-8909c3e06f012a43f769.css.gz +0 -0
  50. data/public/webpack/foreman_patch/foreman_patch-8909c3e06f012a43f769.js +6 -0
  51. data/public/webpack/foreman_patch/foreman_patch-8909c3e06f012a43f769.js.gz +0 -0
  52. data/public/webpack/foreman_patch/foreman_patch-8909c3e06f012a43f769.js.map +1 -0
  53. data/public/webpack/foreman_patch/foreman_patch-8909c3e06f012a43f769.js.map.gz +0 -0
  54. data/public/webpack/foreman_patch/foreman_patch:global-d71cc6e1e759f04f631a.css +1 -0
  55. data/public/webpack/foreman_patch/foreman_patch:global-d71cc6e1e759f04f631a.css.gz +0 -0
  56. data/public/webpack/foreman_patch/foreman_patch:global-d71cc6e1e759f04f631a.js +6 -0
  57. data/public/webpack/foreman_patch/foreman_patch:global-d71cc6e1e759f04f631a.js.gz +0 -0
  58. data/public/webpack/foreman_patch/foreman_patch:global-d71cc6e1e759f04f631a.js.map +1 -0
  59. data/public/webpack/foreman_patch/foreman_patch:global-d71cc6e1e759f04f631a.js.map.gz +0 -0
  60. data/public/webpack/foreman_patch/manifest.json +31 -0
  61. data/public/webpack/foreman_patch/manifest.json.gz +0 -0
  62. data/public/webpack/foreman_patch/vendor-769bd77f6be96c3c37e1.js +2 -0
  63. data/public/webpack/foreman_patch/vendor-769bd77f6be96c3c37e1.js.gz +0 -0
  64. data/public/webpack/foreman_patch/vendor-769bd77f6be96c3c37e1.js.map +1 -0
  65. data/public/webpack/foreman_patch/vendor-769bd77f6be96c3c37e1.js.map.gz +0 -0
  66. data/webpack/components/Invocations/InvocationsPage.js +1 -1
  67. data/webpack/components/Invocations/index.js +6 -6
  68. data/webpack/components/common/Calendar/Calendar.js +5 -4
  69. data/webpack/components/common/Table/index.js +28 -0
  70. data/webpack/global_index.js +16 -0
  71. data/webpack/index.js +3 -8
  72. data/webpack/src/Components/Invocation/Invocation.js +67 -0
  73. data/webpack/src/Components/Invocation/InvocationLogFooter.js +30 -0
  74. data/webpack/src/Components/Invocation/InvocationLogToolbar.js +80 -0
  75. data/webpack/{components → src/Components}/Invocation/InvocationSelectors.js +0 -3
  76. data/webpack/src/Components/Invocation/index.js +62 -0
  77. data/webpack/src/Components/InvocationStatus.js +50 -0
  78. data/webpack/src/Components/Loading.js +51 -0
  79. data/webpack/src/Extends/index.js +15 -0
  80. data/webpack/src/Router/routes.js +4 -2
  81. data/webpack/src/reducers.js +1 -1
  82. metadata +61 -86
  83. data/app/lib/actions/foreman_patch/cycle/complete.rb +0 -41
  84. data/app/lib/actions/foreman_patch/cycle/plan.rb +0 -73
  85. data/app/lib/actions/foreman_patch/round/plan.rb +0 -33
  86. data/app/lib/actions/foreman_patch/window/plan.rb +0 -43
  87. data/app/models/setting/patching.rb +0 -57
  88. data/app/views/foreman_patch/api/v2/invocations/phase.json.rabl +0 -7
  89. data/config/routes/mount_engine.rb +0 -3
  90. data/config/routes/overrides.rb +0 -10
  91. data/lib/foreman_patch/plugin.rb +0 -47
  92. data/webpack/components/Invocation/Invocation.js +0 -47
  93. data/webpack/components/Invocation/index.js +0 -36
  94. data/webpack/components/common/Terminal/OutputLine.js +0 -26
  95. data/webpack/components/common/Terminal/Terminal.js +0 -115
  96. data/webpack/components/common/Terminal/Terminal.scss +0 -47
  97. data/webpack/src/ForemanPatch.js +0 -11
  98. data/webpack/src/Router/index.js +0 -14
  99. data/webpack/src/index.js +0 -1
  100. /data/webpack/components/Invocations/{Invocations.scss → Invocations.css} +0 -0
  101. /data/webpack/components/common/Calendar/{Calendar.scss → Calendar.css} +0 -0
  102. /data/webpack/{components → src/Components}/Invocation/InvocationActions.js +0 -0
  103. /data/webpack/{components → src/Components}/Invocation/InvocationConsts.js +0 -0
data/config/api_routes.rb CHANGED
@@ -1,43 +1,41 @@
1
1
  ForemanPatch::Engine.routes.draw do
2
- scope :foreman_patch, path: '/foreman_patch' do
3
- namespace :api do
4
- scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v1|v2/, constraints: ApiConstraints.new(version: 2, default: true) do
5
- resources :plans, only: [:index, :show, :create, :update, :destroy] do
6
- resources :window_plans, only: [:index, :create]
7
- resources :cycles, only: [:index, :create]
8
- end
2
+ namespace :api, defaults: { format: 'json' } do
3
+ scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v1|v2/, constraints: ApiConstraints.new(version: 2, default: true) do
4
+ resources :plans, only: [:index, :show, :create, :update, :destroy] do
5
+ resources :window_plans, only: [:index, :create]
6
+ resources :cycles, only: [:index, :create]
7
+ end
9
8
 
10
- resources :window_plans, only: [:index, :show, :update, :destroy]
9
+ resources :window_plans, only: [:index, :show, :update, :destroy]
11
10
 
12
- resources :cycles, only: [:index, :create, :show, :update, :destroy] do
13
- resources :windows, only: [:index, :create]
14
- end
11
+ resources :cycles, only: [:index, :create, :show, :update, :destroy] do
12
+ resources :windows, only: [:index, :create]
13
+ end
15
14
 
16
- resources :windows, only: [:show, :update, :destroy] do
17
- resources :rounds, only: [:index]
18
- member do
19
- post :schedule
20
- end
15
+ resources :windows, only: [:show, :update, :destroy] do
16
+ resources :rounds, only: [:index]
17
+ member do
18
+ post :schedule
21
19
  end
20
+ end
22
21
 
23
- resources :groups, only: [:index, :show, :create, :update, :destroy]
22
+ resources :groups, only: [:index, :show, :create, :update, :destroy]
24
23
 
25
- resources :rounds, only: [:show, :create, :update, :destroy] do
26
- resources :invocations, only: [:index]
24
+ resources :rounds, only: [:show, :create, :update, :destroy] do
25
+ resources :invocations, only: [:index]
27
26
 
28
- member do
29
- get :status
30
- end
27
+ member do
28
+ get :status
31
29
  end
30
+ end
32
31
 
33
- resources :invocations, only: [:show] do
34
- collection do
35
- put 'move'
36
- put 'cancel'
37
- end
32
+ resources :invocations, only: [:show] do
33
+ collection do
34
+ put 'move'
35
+ put 'cancel'
38
36
  end
39
-
40
37
  end
38
+
41
39
  end
42
40
  end
43
41
  end
data/config/routes.rb CHANGED
@@ -1,47 +1,58 @@
1
1
  ForemanPatch::Engine.routes.draw do
2
- scope :foreman_patch, path: '/foreman_patch' do
3
- resources :groups, only: [:index, :new, :create, :edit, :update, :destroy] do
4
- collection do
5
- get 'auto_complete_search'
6
- end
2
+ resources :groups, only: [:index, :new, :create, :edit, :update, :destroy] do
3
+ collection do
4
+ get 'auto_complete_search'
7
5
  end
6
+ end
8
7
 
9
- resources :cycles, only: [:index, :show, :destroy] do
10
- collection do
11
- get 'auto_complete_search'
12
- end
13
-
14
- resources :windows, only: [:new, :create]
8
+ resources :cycles, only: [:index, :show, :destroy] do
9
+ collection do
10
+ get 'auto_complete_search'
15
11
  end
16
12
 
17
- resources :windows, only: [:show, :destroy]
13
+ resources :windows, only: [:new, :create]
14
+ end
18
15
 
19
- resources :rounds, only: [:show] do
20
- collection do
21
- get 'auto_complete_search'
22
- end
16
+ resources :windows, only: [:show, :destroy]
17
+
18
+ resources :rounds, only: [:show] do
19
+ collection do
20
+ get 'auto_complete_search'
23
21
  end
22
+ end
24
23
 
25
- resources :invocations, only: [:show, :destroy] do
26
- collection do
27
- get 'auto_complete_search'
28
- end
24
+ resources :invocations, only: [:show, :destroy] do
25
+ collection do
26
+ get 'auto_complete_search'
29
27
  end
28
+ end
30
29
 
31
- resources :plans, only: [:index, :new, :create, :show, :edit, :update, :destroy] do
32
- resources :window_plans, only: [:new, :create]
33
- member do
34
- post :iterate
35
- end
30
+ resources :plans, only: [:index, :new, :create, :show, :edit, :update, :destroy] do
31
+ resources :window_plans, only: [:new, :create]
32
+ member do
33
+ post :iterate
36
34
  end
35
+ end
37
36
 
38
- resources :window_plans, only: [:edit, :update, :destroy]
37
+ resources :window_plans, only: [:edit, :update, :destroy]
39
38
 
40
- resources :ticket_fields, except: [:show] do
41
- resources :lookup_values, only: [:index, :create, :update, :destroy]
39
+ resources :ticket_fields, except: [:show] do
40
+ resources :lookup_values, only: [:index, :create, :update, :destroy]
41
+ collection do
42
+ get 'auto_complete_search'
43
+ end
44
+ end
45
+
46
+ constraints(id: %r{[^/]+}) do
47
+ resources :hosts, only: [], controller: '/hosts' do
42
48
  collection do
43
- get 'auto_complete_search'
49
+ post 'select_multiple_patch_group'
50
+ post 'update_multiple_patch_group'
44
51
  end
45
52
  end
46
53
  end
47
54
  end
55
+
56
+ Foreman::Application.routes.draw do
57
+ mount ForemanPatch::Engine, at: '/foreman_patch'
58
+ end
@@ -0,0 +1,11 @@
1
+ class NullifyGroupOnDelete < ActiveRecord::Migration[6.0]
2
+ def up
3
+ remove_foreign_key :foreman_patch_rounds, name: :foreman_patch_rounds_by_group
4
+ add_foreign_key :foreman_patch_rounds, :foreman_patch_groups, column: :group_id, name: :foreman_patch_rounds_by_group, on_delete: :nullify
5
+ end
6
+
7
+ def down
8
+ remove_foreign_key :foreman_patch_rounds, name: :foreman_patch_rounds_by_group
9
+ add_foreign_key :foreman_patch_rounds, :foreman_patch_groups, column: :group_id, name: :foreman_patch_rounds_by_group
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ class CreateInvocationEvents < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :foreman_patch_events do |t|
4
+ t.bigint :invocation_id, null: false
5
+ t.integer :sequence, null: false
6
+ t.timestamp :timestamp, null: false
7
+ t.string :event_type, null: false
8
+ t.string :event, null: false
9
+ t.string :meta
10
+
11
+ t.index [:invocation_id, :sequence], unique: true, name: :foreman_patch_events_index
12
+ end
13
+
14
+ add_foreign_key :foreman_patch_events, :foreman_patch_invocations, column: :invocation_id, name: :foreman_patch_events_for_invocation, on_delete: :cascade
15
+ end
16
+ end
@@ -1,16 +1,10 @@
1
1
  User.as_anonymous_admin do
2
- RemoteExecutionFeature.without_auditing do
3
- if Rails.env.test? || Foreman.in_rake?
4
- ForemanPatch.register_rex_features
5
- end
6
-
7
- JobTemplate.without_auditing do
8
- module_template = JobTemplate.find_by(name: 'Power Action - SSH Default')
9
- if module_template && !Rails.env.test? && Setting[:remote_execution_sync_templates]
10
- module_template.sync_feature('power_action')
11
- module_template.organizations << Organization.unscoped.all if module_template.organizations.empty?
12
- module_template.locations << Location.unscoped.all if module_template.locations.empty?
13
- end
2
+ JobTemplate.without_auditing do
3
+ module_template = JobTemplate.find_by(name: 'Power Action - SSH Default')
4
+ if module_template && !Rails.env.test? && Setting[:remote_execution_sync_templates]
5
+ module_template.sync_feature('power_action')
6
+ module_template.organizations << Organization.unscoped.all if module_template.organizations.empty?
7
+ module_template.locations << Location.unscoped.all if module_template.locations.empty?
14
8
  end
15
9
  end
16
10
  end
@@ -1,15 +1,9 @@
1
1
  module ForemanPatch
2
2
  class Engine < ::Rails::Engine
3
- engine_name 'foreman_patch'
4
3
  isolate_namespace ForemanPatch
4
+ engine_name 'foreman_patch'
5
5
 
6
- config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
7
- config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
8
- config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
9
-
10
- initializer 'foreman_patch.configure_assets', group: :assets do
11
- SETTINGS[:foreman_patch] = { assets: { precompile: ['foreman_patch.css'] } }
12
- end
6
+ config.paths['config/routes.rb'].unshift('config/api_routes.rb')
13
7
 
14
8
  # Add any db migrations
15
9
  initializer 'foreman_patch.load_app_instance_data' do |app|
@@ -18,40 +12,29 @@ module ForemanPatch
18
12
  end
19
13
  end
20
14
 
21
- initializer 'foreman_patch.mount_engine', before: :sooner_routes_load do |app|
22
- app.routes_reloader.paths << "#{ForemanPatch::Engine.root}/config/routes/mount_engine.rb"
23
- app.routes_reloader.paths << "#{ForemanPatch::Engine.root}/config/api_routes.rb"
24
- app.routes_reloader.paths.unshift("#{ForemanPatch::Engine.root}/config/routes/overrides.rb")
25
- end
26
-
27
- initializer 'foreman_patch.load_default_settings', before: :load_config_initializers do |_app|
28
- require_dependency File.expand_path('../../../app/models/setting/patching.rb', __FILE__)
29
- end
30
-
31
- initializer 'foreman_patch.require_dynflow', before: 'foreman_tasks.initialize_dynflow' do |_app|
32
- ::ForemanTasks.dynflow.require!
33
- ::ForemanTasks.dynflow.config.eager_load_paths << File.join(ForemanPatch::Engine.root, 'app/lib/actions/foreman_patch')
34
- end
35
-
36
- initializer 'foreman_patch.register_plugin', :before => :finisher_hook do |_app|
37
- require 'foreman_patch/plugin'
15
+ initializer 'foreman_patch.register_plugin', before: :finisher_hook, after: 'katello.register_plugin' do |_app|
16
+ require 'foreman_patch/register'
38
17
  Apipie.configuration.checksum_path += ['/foreman_patch/api/']
39
18
  end
40
19
 
41
- initializer 'foreman_patch.helpers' do |_app|
42
- ActionView::Base.include ForemanPatch::HostsHelper
20
+ initializer 'foreman_patch.register_actions', before: :finisher_hook do |_app|
21
+ ForemanTasks.dynflow.require!
22
+ ForemanTasks.dynflow.config.eager_load_paths << File.join(ForemanPatch::Engine.root, 'app/lib/actions/foreman_patch')
23
+ ForemanTasks.dynflow.eager_load_actions!
43
24
  end
44
25
 
45
26
  # Include concerns in this config.to_prepare block
46
27
  config.to_prepare do
47
28
  # Model extensions
48
- ::Host::Managed.send(:include, ForemanPatch::Concerns::HostManagedExtensions)
29
+ ::Host::Managed.include ForemanPatch::Concerns::HostManagedExtensions
49
30
 
50
31
  # Controller extensions
51
32
  ::HostsController.include ForemanPatch::Concerns::HostsControllerExtensions
52
33
 
53
34
  # Api Controller extensions
54
35
  ::Api::V2::HostsController.include ForemanPatch::Concerns::Api::V2::HostsControllerExtensions
36
+ rescue => e
37
+ Rails.logger.warn "ForemanPatch: skipping engine hook (#{e})"
55
38
  end
56
39
 
57
40
  rake_tasks do
@@ -66,22 +49,4 @@ module ForemanPatch
66
49
  Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
67
50
  end
68
51
  end
69
-
70
- def self.table_name_prefix
71
- 'foreman_patch_'
72
- end
73
-
74
- def self.use_relative_model_naming
75
- true
76
- end
77
-
78
- def self.register_rex_features
79
- RemoteExecutionFeature.register(
80
- :power_action,
81
- N_('Power Action'),
82
- description: N_('Power Action'),
83
- provided_inputs: 'action',
84
- host_action_button: false
85
- )
86
- end
87
52
  end
@@ -0,0 +1,119 @@
1
+ Foreman::Plugin.register :foreman_patch do
2
+ requires_foreman '~> 3.1'
3
+
4
+ register_global_js_file 'global'
5
+
6
+ settings do
7
+ category(:patching, N_('Patching')) do
8
+ setting('host_max_wait_for_up',
9
+ type: :integer,
10
+ description: N_("Maximum seconds to wait for a host after patching restart."),
11
+ default: 600,
12
+ full_name: N_("Max wait for host up"))
13
+ setting('host_patch_timeout',
14
+ type: :integer,
15
+ description: N_("Maximum seconds for a patching invocation to run before timing out"),
16
+ default: nil,
17
+ full_name: N_('Patch Timeout'))
18
+ setting('patch_schedule_time_zone',
19
+ type: :string,
20
+ description: N_('Time zone used to base patch window scheduling off of.'),
21
+ default: 'UTC',
22
+ full_name: N_('Patch Schedule Time Zone'),
23
+ collection: proc { ActiveSupport::TimeZone.all.map { |tz| [ tz.name, tz.name ] }.to_h })
24
+ setting('ticket_api_host',
25
+ type: :string,
26
+ description: N_('Host used for change management tickets'),
27
+ default: nil,
28
+ full_name: N_('Ticket API host'))
29
+ setting('ticket_api_proxy',
30
+ type: :string,
31
+ description: N_('HTTP Proxy to access ticket API host'),
32
+ default: nil,
33
+ full_name: N_('Ticket API HTTP proxy'),
34
+ collection: proc { HttpProxy.all.map { |proxy| [proxy.name, proxy.name_and_url] }.to_h },
35
+ include_blank: N_('no proxy'))
36
+ setting('ticket_api_user',
37
+ type: :string,
38
+ description: N_('User with access to ticket API'),
39
+ default: nil,
40
+ full_name: N_('Ticket API user'))
41
+ setting('ticket_api_password',
42
+ type: :string,
43
+ description: N_('Password for ticket API user'),
44
+ default: nil,
45
+ full_name: N_('Ticket API password'),
46
+ encrypted: true)
47
+ setting('ticket_api_path',
48
+ type: :string,
49
+ description: N_('Ticket API path for REST/CRUD operations'),
50
+ default: nil,
51
+ full_name: N_('Ticket API path'))
52
+ setting('ticket_web_ui_path',
53
+ type: :string,
54
+ description: N_('Path for opening a ticket in the web UI'),
55
+ default: nil,
56
+ full_name: N_('Ticket Web UI path'))
57
+ setting('ticket_label_field',
58
+ type: :string,
59
+ description: N_('Name of the field used for the ticket label'),
60
+ default: nil,
61
+ full_name: N_('Ticket label field'))
62
+ setting('ticket_id_field',
63
+ type: :string,
64
+ description: N_('Name of the field used for the ticket id'),
65
+ default: nil,
66
+ full_name: N_('Ticket ID field'))
67
+ setting('skip_broken_patches',
68
+ type: :boolean,
69
+ description: N_('Skip broken dependencies during patching'),
70
+ default: true,
71
+ full_name: N_('Skip broken patches'))
72
+ end
73
+ end
74
+
75
+ apipie_documented_controllers(["#{ForemanPatch::Engine.root}/app/controllers/foreman_patch/api/v2/*.rb"])
76
+
77
+ # Add permissions
78
+ security_block :foreman_patch do
79
+ end
80
+
81
+ divider :top_menu, caption: N_('Patching'), parent: :content_menu
82
+ menu :top_menu, :groups,
83
+ caption: N_('Groups'),
84
+ engine: ForemanPatch::Engine,
85
+ parent: :content_menu
86
+
87
+ menu :top_menu, :cycles,
88
+ caption: N_('Cycles'),
89
+ engine: ForemanPatch::Engine,
90
+ parent: :content_menu
91
+
92
+ menu :top_menu, :plans,
93
+ caption: N_('Plans'),
94
+ engine: ForemanPatch::Engine,
95
+ parent: :content_menu
96
+
97
+ menu :top_menu, :ticket_fields,
98
+ caption: N_('Ticket Fields'),
99
+ engine: ForemanPatch::Engine,
100
+ parent: :content_menu
101
+
102
+ parameter_filter ::Host::Managed, :group_facet_attributes => [:group_id]
103
+
104
+ describe_host do
105
+ multiple_actions_provider :patch_host_multiple_actions
106
+ overview_fields_provider :patch_host_overview_fields
107
+ end
108
+
109
+ register_facet ForemanPatch::Host::GroupFacet, :group_facet do
110
+ api_view list: 'foreman_patch/api/v2/group_facet/base_with_root',
111
+ single: 'foreman_patch/api/v2/group_facet/show'
112
+ api_docs :group_facet_attributes, ::ForemanPatch::Api::V2::HostGroupsController
113
+ extend_model ForemanPatch::Concerns::GroupFacetHostExtensions
114
+ set_dependent_action :destroy
115
+ end
116
+
117
+ RemoteExecutionFeature.register(:power_action, N_("Power Action"), description: N_("Power Action"), provided_inputs: ['action'])
118
+ RemoteExecutionFeature.register(:ensure_services, N_("Ensure Services"), description: N_("Ensure Services are running"))
119
+ end
@@ -1,3 +1,3 @@
1
1
  module ForemanPatch
2
- VERSION = '1.1.5'.freeze
2
+ VERSION = '1.1.6.alpha5'.freeze
3
3
  end
@@ -5,7 +5,7 @@
5
5
  #, fuzzy
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: version 0.0.1\n"
8
+ "Project-Id-Version: foreman_patch 0.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "POT-Creation-Date: 2014-08-20 08:46+0100\n"
11
11
  "PO-Revision-Date: 2014-08-20 08:54+0100\n"
@@ -5,7 +5,7 @@
5
5
  #, fuzzy
6
6
  msgid ""
7
7
  msgstr ""
8
- "Project-Id-Version: version 0.0.1\n"
8
+ "Project-Id-Version: foreman_patch 0.0.1\n"
9
9
  "Report-Msgid-Bugs-To: \n"
10
10
  "POT-Creation-Date: 2014-08-20 08:46+0100\n"
11
11
  "PO-Revision-Date: 2014-08-20 08:46+0100\n"
data/locale/gemspec.rb CHANGED
@@ -1,2 +1,2 @@
1
1
  # Matches foreman_patch.gemspec
2
- _('TODO: Description of ForemanPatch.')
2
+ _("Foreman Plugin for Managing Patching.")
data/package.json CHANGED
@@ -12,6 +12,7 @@
12
12
  "publish-coverage": "tfm-publish-coverage",
13
13
  "stories": "tfm-stories --plugin",
14
14
  "stories:build": "tfm-build-stories --plugin",
15
+ "stories:deploy": "surge --project .storybook-dist",
15
16
  "create-react-component": "yo react-domain"
16
17
  },
17
18
  "repository": {
@@ -36,6 +37,9 @@
36
37
  "stylelint-config-standard": "^18.0.0",
37
38
  "stylelint": "^9.3.0"
38
39
  },
40
+ "dependencies": {
41
+ "@patternfly/react-log-viewer": "~4.87.100"
42
+ },
39
43
  "peerDependencies": {
40
44
  "@theforeman/vendor": "^8.15.0"
41
45
  }
@@ -0,0 +1,6 @@
1
+ div.event {
2
+ margin: 2px 10px;
3
+ border: 1px solid black;
4
+ border-color: #d1d1d1;
5
+ padding: 2px 3px;
6
+ }
@@ -0,0 +1 @@
1
+ div.event{margin:2px 10px;border:1px solid black;border-color:#d1d1d1;padding:2px 3px}
@@ -0,0 +1 @@
1
+ {"files":{"foreman_patch/plan_edit_windows-9ba20f84f3ecf2c4eb903acd57d30ee3e16f023a79db30bc614aa22f26442ce3.js":{"logical_path":"foreman_patch/plan_edit_windows.js","mtime":"2023-07-21T19:43:20+00:00","size":144,"digest":"be5de0eef57205a38f90eda24c8f8aed707f5d30e8a5abbc3ce9f198ea55a620","integrity":"sha256-vl3g7vVyBaOPkO2iTI+K7XB/XTDopau8POnxmOpVpiA="},"foreman_patch/foreman_patch-be2e2ba89548f4a490612e8a6cd1cdebc0473be89f8023a3df7612f05a75d301.css":{"logical_path":"foreman_patch/foreman_patch.css","mtime":"2023-07-21T19:43:20+00:00","size":87,"digest":"d6fdcb3359ce0ca3edd9a493467bc366b5f2b52a0d3e2fd2b5d1dec121ef31ff","integrity":"sha256-1v3LM1nODKPt2aSTRnvDZrXytSoNPi/StdHewSHvMf8="},"foreman_patch/cycle_plans-ff3d252119622a68828ff70f4a97328303963002237dbf850e92d6a706e93667.scss":{"logical_path":"foreman_patch/cycle_plans.scss","mtime":"2023-07-21T19:43:20+00:00","size":106,"digest":"aa7bb2d36a98d83776b4dd9dd93431ba648b84a37478f93c445eb9bda0f84006","integrity":"sha256-qnuy02qY2Dd2tN2d2TQxumSLhKN0ePk8RF65vaD4QAY="}},"assets":{"foreman_patch/plan_edit_windows.js":"foreman_patch/plan_edit_windows-9ba20f84f3ecf2c4eb903acd57d30ee3e16f023a79db30bc614aa22f26442ce3.js","foreman_patch/foreman_patch.css":"foreman_patch/foreman_patch-be2e2ba89548f4a490612e8a6cd1cdebc0473be89f8023a3df7612f05a75d301.css","foreman_patch/cycle_plans.scss":"foreman_patch/cycle_plans-ff3d252119622a68828ff70f4a97328303963002237dbf850e92d6a706e93667.scss"}}
@@ -0,0 +1 @@
1
+ function remove_window_plan(n){$("#windowPlan"+n).remove()}function edit_window_plan(n){form=null==n?null:$("#windowPlans #windowPlanHidden"+n)}
@@ -0,0 +1 @@
1
+ .pf-c-alert-group{z-index:1100!important}.ReactPasswordStrength .ReactPasswordStrength-input{width:100%;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:2px 30px 2px 6px;font-style:normal}.ReactPasswordStrength .ReactPasswordStrength-strength-desc{padding:2px 10px;right:-62.5%;font-size:12px;width:60%;text-align:left;font-style:normal;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}@media (max-width:991px){.ReactPasswordStrength .ReactPasswordStrength-strength-desc{right:auto;top:30px}}#password_react .form-group.has-error .ReactPasswordStrength-input{border:1px solid #c00}#password_react .is-strength-0 .ReactPasswordStrength-strength-desc{color:#a30000}#password_react .is-strength-0 .ReactPasswordStrength-strength-bar{background:#a30000}#password_react .is-strength-1 .ReactPasswordStrength-strength-desc{color:#ec7a08}#password_react .is-strength-1 .ReactPasswordStrength-strength-bar{background:#ec7a08}#password_react .is-strength-2 .ReactPasswordStrength-strength-desc{color:#f0ab00}#password_react .is-strength-2 .ReactPasswordStrength-strength-bar{background:#f0ab00}#password_react .is-strength-3 .ReactPasswordStrength-strength-desc{color:#3f9c35}#password_react .is-strength-3 .ReactPasswordStrength-strength-bar{background:#3f9c35}#password_react .is-strength-4 .ReactPasswordStrength-strength-desc{color:#1e4f18}#password_react .is-strength-4 .ReactPasswordStrength-strength-bar{background:#1e4f18}.breadcrumb-item{align-items:center}.breadcrumb-item.active{display:inline-flex;max-width:50%}.breadcrumb-item-with-icon img{margin-right:8px}.breadcrumb-bar{padding-top:20px}.breadcrumb-bar .breadcrumb-line{margin-right:-60px;margin-left:-60px}.breadcrumb-bar .breadcrumbs-list{display:block}.breadcrumb-bar .breadcrumbs-list .breadcrumb-switcher{position:relative;display:inline-block;vertical-align:middle;margin-left:10px}.breadcrumb-bar .breadcrumbs-list .breadcrumb-switcher .spinner{float:unset}.pf-c-page__header-tools-group .pf-c-context-selector__menu-search{border-bottom:0}.pf-c-page__header-tools-group .current-taxonomy-v{margin-right:2px}.pf-c-page__header-tools-group .locations_clear,.pf-c-page__header-tools-group .organizations_clear{border-bottom:var(--pf-c-context-selector__menu-search--BorderBottomWidth) solid var(--pf-c-context-selector__menu-search--BorderBottomColor)}.pf-c-page__header-tools-group .pf-c-context-selector__menu-footer>a{color:#06c}.notifications_container{position:static;margin-top:-1px;color:var(--pf-global--palette--black-1000);top:48px}.notifications_container .fa-bell,.notifications_container .fa-bell-o{color:#fff;font-size:15px;cursor:pointer}.notifications_container .fa-bell{position:relative}.notifications_container .fa-bell:after{width:0;height:0;border:4px solid #c00;padding:0;content:"";border-radius:50%;position:absolute;top:-3px;right:-3px}.notifications_container .drawer-pf{top:47px;max-height:calc(100vh - 78px);overflow:hidden;display:flex;flex-direction:column}.notifications_container .drawer-pf .drawer-pf-title{position:relative}.notifications_container .drawer-pf .panel-group{display:flex;flex-direction:column;position:static;bottom:auto;top:auto;overflow-y:auto}.notifications_container .drawer-pf .panel-group .blank-slate-pf-title{font-size:18px}.notifications_container .drawer-pf .panel-group .panel.panel-default.expanded{flex:1 1 auto;display:flex;flex-direction:column}.notifications_container .drawer-pf .panel-group .panel-collapse.in{min-height:0;overflow-y:auto}.notifications_container .drawer-pf .panel-group .panel-collapse.in .panel-body{display:block}.notifications_container .drawer-pf .panel-group .panel-collapse.in .panel-body .dropdown-menu-right{position:absolute}.notifications_container .drawer-pf .panel-group .panel-collapse.in .panel-body .dropdown-menu-right .btn-group{z-index:1}.notifications_container .drawer-pf .drawer-pf-action{padding:10px 0;position:relative;position:sticky;position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;bottom:0;z-index:10;background-color:#fff;border-top:1px solid #d1d1d1}.notifications_container .drawer-pf .drawer-pf-action-link{align-self:center;margin:0}.notifications_container #no-notifications-container{padding:20px;text-align:center;background:#ededed;font-size:15px}@keyframes blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.blink-image{-moz-animation:blink normal 1s infinite ease-in-out;-webkit-animation:blink 1s ease-in-out infinite normal;-ms-animation:blink normal 1s infinite ease-in-out;animation:blink 1s ease-in-out infinite normal}.navbar-pf-vertical .nav-item-iconic .blink-image,.navbar-pf-vertical .nav-item-iconic:hover .blink-image{color:#f9d67a}#data-toolbar{grid-column:2/3;margin-left:0;display:flex;justify-content:space-between;flex-wrap:wrap}#data-toolbar .pf-c-page__header-tools-item,#data-toolbar .pf-c-spinner{margin-left:10px}@media (max-width:calc(992px + 70px)){#data-toolbar{justify-content:flex-end}#data-toolbar .header-tool-item-hidden-lg{display:none}}@media (max-width:768px){.navbar-pf-vertical{display:flex}.navbar-pf-vertical .pf-c-page__header{grid-template-columns:1fr 3fr}}.secondary-nav-item-pf>.nav-pf-secondary-nav{background-color:#026991}.secondary-nav-item-pf>.nav-pf-secondary-nav .mobile-active a .list-group-item-value{background-color:#024d6c}.secondary-nav-item-pf>.nav-pf-secondary-nav .list-group-item a{background-color:#026991}.secondary-nav-item-pf>.nav-pf-secondary-nav .list-group-item a:hover .list-group-item-value{background-color:#024d6c}.secondary-nav-item-pf>.nav-pf-secondary-nav .list-group-item span{color:#fff}#react-app-root .react-container{margin-right:auto;margin-left:200px;padding-left:20px;padding-right:20px}#react-app-root .nav-pf-vertical{background-color:#024d6c}#react-app-root .nav-pf-vertical .list-group .list-group-item a span{color:#c7c7c7}#react-app-root .nav-pf-vertical .list-group .list-group-item a:hover{background-color:#026991}#react-app-root .nav-pf-vertical .list-group .list-group-item a:hover span{color:#fff}#react-app-root .nav-pf-vertical .list-group .list-group-item a:after{color:#c7c7c7}#react-app-root .nav-pf-vertical .list-group .list-group-item:hover a{background-color:#026991}#react-app-root .nav-pf-vertical .list-group .list-group-item:hover a span{color:#fff}#react-app-root .nav-pf-vertical .list-group .list-group-item.active a{background-color:#026991}#react-app-root .nav-pf-vertical .list-group .list-group-item.active a span{color:#fff}#react-app-root .secondary-nav-item-pf.hidden-nav-lg{display:none}@media (max-width:calc(992px + 70px)){#react-app-root .secondary-nav-item-pf.hidden-nav-lg{display:block}}@media only screen and (max-width:768px){#rails-app-content,#react-app-root .react-container{margin-left:0}}#account_menu{outline:none}#vertical-spinner{margin-top:15px;margin-left:5px}.navbar-header{width:42px}#navbar-header{left:42px}#data-toolbar{padding:0}#data-toolbar,.pf-c-page{background-color:transparent}.collapsed-nav #rails-app-content,.collapsed-nav #react-app-root .react-container{margin-left:75px}@media only screen and (max-width:768px){.collapsed-nav #rails-app-content,.collapsed-nav #react-app-root .react-container{margin-left:0}}#diff-radio-buttons{margin-bottom:5px;float:right}#diff-radio-buttons .diff-button{text-transform:capitalize;width:60px}#diff-table{border:1px solid #d1d1d1;max-height:400px;overflow:auto;clear:both}#diff-table .diff-line{line-height:1.7;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}#diff-table .diff-gutter{border-left:1px solid #e8e9ea}#diff-table .diff-gutter.diff-gutter-insert{background-color:#cdffd8}#diff-table .diff-hunk-header{border:1px solid #e8e9ea}#diff-table .diff-code-insert{background-color:#e6ffed}#diff-table .diff-code-insert mark.diff-code-edit{background-color:#acf2bd}#diff-table .diff-code-delete{background-color:#ffeef0}#diff-table .diff-code-delete mark.diff-code-edit{background-color:#fdb8c0}.diff-modal .modal-header #diff-radio-buttons{margin-right:15px;margin-bottom:unset;float:right;overflow:hidden}.diff-modal .modal-dialog{width:900px}.diff-modal .diff-modal-body{padding:unset}.diff-modal #diff-modal-h4{float:left;margin:0;padding-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:700px}.diff-modal .diff-modal-button{margin-top:3px;float:right}.select-body-container .select-input-search input{width:100%!important}label.safemode-rendering-checkbox{font-size:14px;font-weight:var(--pf-global--link--FontWeight);margin:5px;cursor:pointer}input#safemode-rendering-checkbox{margin:10px 5px 10px 0}.ace_content{font-family:monospace!important}.mask-editor .ace_content{font-family:AllBullets,monospace}.popover-content{padding:2px}.popover-content .dropdown{text-align:center;margin-bottom:5px}.popover-content .dropdown button{color:#1e1d24}.popover-content .dropdown #settings-dropdown{min-width:unset}.editor-modal .modal-content{height:-webkit-fill-available}.editor-modal .modal-header #diff-radio-buttons{margin-bottom:unset;margin-right:15px}.editor-modal .modal-header #diff-radio-buttons button{outline:none}.editor-modal .modal-header #editor-modal-h4{margin-top:4px;margin-bottom:0;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:700px}.editor-modal .modal-dialog{padding:15px;width:auto!important}.editor-modal .modal-dialog .input.modal-body{background-color:#363636}.editor-modal .modal-dialog .modal-body{padding:0;overflow:auto;height:100%}.editor-modal .modal-dialog .modal-body .ace_editor{border:none!important}.editor-modal .modal-dialog .modal-body #diff-table{max-height:80vh}.editor-modal .modal-dialog .modal-body #diff-table div{border:none}.editor-modal .modal-dialog .input.modal-header.monokai,.editor-modal .modal-dialog .preview.modal-header.monokai{background-color:#363636}.editor-modal .modal-dialog .input.modal-header.monokai .pficon-close,.editor-modal .modal-dialog .input.modal-header.monokai h4,.editor-modal .modal-dialog .preview.modal-header.monokai .pficon-close,.editor-modal .modal-dialog .preview.modal-header.monokai h4{color:#fff}.navbar-editor{padding:2px 2px 0!important;margin:10px 0 0!important;height:40px;min-height:unset!important}.navbar-editor .nav-tabs-pf-secondary{float:left;background:unset!important;border-bottom:unset;display:flex}.navbar-editor .nav-tabs-pf-secondary a{background:unset!important}.navbar-editor .nav-tabs-pf-secondary .dropdown-menu>li>a:hover{background-color:#08c!important}.navbar-editor .nav-tabs-pf-secondary #editor-select-container{width:260px;margin-top:4px}.navbar-editor .nav-tabs-pf-secondary #editor-select-container .select-container-pf{border-radius:2px}.navbar-editor .nav-tabs-pf-secondary #outdated-preview-alert{display:flex;align-items:center}.navbar-editor .nav-tabs-pf-secondary #outdated-preview-alert .alert{padding:0;display:flex;margin:0 5px;height:24px;align-items:center;border-radius:2px}.navbar-editor .nav-tabs-pf-secondary #outdated-preview-alert .alert .pficon-warning-triangle-o{position:inherit;font-size:15px;top:0;left:0;margin:0 5px}.navbar-editor .nav-tabs-pf-secondary #preview-spinner{align-items:center;display:flex;margin-left:10px}.navbar-editor .btn-group{padding:4px}.navbar-editor .btn[disabled]{cursor:unset}.navbar-editor #editor-dropdowns{float:right}.navbar-editor #editor-dropdowns #diff-radio-buttons{float:left;margin-right:5px}.navbar-editor #editor-dropdowns #diff-radio-buttons button{outline:none}.navbar-editor #editor-dropdowns #divider{float:left;font-size:18px;margin-top:6px;font-weight:200;color:#c5c5c5;cursor:default;user-select:none}.navbar-editor #editor-dropdowns button:enabled :not(#diff-radio-buttons){color:#1e1d24}.navbar-editor #editor-dropdowns button:hover:enabled :not(#diff-radio-buttons){color:#4b4f5e!important}.navbar-editor .preview_type_ahead{float:right;padding:4px}.navbar-editor .preview_type_ahead input{width:275px}.navbar-editor .preview_type_ahead .rbt-aux{right:0}#hide-btn{width:40px!important;font-size:15px;margin-top:-4px}#fullscreen-btn{font-size:14px}#cog-btn,#fullscreen-btn{width:40px!important;margin-bottom:2px}#cog-btn{font-size:16px}#import-btn,#undo-btn{width:40px!important;font-size:16px}.ace_editor_form{position:relative!important;height:360px!important;width:100%!important;border:0!important;font-family:monospace!important}.ace_editor_modal{width:100%!important;height:80vh!important}#editor-container{display:flex;flex-direction:column}#editor-container div.navbar-editor .btn-link{outline:none}#editor-container #editor .ace_gutter .ace_gutter-layer{margin-top:5px!important}#editor-container #editor .ace_gutter .ace_gutter-active-line,#editor-container #editor .ace_scroller{margin-top:5px}#editor-container #diff-table{height:360px}#editor-container #diff-table .diff{border-bottom:1px solid #e8e9ea}#preview_error_toast{display:block;margin-bottom:0}#cog-popover .cog-popover-dropdown{display:flex;align-items:center}#cog-popover .cog-popover-dropdown .cog-popover-dropdown-title{width:50px;margin-bottom:5px;margin-right:10px;font-weight:600}#cog-popover .cog-popover-dropdown .dropdown{margin-left:auto}#cog-popover .cog-popover-dropdown .dropdown .dropdown-menu{min-width:80px}#cog-popover .cog-popover-dropdown .dropdown #keybindings-dropdown,#cog-popover .cog-popover-dropdown .dropdown #mode-dropdown,#cog-popover .cog-popover-dropdown .dropdown #themes-dropdown{width:80px;text-align:left}#cog-popover .cog-popover-dropdown .dropdown #keybindings-dropdown .caret,#cog-popover .cog-popover-dropdown .dropdown #mode-dropdown .caret,#cog-popover .cog-popover-dropdown .dropdown #themes-dropdown .caret{position:absolute;right:2px;top:7px}#loading-audits{display:flex;margin-top:100px}#loading-audits .spinner.spinner-lg{border-width:7px;height:60px;width:60px}.message-box-root{-ms-flex:1 1;flex:1 1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.message-box-content{-ms-flex:0 0 30px;flex-basis:30px;text-align:center}.message-box-icon{font-size:22px}.message-box-message{color:#363636;font-size:12px;text-transform:capitalize}.loader-root{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;-ms-flex:1;flex:1}.foreman-autocomplete{position:relative}.foreman-autocomplete .autocomplete-aux{position:absolute;right:4px;top:4px;z-index:10}.foreman-autocomplete .autocomplete-aux .autocomplete-clear-button{margin-right:2px;font-size:12px;color:#72767b}.foreman-autocomplete .autocomplete-aux .autocomplete-clear-button:hover{color:#00659c;text-decoration:none}.foreman-autocomplete .autocomplete-focus-shortcut{position:absolute;top:4px;left:4px;padding:0 4px;user-select:none;font-size:12px;font-weight:700;z-index:10;border-radius:5px;width:15px;height:19px;text-align:center;line-height:17px;border:1px solid rgba(114,118,123,.5);color:#72767b}.foreman-autocomplete .autocomplete-focus-shortcut .hide{display:none}.foreman-autocomplete .autocomplete-error{position:absolute;color:#a30000}.rbt-aux{right:12px;z-index:10}.rbt-menu{width:auto;min-width:-webkit-fill-available!important}.search-bar{width:100%}.search-bar .autocomplete-search-btn-text{display:inline}.search-bar .search-input.use-shortcuts{padding-left:21px}.search-bar .rbt-input-hint input{display:none}.search-bar .scrollable-dropdown{max-width:250px}.search-bar li{font-size:16px}.search-bar input{font-size:16px;height:36px;border-bottom-color:var(--pf-global--BorderColor--200);border-top-color:var(--pf-global--BorderColor--300);border-left-color:var(--pf-global--BorderColor--300);border-left-width:.7px;border-top-width:0}.search-bar input::-webkit-input-placeholder{font-style:normal}.search-bar input:-moz-placeholder,.search-bar input::-moz-placeholder{font-style:normal}.search-bar input:-ms-input-placeholder{font-style:normal}.search-bar .foreman-autocomplete{width:100%}.search-bar .foreman-autocomplete .autocomplete-focus-shortcut{top:8px;font-size:8px}.search-bar .foreman-autocomplete .autocomplete-aux{top:6px;font-size:16px}.search-bar .foreman-autocomplete .autocomplete-aux .autocomplete-clear-button{font-size:16px}.pf-c-empty-state{margin-top:100px}.pf-c-empty-state .empty-state-icon{font-size:var(--pf-global--icon--FontSize--xl)}.blank-slate-pf{margin-top:100px!important}#loading-page{justify-content:center;display:flex;margin-top:100px}#loading-page .loading-state-pf{display:flex;flex-direction:column}#audit-list .apply-comma:not(:last-child):after{white-space:pre;content:", "}#audit-list .list-view-pf-view{margin-top:10px}#audit-list .list-view-pf-body>.list-view-pf-description{width:30%;flex:1 0 30%}#audit-list .list-group-item.list-view-pf-expand-active{background-color:#def3ff}#audit-list .list-group-item:hover{background-color:#edf8ff}#audit-list .list-group-item .list-group-item-header .list-group-item-heading{flex:1 0 calc(30% - 20px);width:calc(30% - 20px)}#audit-list .list-group-item .list-group-item-header .list-group-item-heading .user-grid{display:grid}#audit-list .list-group-item .list-group-item-header .list-group-item-heading .user-grid .user-info{font-weight:700}#audit-list .list-group-item .list-group-item-header .list-view-pf-additional-info-item{font-weight:600;flex:2;justify-content:flex-end;text-align:right;max-width:inherit}#audit-list .list-group-item .list-group-item-header .list-view-pf-additional-info-item:last-child{justify-content:flex-start;text-align:left;flex-grow:3;overflow:hidden;overflow-wrap:break-word;text-overflow:ellipsis;white-space:nowrap;word-break:break-all}#audit-list .list-group-item .list-group-item-header .list-view-pf-actions{margin-bottom:0;margin-top:22px}#audit-list .list-group-item .list-group-item-header .list-view-pf-expand{margin-right:35px;margin-bottom:10px;margin-top:18px}#audit-list .list-group-item-text{width:calc(65% - 40px)}#audit-list .list-group-item-text .list-view-pf-description .list-group-item-text{padding-left:30px}#audit-list .main-info-minimize-padding>.list-group-item-header .list-view-pf-main-info{padding-bottom:10px;padding-top:12px}#audit-list .main-info-maximize-padding>.list-group-item-header .list-view-pf-main-info{padding-bottom:21px;padding-top:21px}#audit-list .gray-text{color:#999}#audit-list .list-group-item-container{padding-top:20px;padding-left:35px}#audit-list .list-group-item-container .actions-btns{padding-bottom:15px}#audit-list .list-group-item-container .actions-btns .btn{float:right;margin-left:10px}#audit-list .list-group-item-container .request-uuid-column,#audit-list .list-group-item-container .taxonomy-section{padding-left:50px;word-break:break-word}#audit-list .list-group-item-container .request-uuid-column .value{font-weight:700}#audit-list .list-group-item-container .grid-container .details-row{border:1px solid #d1d1d1;margin-top:15px}#audit-list .list-group-item-container .grid-container .comment-section p{margin-left:10px;margin-right:15px}#audit-list .list-group-item-container .grid-container .comment-section .comment-title,#audit-list .list-group-item-container .grid-container .table-inline-changes{margin-top:10px}#audit-list .list-group-item-container .grid-container .table-changes{margin-top:15px}#audit-list .list-group-item-container .grid-container .table-changes td p{margin:0 15px}#audit-list .list-group-item-container .grid-container .table-changes,#audit-list .list-group-item-container .grid-container .table-inline-changes{word-break:break-word;font-weight:600}#audit-list .list-group-item-container .grid-container .table-changes td,#audit-list .list-group-item-container .grid-container .table-inline-changes td{padding:5px}#audit-list .list-group-item-container .grid-container .table-changes td:first-child,#audit-list .list-group-item-container .grid-container .table-inline-changes td:first-child{padding-left:30px}#audit-list .list-group-item-container .grid-container .table-hover>tbody>tr:hover,#audit-list .list-group-item-container .grid-container .table-hover>tbody>tr:hover>td{border:1px solid #d1d1d1}#audit-list .list-group-item-container .grid-container .table-hover>tbody>tr:hover,#audit-list .list-group-item-container .grid-container .table-hover>tbody>tr:hover>td:first-child{background-color:#fff}#audit-list .list-group-item-container .grid-container .show-old{background-color:#ffeef0}#audit-list .list-group-item-container .grid-container .show-new,#audit-list .list-group-item-container .grid-container .table-inline-changes.table-hover.show-new>tbody>tr:hover>td,#audit-list .list-group-item-container .grid-container .table-inline-changes.table-hover.show-new>tbody>tr:hover>th{background-color:#e6ffed}#audit-list .list-group-item-container .grid-container .table-inline-changes.table-hover.show-old>tbody>tr:hover>td,#audit-list .list-group-item-container .grid-container .table-inline-changes.table-hover.show-old>tbody>tr:hover>th{background-color:#ffeef0}#audit-list .list-group-item-container .grid-container .editor-section{margin-top:15px}#audit-list .list-group-item-container .grid-container .editor-section .editor.ace_editor{border:1px solid #d1d1d1}#audits-empty-table{line-height:2;font-size:50px}#pagination .form-group{align-items:center}#pagination span{margin-left:5px}.clipboard-copy{display:grid;padding:15px 0}.clipboard-copy textarea{margin-bottom:15px}.clipboard-copy button{max-width:200px}.bootstrap-datetimepicker-widget.dropdown-menu.top{margin-top:-10px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom{margin-top:10px!important}.bootstrap-datetimepicker-widget.dropdown-menu{max-width:20em}.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{max-width:40em}.bootstrap-datetimepicker-widget.dropdown-menu .arrow{left:10%!important}.bootstrap-datetimepicker-widget.dropdown-menu .popover-content{color:#292e34}.bootstrap-datetimepicker-widget.dropdown-menu .clock-btn{border:0;box-shadow:none;color:#363636;display:block;padding-bottom:4px;padding-top:4px}.bootstrap-datetimepicker-widget.dropdown-menu table td .today-button{padding:0 16px 0 0;border:0;background-color:transparent}.bootstrap-datetimepicker-widget.dropdown-menu table td .today-button span{height:24px;line-height:24px;color:#0088ce}span.clear-button{background:none;border-left:none;color:#72767b}input.date-time-input{border-right:none}.row>.datepicker>div{display:block}.bootstrap-datetimepicker-widget table td{vertical-align:inherit}.timepicker-picker tr:nth-child(2) td{background-color:#def3ff!important}.field-help{margin-right:-5px}.card-pf-aggregate-status-notifications .aggregate-text{font-size:16px}.disabled{color:var(--pf-global--disabled-color--200)}.status-success{color:var(--pf-global--success-color--100)}.status-error{color:var(--pf-global--danger-color--100)}.status-warning{color:var(--pf-global--warning-color--100)}.padded-divider{padding:10px 0}.disabled-text{color:var(--pf-global--disabled-color--200);font-size:small}.power-on{color:var(--pf-global--success-color--100)}.power-off{color:var(--pf-global--danger-color--100)}.power-na{color:var(--pf-global--disable-color--200)}.details-cards,.details-tab{padding-top:20px}.details-tab .pf-c-accordion{height:15vh;overflow-y:auto;overflow-x:hidden}.pf-gray-background{background:var(--pf-global--BackgroundColor--200)}.host-details-header-section{margin-left:-20px;margin-right:-20px;background:var(--pf-global--BackgroundColor--100)}.host-details-header-section .header-top{margin:0 24px 16px;padding-top:16px}.host-details-header-section .header-top .host-details-breadcrumb{margin:0 0 24px}.host-details-header-section .header-top .hostname-skeleton-rapper{margin-bottom:8px}.host-details-header-section .header-top .hostname-skeleton-rapper .hostname-wrapper{display:inline-flex;max-width:60%;margin-right:8px}.host-details-header-section .header-top .hostname-skeleton-rapper .hostname-wrapper .hostname-truncate{text-overflow:ellipsis;max-width:100%;white-space:nowrap;overflow:hidden;display:inline-block}.host-details-header-section .pf-c-alert{margin:16px 24px}.host-details-header-section .host-details-tabs{margin:0 24px}.host-details-header-section .tab-width-138{max-width:calc(100vw - 138px)}@media screen and (max-width:767px){.host-details-header-section .tab-width-138{max-width:calc(100vw - 64px)}}.host-details-header-section .tab-width-263{max-width:calc(100vw - 263px)}@media screen and (max-width:767px){.host-details-header-section .tab-width-263{max-width:calc(100vw - 64px)}}.host-details-header-section .host-details-tab-item{padding:16px 24px;background:var(--pf-global--BackgroundColor--200)}.host-details-header-section .host-details-tab-item .pf-c-card{height:100%}.registration_commands_form input[type=checkbox]{margin:auto}.status-count{display:grid}.host-statuses-page{margin-top:20px}.error-boundary-foreman-app .empty-state-icon{color:var(--pf-global--palette--red-200)}.error-boundary-foreman-app .pf-c-clipboard-copy__expandable-content{white-space:pre-wrap}.host-power-status.on{color:#3f9c35}.host-power-status.off{color:#c00}.host-power-status.na{color:#8b8d8f}.text-overflow-pf{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.foreman-numeric-input{position:relative;display:flex}.foreman-numeric-input .foreman-numeric-input-input-wrap{width:100%}.foreman-numeric-input .foreman-numeric-input-input-wrap input{flex:1;height:26px;width:100%;padding-right:5px;box-sizing:border-box;font-size:inherit;border:1px solid #ccc;border-radius:4px;padding-left:5px;display:block;appearance:none;line-height:normal}.foreman-numeric-input .foreman-numeric-input-input-wrap input:focus:focus{border-color:#66afe9;outline:0!important;-webkit-box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 8px rgba(102,175,233,.6)}.foreman-numeric-input .foreman-numeric-input-input-wrap input:hover{border-color:#7dc3e8}.foreman-numeric-input .foreman-numeric-input-input-wrap input[disabled]{box-shadow:none;border-color:#ccc;color:#8b8d8f;cursor:not-allowed}.foreman-numeric-input .foreman-numeric-input-handler-down-inner,.foreman-numeric-input .foreman-numeric-input-handler-up-inner{position:absolute;top:50%;left:50%;border-style:solid;margin:-.3ex 0 0 -.56ex}.foreman-numeric-input .foreman-numeric-input-handler-up-inner{border-width:0 .6ex .6ex;border-color:transparent transparent #72767b}.foreman-numeric-input .foreman-numeric-input-handler-down-inner{border-width:.6ex .6ex 0;border-color:#72767b transparent transparent}.foreman-numeric-input .foreman-numeric-input-handler-up{top:2px;bottom:50%;border-radius:2px 2px 0 0;border-width:1px 1px 0}.foreman-numeric-input .foreman-numeric-input-handler-down{top:50%;bottom:2px;border-radius:0 0 2px 2px;border-width:0 1px 1px}.foreman-numeric-input .foreman-numeric-input-handler-down,.foreman-numeric-input .foreman-numeric-input-handler-up{position:absolute;right:2px;width:2.26ex;border-color:#d1d1d1;border-style:solid;text-align:center;cursor:default;transition:all .1s ease 0s;background:#d1d1d1;box-shadow:inset -1px -1px 3px #d1d1d1,inset 1px 1px 3px #ededed}.foreman-numeric-input .foreman-numeric-input-handler-down:hover,.foreman-numeric-input .foreman-numeric-input-handler-up:hover{background:#bbb}.foreman-numeric-input .foreman-numeric-input-handler-down:active,.foreman-numeric-input .foreman-numeric-input-handler-up:active{background:#8b8d8f;box-shadow:inset 0 1px 3px #d1d1d1,inset -1px -1px 4px #ededed}.foreman-numeric-input .foreman-numeric-input-handler-down:disabled,.foreman-numeric-input .foreman-numeric-input-handler-up:disabled{opacity:.5;box-shadow:none;cursor:not-allowed}.disks-container{padding:0 150px;display:flex;flex-direction:column}.disks-container .disk-container{display:flex;padding:20px 0;margin-top:20px;flex-direction:column;border-top:1px solid #ededed}.disks-container .disk-container .close{background-color:red;color:#fff;padding:5px 10px;border-radius:5px}.disks-container .disk-container .form-group{display:flex;align-items:center}.disks-container .disk-container .common-checkbox,.disks-container .disk-container .control-label,.disks-container .disk-container .delete-volume-container{text-align:left}.controller-header{display:flex;width:100%;align-items:top}.controller-header .controller-selected-container{display:flex;justify-content:flex-end}.controller-header .controller-selected-container>label{margin-left:5px}.controller-header .controller-type-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.controller-header .btn-add-disk{margin-top:10px}.vmware-storage-container{display:flex;flex-direction:column}.vmware-storage-container .storage-header{padding:10px 0;margin-bottom:10px;border-bottom:1px solid #ededed}.vmware-storage-container .storage-header .storage-title{font-size:18px}.vmware-storage-container .storage-header .storage-controller-buttons{text-align:right}.vmware-storage-container .storage-header .storage-controller-buttons>button{margin-left:20px}.vmware-storage-container .controller-container{margin-bottom:20px}.fact-chart .modal-body{min-height:500px;display:flex;align-items:center;justify-content:center}.pointer{cursor:pointer}.bar-chart-medium-width{min-width:450px}:root{--pf-global--palette--black-100:#fafafa;--pf-global--palette--black-150:#f5f5f5;--pf-global--palette--black-200:#f0f0f0;--pf-global--palette--black-300:#d2d2d2;--pf-global--palette--black-400:#b8bbbe;--pf-global--palette--black-500:#8a8d90;--pf-global--palette--black-600:#6a6e73;--pf-global--palette--black-700:#4f5255;--pf-global--palette--black-800:#3c3f42;--pf-global--palette--black-850:#212427;--pf-global--palette--black-900:#151515;--pf-global--palette--black-1000:#030303;--pf-global--palette--blue-50:#e7f1fa;--pf-global--palette--blue-100:#bee1f4;--pf-global--palette--blue-200:#73bcf7;--pf-global--palette--blue-300:#2b9af3;--pf-global--palette--blue-400:#06c;--pf-global--palette--blue-500:#004080;--pf-global--palette--blue-600:#002952;--pf-global--palette--blue-700:#001223;--pf-global--palette--cyan-50:#f2f9f9;--pf-global--palette--cyan-100:#a2d9d9;--pf-global--palette--cyan-200:#73c5c5;--pf-global--palette--cyan-300:#009596;--pf-global--palette--cyan-400:#005f60;--pf-global--palette--cyan-500:#003737;--pf-global--palette--cyan-600:#002323;--pf-global--palette--cyan-700:#000f0f;--pf-global--palette--gold-50:#fdf7e7;--pf-global--palette--gold-100:#f9e0a2;--pf-global--palette--gold-200:#f6d173;--pf-global--palette--gold-300:#f4c145;--pf-global--palette--gold-400:#f0ab00;--pf-global--palette--gold-500:#c58c00;--pf-global--palette--gold-600:#795600;--pf-global--palette--gold-700:#3d2c00;--pf-global--palette--green-50:#f3faf2;--pf-global--palette--green-100:#bde5b8;--pf-global--palette--green-200:#95d58e;--pf-global--palette--green-300:#6ec664;--pf-global--palette--green-400:#5ba352;--pf-global--palette--green-500:#3e8635;--pf-global--palette--green-600:#1e4f18;--pf-global--palette--green-700:#0f280d;--pf-global--palette--light-blue-100:#beedf9;--pf-global--palette--light-blue-200:#7cdbf3;--pf-global--palette--light-blue-300:#35caed;--pf-global--palette--light-blue-400:#00b9e4;--pf-global--palette--light-blue-500:#008bad;--pf-global--palette--light-blue-600:#005c73;--pf-global--palette--light-blue-700:#002d39;--pf-global--palette--light-green-100:#e4f5bc;--pf-global--palette--light-green-200:#c8eb79;--pf-global--palette--light-green-300:#ace12e;--pf-global--palette--light-green-400:#92d400;--pf-global--palette--light-green-500:#6ca100;--pf-global--palette--light-green-600:#486b00;--pf-global--palette--light-green-700:#253600;--pf-global--palette--orange-100:#f4b678;--pf-global--palette--orange-200:#ef9234;--pf-global--palette--orange-300:#ec7a08;--pf-global--palette--orange-400:#c46100;--pf-global--palette--orange-500:#8f4700;--pf-global--palette--orange-600:#773d00;--pf-global--palette--orange-700:#3b1f00;--pf-global--palette--purple-50:#f2f0fc;--pf-global--palette--purple-100:#cbc1ff;--pf-global--palette--purple-200:#b2a3ff;--pf-global--palette--purple-300:#a18fff;--pf-global--palette--purple-400:#8476d1;--pf-global--palette--purple-500:#6753ac;--pf-global--palette--purple-600:#40199a;--pf-global--palette--purple-700:#1f0066;--pf-global--palette--red-50:#faeae8;--pf-global--palette--red-100:#c9190b;--pf-global--palette--red-200:#a30000;--pf-global--palette--red-300:#7d1007;--pf-global--palette--red-400:#470000;--pf-global--palette--red-500:#2c0000;--pf-global--palette--white:#fff;--pf-global--BackgroundColor--100:#fff;--pf-global--BackgroundColor--200:#f0f0f0;--pf-global--BackgroundColor--light-100:#fff;--pf-global--BackgroundColor--light-200:#fafafa;--pf-global--BackgroundColor--light-300:#f0f0f0;--pf-global--BackgroundColor--dark-100:#151515;--pf-global--BackgroundColor--dark-200:#3c3f42;--pf-global--BackgroundColor--dark-300:#212427;--pf-global--BackgroundColor--dark-400:#4f5255;--pf-global--BackgroundColor--dark-transparent-100:rgba(3,3,3,0.62);--pf-global--BackgroundColor--dark-transparent-200:rgba(3,3,3,0.32);--pf-global--Color--100:#151515;--pf-global--Color--200:#6a6e73;--pf-global--Color--300:#3c3f42;--pf-global--Color--400:#8a8d90;--pf-global--Color--light-100:#fff;--pf-global--Color--light-200:#f0f0f0;--pf-global--Color--light-300:#d2d2d2;--pf-global--Color--dark-100:#151515;--pf-global--Color--dark-200:#6a6e73;--pf-global--active-color--100:#06c;--pf-global--active-color--200:#bee1f4;--pf-global--active-color--300:#2b9af3;--pf-global--active-color--400:#73bcf7;--pf-global--disabled-color--100:#6a6e73;--pf-global--disabled-color--200:#d2d2d2;--pf-global--disabled-color--300:#f0f0f0;--pf-global--primary-color--100:#06c;--pf-global--primary-color--200:#004080;--pf-global--primary-color--light-100:#73bcf7;--pf-global--primary-color--dark-100:#06c;--pf-global--secondary-color--100:#6a6e73;--pf-global--default-color--100:#73c5c5;--pf-global--default-color--200:#009596;--pf-global--default-color--300:#003737;--pf-global--success-color--100:#3e8635;--pf-global--success-color--200:#1e4f18;--pf-global--info-color--100:#2b9af3;--pf-global--info-color--200:#002952;--pf-global--warning-color--100:#f0ab00;--pf-global--warning-color--200:#795600;--pf-global--danger-color--100:#c9190b;--pf-global--danger-color--200:#a30000;--pf-global--danger-color--300:#470000;--pf-global--BoxShadow--sm:0 0.0625rem 0.125rem 0 rgba(3,3,3,0.12),0 0 0.125rem 0 rgba(3,3,3,0.06);--pf-global--BoxShadow--sm-top:0 -0.125rem 0.25rem -0.0625rem rgba(3,3,3,0.16);--pf-global--BoxShadow--sm-right:0.125rem 0 0.25rem -0.0625rem rgba(3,3,3,0.16);--pf-global--BoxShadow--sm-bottom:0 0.125rem 0.25rem -0.0625rem rgba(3,3,3,0.16);--pf-global--BoxShadow--sm-left:-0.125rem 0 0.25rem -0.0625rem rgba(3,3,3,0.16);--pf-global--BoxShadow--md:0 0.25rem 0.5rem 0rem rgba(3,3,3,0.12),0 0 0.25rem 0 rgba(3,3,3,0.06);--pf-global--BoxShadow--md-top:0 -0.5rem 0.5rem -0.375rem rgba(3,3,3,0.18);--pf-global--BoxShadow--md-right:0.5rem 0 0.5rem -0.375rem rgba(3,3,3,0.18);--pf-global--BoxShadow--md-bottom:0 0.5rem 0.5rem -0.375rem rgba(3,3,3,0.18);--pf-global--BoxShadow--md-left:-0.5rem 0 0.5rem -0.375rem rgba(3,3,3,0.18);--pf-global--BoxShadow--lg:0 0.5rem 1rem 0 rgba(3,3,3,0.16),0 0 0.375rem 0 rgba(3,3,3,0.08);--pf-global--BoxShadow--lg-top:0 -0.75rem 0.75rem -0.5rem rgba(3,3,3,0.18);--pf-global--BoxShadow--lg-right:0.75rem 0 0.75rem -0.5rem rgba(3,3,3,0.18);--pf-global--BoxShadow--lg-bottom:0 0.75rem 0.75rem -0.5rem rgba(3,3,3,0.18);--pf-global--BoxShadow--lg-left:-0.75rem 0 0.75rem -0.5rem rgba(3,3,3,0.18);--pf-global--BoxShadow--xl:0 1rem 2rem 0 rgba(3,3,3,0.16),0 0 0.5rem 0 rgba(3,3,3,0.1);--pf-global--BoxShadow--xl-top:0 -1rem 1rem -0.5rem rgba(3,3,3,0.2);--pf-global--BoxShadow--xl-right:1rem 0 1rem -0.5rem rgba(3,3,3,0.2);--pf-global--BoxShadow--xl-bottom:0 1rem 1rem -0.5rem rgba(3,3,3,0.2);--pf-global--BoxShadow--xl-left:-1rem 0 1rem -0.5rem rgba(3,3,3,0.2);--pf-global--BoxShadow--inset:inset 0 0 0.625rem 0 rgba(3,3,3,0.25);--pf-global--font-path:"~@patternfly/patternfly/assets/fonts";--pf-global--fonticon-path:"~@patternfly/patternfly/assets/pficon";--pf-global--spacer--xs:0.25rem;--pf-global--spacer--sm:0.5rem;--pf-global--spacer--md:1rem;--pf-global--spacer--lg:1.5rem;--pf-global--spacer--xl:2rem;--pf-global--spacer--2xl:3rem;--pf-global--spacer--3xl:4rem;--pf-global--spacer--4xl:5rem;--pf-global--spacer--form-element:0.375rem;--pf-global--gutter:1rem;--pf-global--gutter--md:1.5rem;--pf-global--ZIndex--xs:100;--pf-global--ZIndex--sm:200;--pf-global--ZIndex--md:300;--pf-global--ZIndex--lg:400;--pf-global--ZIndex--xl:500;--pf-global--ZIndex--2xl:600;--pf-global--breakpoint--xs:0;--pf-global--breakpoint--sm:576px;--pf-global--breakpoint--md:768px;--pf-global--breakpoint--lg:992px;--pf-global--breakpoint--xl:1200px;--pf-global--breakpoint--2xl:1450px;--pf-global--link--Color:#06c;--pf-global--link--Color--hover:#004080;--pf-global--link--Color--light:#2b9af3;--pf-global--link--Color--light--hover:#73bcf7;--pf-global--link--Color--dark:#06c;--pf-global--link--Color--dark--hover:#004080;--pf-global--link--TextDecoration:none;--pf-global--link--TextDecoration--hover:underline;--pf-global--BorderWidth--sm:1px;--pf-global--BorderWidth--md:2px;--pf-global--BorderWidth--lg:3px;--pf-global--BorderWidth--xl:4px;--pf-global--BorderColor--100:#d2d2d2;--pf-global--BorderColor--200:#8a8d90;--pf-global--BorderColor--300:#f0f0f0;--pf-global--BorderColor--dark-100:#d2d2d2;--pf-global--BorderColor--light-100:#b8bbbe;--pf-global--BorderRadius--sm:3px;--pf-global--BorderRadius--lg:30em;--pf-global--icon--Color--light:#6a6e73;--pf-global--icon--Color--dark:#151515;--pf-global--icon--FontSize--sm:0.625rem;--pf-global--icon--FontSize--md:1.125rem;--pf-global--icon--FontSize--lg:1.5rem;--pf-global--icon--FontSize--xl:3.375rem;--pf-global--FontFamily--sans-serif:"RedHatText","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--heading--sans-serif:"RedHatDisplay","Overpass",overpass,helvetica,arial,sans-serif;--pf-global--FontFamily--monospace:"Liberation Mono",consolas,"SFMono-Regular",menlo,monaco,"Courier New",monospace;--pf-global--FontFamily--overpass--sans-serif:"overpass",overpass,"open sans",-apple-system,blinkmacsystemfont,"Segoe UI",roboto,"Helvetica Neue",arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--pf-global--FontFamily--overpass--monospace:"overpass-mono",overpass-mono,"SFMono-Regular",menlo,monaco,consolas,"Liberation Mono","Courier New",monospace;--pf-global--FontSize--4xl:2.25rem;--pf-global--FontSize--3xl:1.75rem;--pf-global--FontSize--2xl:1.5rem;--pf-global--FontSize--xl:1.25rem;--pf-global--FontSize--lg:1.125rem;--pf-global--FontSize--md:1rem;--pf-global--FontSize--sm:0.875rem;--pf-global--FontSize--xs:0.75rem;--pf-global--FontWeight--light:300;--pf-global--FontWeight--normal:400;--pf-global--FontWeight--semi-bold:700;--pf-global--FontWeight--overpass--semi-bold:500;--pf-global--FontWeight--bold:700;--pf-global--FontWeight--overpass--bold:600;--pf-global--LineHeight--sm:1.3;--pf-global--LineHeight--md:1.5;--pf-global--ListStyle:disc outside;--pf-global--Transition:all 250ms ease-in-out;--pf-global--TimingFunction:cubic-bezier(0.645,0.045,0.355,1);--pf-global--TransitionDuration:250ms;--pf-global--arrow--width:0.9375rem;--pf-global--arrow--width-lg:1.5625rem;--pf-global--target-size--MinWidth:44px;--pf-global--target-size--MinHeight:44px}.pf-m-overpass-font{--pf-global--FontFamily--sans-serif:var(--pf-global--FontFamily--overpass--sans-serif);--pf-global--FontFamily--heading--sans-serif:var(--pf-global--FontFamily--sans-serif);--pf-global--FontFamily--monospace:var(--pf-global--FontFamily--overpass--monospace);--pf-global--FontWeight--semi-bold:var(--pf-global--FontWeight--overpass--semi-bold);--pf-global--FontWeight--bold:var(--pf-global--FontWeight--overpass--bold)}#login-page{height:100%}#login-page .login-pf-page-footer-link[href*=foreman-login-footer-text]{pointer-events:none;cursor:default}#login-page .login-pf{background:none;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MDAiIGhlaWdodD0iMjAwIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEwMCUiIHkyPSI1MCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMwMDVlOGMiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwNDFhMzMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+);background-size:contain}#login-page .login-pf .login-pf-header{margin-bottom:0!important}#login-page .login-pf .login-pf-header h1{font-weight:500}#login-page .login-pf .login-pf-caption{color:#fff}#login-page .login-pf .login-pf-caption h1{font-weight:600}#login-page .login-pf .spinner{float:none}#login-page .login-pf .form-control+.glyphicon{position:absolute;padding:0;right:0}.external-logout{height:100%;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MDAiIGhlaWdodD0iMjAwIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSIwJSIgeTE9IjUwJSIgeDI9IjEwMCUiIHkyPSI1MCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMwMDVlOGMiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwNDFhMzMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+);background-size:contain}.external-logout header{text-align:center}.external-logout header img.brand{margin-top:62px;max-width:360px;width:70%}.external-logout header .login-pf-caption{color:#fff}.external-logout header .login-pf-caption #title{font-weight:600}.external-logout header .login-pf-caption p{font-size:14px;margin-top:20px}.external-logout .login-pf-submit-button{margin:40px auto;font-size:20px;width:250px}.editable{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAKlBMVEUAAAAfHx9mZmZvb28jIyNlZWUkJCQ1NTWqqqqXl5d1dXWfn58wMDBlZWVFnB4fAAAADnRSTlMATTY2RjlLSgc1FhMIMWjp4M0AAABMSURBVAjXY8AOOEwmQBjMgpIQxnZBMTDdrFUoDGYYyi7XgKgQ1IYICAoGgGgmQUEhsECgoKACWEAJKsBywFABzGDzCWKAiKQEoFoMAFFGCJqmrvKMAAAAAElFTkSuQmCC) no-repeat scroll 98% 3px transparent;cursor:pointer;padding:3px 26px 4px 4px}.editable:hover{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAeFBMVEUAAAChoaF+fn6CgoKIiIh+fn57e3uCgoI2Njaqqqp2dnZHR0dQUFBLS0s0NDRKSko1NTVAQEA8PDwwMDB7e3t1dXWFhYV7e3uLi4uKioqmpqa7u7vFxcWpqamrq6vg4OCsrKw1NTUzMzM3NzcxMTEvLy8tLS1BQUFexsBCAAAAIXRSTlMABri8s7OzsuOyrR39+vby8vDu6MC9s6FJSUFAGhUMBgIlQtNGAAAAa0lEQVQY04XINxKEQAxEUTFmYWEN3jtpMPe/IRAMqIqAH/VreGhgu1XRG3gKZ8OesfksZl5P99Iv/wsqaycnKqqv6KxdJCK/Bub9yRxrfRhfpyVOhhmE0DgxQxyAi/oy/JIglczghZ5gvrUB2F8HC0WhsnYAAAAASUVORK5CYII=) no-repeat scroll 98% 3px #f2f2f2}.gridster ul{padding-left:0;list-style:none;max-width:100%;margin:0 auto}@media (min-width:992px){.gridster ul [data-col="1"]{left:1%}.gridster ul [data-sizex="1"]{width:7.33333%}.gridster ul [data-sizey="1"]{height:340px}.gridster ul [data-col="2"]{left:9.33333%}.gridster ul [data-sizex="2"]{width:15.66667%}.gridster ul [data-sizey="2"]{height:690px}.gridster ul [data-col="3"]{left:17.66667%}.gridster ul [data-sizex="3"]{width:24%}.gridster ul [data-sizey="3"]{height:1040px}.gridster ul [data-col="4"]{left:26%}.gridster ul [data-sizex="4"]{width:32.33333%}.gridster ul [data-sizey="4"]{height:1390px}.gridster ul [data-col="5"]{left:34.33333%}.gridster ul [data-sizex="5"]{width:40.66667%}.gridster ul [data-sizey="5"]{height:1740px}.gridster ul [data-col="6"]{left:42.66667%}.gridster ul [data-sizex="6"]{width:49%}.gridster ul [data-sizey="6"]{height:2090px}.gridster ul [data-col="7"]{left:51%}.gridster ul [data-sizex="7"]{width:57.33333%}.gridster ul [data-sizey="7"]{height:2440px}.gridster ul [data-col="8"]{left:59.33333%}.gridster ul [data-sizex="8"]{width:65.66667%}.gridster ul [data-sizey="8"]{height:2790px}.gridster ul [data-col="9"]{left:67.66667%}.gridster ul [data-sizex="9"]{width:74%}.gridster ul [data-sizey="9"]{height:3140px}.gridster ul [data-col="10"]{left:76%}.gridster ul [data-sizex="10"]{width:82.33333%}.gridster ul [data-sizey="10"]{height:3490px}.gridster ul [data-col="11"]{left:84.33333%}.gridster ul [data-sizex="11"]{width:90.66667%}.gridster ul [data-sizey="11"]{height:3840px}.gridster ul [data-col="12"]{left:92.66667%}.gridster ul [data-sizex="12"]{width:99%}.gridster ul [data-sizey="12"]{height:4190px}.gridster ul [data-row="1"]{top:10px}.gridster ul [data-row="2"]{top:370px}.gridster ul [data-row="3"]{top:730px}.gridster ul [data-row="4"]{top:1090px}.gridster ul [data-row="5"]{top:1450px}.gridster ul [data-row="6"]{top:1810px}.gridster ul [data-row="7"]{top:2170px}.gridster ul [data-row="8"]{top:2530px}.gridster ul [data-row="9"]{top:2890px}.gridster ul [data-row="10"]{top:3250px}.gridster ul [data-row="11"]{top:3610px}.gridster ul [data-row="12"]{top:3970px}.gridster ul [data-row="13"]{top:4330px}.gridster ul [data-row="14"]{top:4690px}.gridster ul [data-row="15"]{top:5050px}.gridster ul [data-row="16"]{top:5410px}.gridster ul [data-row="17"]{top:5770px}.gridster ul [data-row="18"]{top:6130px}.gridster ul [data-row="19"]{top:6490px}.gridster ul [data-row="20"]{top:6850px}.gridster ul [data-row="21"]{top:7210px}.gridster ul [data-row="22"]{top:7570px}.gridster ul [data-row="23"]{top:7930px}.gridster ul [data-row="24"]{top:8290px}.gridster ul [data-row="25"]{top:8650px}.gridster ul [data-row="26"]{top:9010px}.gridster ul [data-row="27"]{top:9370px}.gridster ul [data-row="28"]{top:9730px}.gridster ul [data-row="29"]{top:10090px}.gridster ul [data-row="30"]{top:10450px}.gridster ul [data-col="1"]{left:0}}@media (max-width:992px){.gridster ul .gs-w:not(.preview-holder){position:relative!important;margin:10px 0}}.gridster ul .preview-holder{background-color:#00618a}.gridster ul .gs-w{padding:19px;border:1px solid #e3e3e3;background-color:hsla(0,0%,100%,.5)}.gridster ul .gs-w:hover{border:1px solid #00618a}.dashboard .host-configuration-status li{margin:10px 0;list-style:none;clear:both}.dashboard .host-configuration-status li h4{float:right;line-height:10px}.dashboard .host-configuration-status .total{border-top:1px solid #ddd;text-align:right;padding-top:10px}.dashboard .header{border-bottom:1px solid #ddd;padding:0 10px 10px;margin-top:0}.dashboard .stats-well{min-height:360px}.dashboard .statistics-bar{height:270px;width:95%;margin-left:-10px}.dashboard .statistics-chart{height:240px;width:95%}.dashboard .widget_control a{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;cursor:pointer;margin:0 3px}.dashboard .widget_control a:hover{text-decoration:none}.dashboard .reports-table th:not(:first-child){width:50px}.dashboard-links{color:#333}.dashboard-pie{height:180px;width:180px}.dashboard-right{margin-right:10px;margin-top:80px;float:right}.auto-refresh{background:none}.auto-refresh.on{color:#005c7e}.auto-refresh.off{color:#ccc}