manageiq-appliance_console 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/appliance_console +0 -24
- data/lib/manageiq-appliance_console.rb +2 -2
- data/lib/manageiq/appliance_console/auth_utilities.rb +86 -0
- data/lib/manageiq/appliance_console/cli.rb +28 -44
- data/lib/manageiq/appliance_console/oidc_authentication.rb +92 -0
- data/lib/manageiq/appliance_console/saml_authentication.rb +8 -75
- data/lib/manageiq/appliance_console/version.rb +1 -1
- data/locales/appliance/en.yml +0 -4
- data/locales/container/en.yml +0 -2
- metadata +4 -4
- data/lib/manageiq/appliance_console/date_time_configuration.rb +0 -117
- data/lib/manageiq/appliance_console/timezone_configuration.rb +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9aab719558452873f17db2eb66a1aeebd73d6e3f23eb41cc00955325e3004907
|
4
|
+
data.tar.gz: 515bf0fc47ceecd4441b0599a198ac81194056f5fc936102cd65d6d0ea31023f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4ea565696b02cef54acac874cc8e3260e8a7b3795e68d4f99cd5c59d3c0b1affe230c75739e05e306693aba7de17faf20721db40e533a442baca1832d91dadc
|
7
|
+
data.tar.gz: 9fe682258cd1cefd700ce0ace41d61dce0060dcb4097c63d1a539e180ea8a65f7c7559e2853525ebe342631b9c607ddceab937755b409bba89a790581f8e9855
|
data/bin/appliance_console
CHANGED
@@ -296,30 +296,6 @@ Static Network Configuration
|
|
296
296
|
end
|
297
297
|
end
|
298
298
|
|
299
|
-
when I18n.t("advanced_settings.timezone")
|
300
|
-
say("#{selection}\n\n")
|
301
|
-
timezone_config = ManageIQ::ApplianceConsole::TimezoneConfiguration.new(timezone)
|
302
|
-
if timezone_config.ask_questions && timezone_config.activate
|
303
|
-
say("Timezone configured")
|
304
|
-
press_any_key
|
305
|
-
else
|
306
|
-
say("Timezone not configured")
|
307
|
-
press_any_key
|
308
|
-
raise MiqSignalError
|
309
|
-
end
|
310
|
-
|
311
|
-
when I18n.t("advanced_settings.datetime")
|
312
|
-
say("#{selection}\n\n")
|
313
|
-
date_time_config = ManageIQ::ApplianceConsole::DateTimeConfiguration.new
|
314
|
-
if date_time_config.ask_questions && date_time_config.activate
|
315
|
-
say("Date and time configured")
|
316
|
-
press_any_key
|
317
|
-
else
|
318
|
-
say("Date and time not configured")
|
319
|
-
press_any_key
|
320
|
-
raise MiqSignalError
|
321
|
-
end
|
322
|
-
|
323
299
|
when I18n.t("advanced_settings.httpdauth")
|
324
300
|
say("#{selection}\n\n")
|
325
301
|
|
@@ -27,6 +27,7 @@ require 'manageiq/appliance_console/prompts'
|
|
27
27
|
require 'manageiq-gems-pending'
|
28
28
|
require 'highline'
|
29
29
|
|
30
|
+
require 'manageiq/appliance_console/auth_utilities'
|
30
31
|
require 'manageiq/appliance_console/certificate'
|
31
32
|
require 'manageiq/appliance_console/certificate_authority'
|
32
33
|
require 'manageiq/appliance_console/cli'
|
@@ -35,7 +36,6 @@ require 'manageiq/appliance_console/database_configuration'
|
|
35
36
|
require 'manageiq/appliance_console/database_replication'
|
36
37
|
require 'manageiq/appliance_console/database_replication_primary'
|
37
38
|
require 'manageiq/appliance_console/database_replication_standby'
|
38
|
-
require 'manageiq/appliance_console/date_time_configuration'
|
39
39
|
require 'manageiq/appliance_console/external_auth_options'
|
40
40
|
require 'manageiq/appliance_console/external_database_configuration'
|
41
41
|
require 'manageiq/appliance_console/external_httpd_authentication'
|
@@ -43,9 +43,9 @@ require 'manageiq/appliance_console/internal_database_configuration'
|
|
43
43
|
require 'manageiq/appliance_console/key_configuration'
|
44
44
|
require 'manageiq/appliance_console/logfile_configuration'
|
45
45
|
require 'manageiq/appliance_console/logical_volume_management'
|
46
|
+
require 'manageiq/appliance_console/oidc_authentication'
|
46
47
|
require 'manageiq/appliance_console/principal'
|
47
48
|
require 'manageiq/appliance_console/saml_authentication'
|
48
49
|
require 'manageiq/appliance_console/scap'
|
49
50
|
require 'manageiq/appliance_console/temp_storage_configuration'
|
50
|
-
require 'manageiq/appliance_console/timezone_configuration'
|
51
51
|
require 'manageiq/appliance_console/utilities'
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "erb"
|
3
|
+
|
4
|
+
module ManageIQ
|
5
|
+
module ApplianceConsole
|
6
|
+
module AuthUtilities
|
7
|
+
HTTPD_CONFIG_DIRECTORY = Pathname.new("/etc/httpd/conf.d")
|
8
|
+
|
9
|
+
def restart_httpd
|
10
|
+
httpd_service = LinuxAdmin::Service.new("httpd")
|
11
|
+
if httpd_service.running?
|
12
|
+
say("Restarting httpd ...")
|
13
|
+
httpd_service.restart
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def path_is_file?(path)
|
18
|
+
path.present? && !path_is_url?(path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def path_is_url?(path)
|
22
|
+
path =~ /\A#{URI.regexp(["http", "https"])}\z/x
|
23
|
+
end
|
24
|
+
|
25
|
+
# File Management
|
26
|
+
|
27
|
+
def remove_file(path)
|
28
|
+
if path.exist?
|
29
|
+
debug_msg("Removing #{path} ...")
|
30
|
+
path.delete
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def copy_template(dir, file, template_parameters = nil)
|
35
|
+
src_path = template_directory.join(relative_from_root(dir), file)
|
36
|
+
dest_path = dir.join(file)
|
37
|
+
dest_path = dest_path.sub_ext('') if src_path.extname == ".erb"
|
38
|
+
debug_msg("Copying template #{src_path} to #{dest_path} ...")
|
39
|
+
if src_path.extname == ".erb"
|
40
|
+
raise ArgumentError, "Must specify template parameters for ERB files" if template_parameters.nil?
|
41
|
+
|
42
|
+
template = ERB.new(File.read(src_path), nil, '-')
|
43
|
+
File.write(dest_path, template.result_with_hash(template_parameters))
|
44
|
+
else
|
45
|
+
FileUtils.cp(src_path, dest_path)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def template_directory
|
50
|
+
@template_directory ||= Pathname.new(ENV.fetch("APPLIANCE_TEMPLATE_DIRECTORY"))
|
51
|
+
end
|
52
|
+
|
53
|
+
def relative_from_root(path)
|
54
|
+
path.absolute? ? path.relative_path_from(Pathname.new("/")) : path
|
55
|
+
end
|
56
|
+
|
57
|
+
# Appliance Settings
|
58
|
+
|
59
|
+
def configure_auth_settings_database
|
60
|
+
say("Setting Appliance Authentication Settings to Database ...")
|
61
|
+
configure_auth_settings(:mode => "database",
|
62
|
+
:httpd_role => false,
|
63
|
+
:saml_enabled => false,
|
64
|
+
:oidc_enabled => false,
|
65
|
+
:sso_enabled => false,
|
66
|
+
:provider_type => "none")
|
67
|
+
end
|
68
|
+
|
69
|
+
def configure_auth_settings(args)
|
70
|
+
Utilities.rake_run("evm:settings:set", args.collect { |key, val| "/authentication/#{key}=#{val}" })
|
71
|
+
end
|
72
|
+
|
73
|
+
# Logging
|
74
|
+
|
75
|
+
def debug_msg(msg)
|
76
|
+
say(msg) if options[:verbose]
|
77
|
+
end
|
78
|
+
|
79
|
+
def log_command_error(err)
|
80
|
+
say(err.result.output)
|
81
|
+
say(err.result.error)
|
82
|
+
say("")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -65,14 +65,6 @@ module ApplianceConsole
|
|
65
65
|
options[:logdisk]
|
66
66
|
end
|
67
67
|
|
68
|
-
def time_zone?
|
69
|
-
options[:timezone]
|
70
|
-
end
|
71
|
-
|
72
|
-
def date_time?
|
73
|
-
options[:datetime]
|
74
|
-
end
|
75
|
-
|
76
68
|
def extauth_opts?
|
77
69
|
options[:extauth_opts]
|
78
70
|
end
|
@@ -85,6 +77,14 @@ module ApplianceConsole
|
|
85
77
|
options[:saml_unconfig]
|
86
78
|
end
|
87
79
|
|
80
|
+
def oidc_config?
|
81
|
+
options[:oidc_config]
|
82
|
+
end
|
83
|
+
|
84
|
+
def oidc_unconfig?
|
85
|
+
options[:oidc_unconfig]
|
86
|
+
end
|
87
|
+
|
88
88
|
def set_server_state?
|
89
89
|
options[:server]
|
90
90
|
end
|
@@ -149,8 +149,6 @@ module ApplianceConsole
|
|
149
149
|
opt :ipadomain, "IPA Server domain (optional)", :type => :string
|
150
150
|
opt :iparealm, "IPA Server realm (optional)", :type => :string
|
151
151
|
opt :ca, "CA name used for certmonger", :type => :string, :default => "ipa"
|
152
|
-
opt :timezone, "Time zone", :type => :string
|
153
|
-
opt :datetime, "Date and time, in YYYY-MM-DDTHH:MM:SS (ISO8601) format", :type => :string
|
154
152
|
opt :http_cert, "install certs for http server", :type => :boolean
|
155
153
|
opt :extauth_opts, "External Authentication Options", :type => :string
|
156
154
|
opt :saml_config, "Configure Appliance for SAML Authentication", :type => :boolean, :default => false
|
@@ -158,6 +156,13 @@ module ApplianceConsole
|
|
158
156
|
opt :saml_idp_metadata, "The file path or URL of the SAML IDP Metadata", :type => :string
|
159
157
|
opt :saml_enable_sso, "Optionally enable SSO with SAML Authentication", :type => :boolean, :default => false
|
160
158
|
opt :saml_unconfig, "Unconfigure Appliance SAML Authentication", :type => :boolean, :default => false
|
159
|
+
opt :oidc_config, "Configure Appliance for OpenID-Connect Authentication", :type => :boolean, :default => false
|
160
|
+
opt :oidc_url, "The OpenID-Connect Provider URL", :type => :string
|
161
|
+
opt :oidc_client_host, "Optional Appliance host used for OpenID-Connect Authentication", :type => :string
|
162
|
+
opt :oidc_client_id, "The OpenID-Connect Provider Client ID", :type => :string
|
163
|
+
opt :oidc_client_secret, "The OpenID-Connect Provider Client Secret", :type => :string
|
164
|
+
opt :oidc_enable_sso, "Optionally enable SSO with OpenID-Connect Authentication", :type => :boolean, :default => false
|
165
|
+
opt :oidc_unconfig, "Unconfigure Appliance OpenID-Connect Authentication", :type => :boolean, :default => false
|
161
166
|
opt :server, "{start|stop|restart} actions on evmserverd Server", :type => :string
|
162
167
|
end
|
163
168
|
Optimist.die :region, "needed when setting up a local database" if region_number_required? && options[:region].nil?
|
@@ -171,8 +176,9 @@ module ApplianceConsole
|
|
171
176
|
def run
|
172
177
|
Optimist.educate unless set_host? || key? || database? || tmp_disk? || log_disk? ||
|
173
178
|
uninstall_ipa? || install_ipa? || certs? || extauth_opts? ||
|
174
|
-
|
175
|
-
saml_config? || saml_unconfig?
|
179
|
+
set_server_state? || set_replication? ||
|
180
|
+
saml_config? || saml_unconfig? ||
|
181
|
+
oidc_config? || oidc_unconfig?
|
176
182
|
if set_host?
|
177
183
|
system_hosts = LinuxAdmin::Hosts.new
|
178
184
|
system_hosts.hostname = options[:host]
|
@@ -183,8 +189,6 @@ module ApplianceConsole
|
|
183
189
|
create_key if key?
|
184
190
|
set_db if database?
|
185
191
|
set_replication if set_replication?
|
186
|
-
set_time_zone if time_zone?
|
187
|
-
set_date_time if date_time?
|
188
192
|
config_tmp_disk if tmp_disk?
|
189
193
|
config_log_disk if log_disk?
|
190
194
|
uninstall_ipa if uninstall_ipa?
|
@@ -193,6 +197,8 @@ module ApplianceConsole
|
|
193
197
|
extauth_opts if extauth_opts?
|
194
198
|
saml_config if saml_config?
|
195
199
|
saml_unconfig if saml_unconfig?
|
200
|
+
oidc_config if oidc_config?
|
201
|
+
oidc_unconfig if oidc_unconfig?
|
196
202
|
set_server_state if set_server_state?
|
197
203
|
rescue CliError => e
|
198
204
|
say(e.message)
|
@@ -282,36 +288,6 @@ module ApplianceConsole
|
|
282
288
|
db_replication.activate
|
283
289
|
end
|
284
290
|
|
285
|
-
def set_time_zone
|
286
|
-
timezone_config = ManageIQ::ApplianceConsole::TimezoneConfiguration.new(options[:timezone])
|
287
|
-
timezone_config.new_timezone = options[:timezone]
|
288
|
-
if timezone_config.activate
|
289
|
-
say("Timezone configured")
|
290
|
-
else
|
291
|
-
say("Timezone not configured")
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
|
-
def set_date_time
|
296
|
-
date_time_config = ManageIQ::ApplianceConsole::DateTimeConfiguration.new
|
297
|
-
unless options[:datetime] == "auto"
|
298
|
-
date_time_config.manual_time_sync = true
|
299
|
-
date_time_config.new_date, date_time_config.new_time = options[:datetime].split("T")
|
300
|
-
return unless date_time_valid?(date_time_config)
|
301
|
-
end
|
302
|
-
date_time_config.activate
|
303
|
-
end
|
304
|
-
|
305
|
-
def date_time_valid?(date_time_config)
|
306
|
-
unless ManageIQ::ApplianceConsole::DateTimeConfiguration::DATE_REGEXP =~ date_time_config.new_date &&
|
307
|
-
ManageIQ::ApplianceConsole::DateTimeConfiguration::TIME_REGEXP =~ date_time_config.new_time
|
308
|
-
say("Datetime should be given in YYYY-MM-DDTHH:MM:SS format")
|
309
|
-
say("Datetime not configured")
|
310
|
-
return false
|
311
|
-
end
|
312
|
-
true
|
313
|
-
end
|
314
|
-
|
315
291
|
def key_configuration
|
316
292
|
@key_configuration ||= KeyConfiguration.new(
|
317
293
|
:action => options[:fetch_key] ? :fetch : :create,
|
@@ -412,6 +388,14 @@ module ApplianceConsole
|
|
412
388
|
SamlAuthentication.new(options).unconfigure
|
413
389
|
end
|
414
390
|
|
391
|
+
def oidc_config
|
392
|
+
OIDCAuthentication.new(options).configure(options[:oidc_client_host] || host)
|
393
|
+
end
|
394
|
+
|
395
|
+
def oidc_unconfig
|
396
|
+
OIDCAuthentication.new(options).unconfigure
|
397
|
+
end
|
398
|
+
|
415
399
|
def set_server_state
|
416
400
|
service = LinuxAdmin::Service.new("evmserverd")
|
417
401
|
service_running = service.running?
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module ManageIQ
|
2
|
+
module ApplianceConsole
|
3
|
+
class OIDCAuthentication
|
4
|
+
include ManageIQ::ApplianceConsole::AuthUtilities
|
5
|
+
|
6
|
+
attr_accessor :host, :options
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def configure(host)
|
13
|
+
@host = host
|
14
|
+
validate_oidc_options
|
15
|
+
|
16
|
+
say("Configuring OpenID-Connect Authentication for https://#{host} ...")
|
17
|
+
copy_apache_oidc_configfiles
|
18
|
+
configure_auth_settings_oidc
|
19
|
+
restart_httpd
|
20
|
+
true
|
21
|
+
rescue AwesomeSpawn::CommandResultError => e
|
22
|
+
log_command_error(e)
|
23
|
+
say("Failed to Configure OpenID-Connect Authentication - #{e}")
|
24
|
+
false
|
25
|
+
rescue => e
|
26
|
+
say("Failed to Configure OpenID-Connect Authentication - #{e}")
|
27
|
+
false
|
28
|
+
end
|
29
|
+
|
30
|
+
def unconfigure
|
31
|
+
raise "Appliance is not currently configured for OpenID-Connect" unless configured?
|
32
|
+
|
33
|
+
say("Unconfiguring OpenID-Connect Authentication ...")
|
34
|
+
remove_apache_oidc_configfiles
|
35
|
+
configure_auth_settings_database
|
36
|
+
restart_httpd
|
37
|
+
true
|
38
|
+
rescue AwesomeSpawn::CommandResultError => e
|
39
|
+
log_command_error(e)
|
40
|
+
say("Failed to Unconfigure OpenID-Connect Authentication - #{e}")
|
41
|
+
false
|
42
|
+
rescue => e
|
43
|
+
say("Failed to Unconfigure OpenID-Connect Authentication - #{e}")
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Apache OpenID-Connect Configuration
|
50
|
+
|
51
|
+
def copy_apache_oidc_configfiles
|
52
|
+
debug_msg("Copying Apache OpenID-Connect Config files ...")
|
53
|
+
copy_template(HTTPD_CONFIG_DIRECTORY, "manageiq-remote-user-openidc.conf")
|
54
|
+
copy_template(HTTPD_CONFIG_DIRECTORY, "manageiq-external-auth-openidc.conf.erb",
|
55
|
+
:miq_appliance => host,
|
56
|
+
:oidc_provider_metadata_url => options[:oidc_url],
|
57
|
+
:oidc_client_id => options[:oidc_client_id],
|
58
|
+
:oidc_client_secret => options[:oidc_client_secret])
|
59
|
+
end
|
60
|
+
|
61
|
+
def remove_apache_oidc_configfiles
|
62
|
+
debug_msg("Removing Apache OpenID-Connect Config files ...")
|
63
|
+
remove_file(HTTPD_CONFIG_DIRECTORY.join("manageiq-remote-user-openidc.conf"))
|
64
|
+
remove_file(HTTPD_CONFIG_DIRECTORY.join("manageiq-external-auth-openidc.conf"))
|
65
|
+
end
|
66
|
+
|
67
|
+
def configured?
|
68
|
+
HTTPD_CONFIG_DIRECTORY.join("manageiq-external-auth-openidc.conf").exist?
|
69
|
+
end
|
70
|
+
|
71
|
+
# OpenID-Connect IDP Metadata
|
72
|
+
|
73
|
+
def validate_oidc_options
|
74
|
+
raise "Must specify the OpenID-Connect Provider URL via --oidc-url" if options[:oidc_url].blank?
|
75
|
+
raise "Must specify the OpenID-Connect Client ID via --oidc-client-id" if options[:oidc_client_id].blank?
|
76
|
+
raise "Must specify the OpenID-Connect Client Secret via --oidc-client-secret" if options[:oidc_client_secret].blank?
|
77
|
+
end
|
78
|
+
|
79
|
+
# Appliance Settings
|
80
|
+
|
81
|
+
def configure_auth_settings_oidc
|
82
|
+
say("Setting Appliance Authentication Settings to OpenID-Connect ...")
|
83
|
+
configure_auth_settings(:mode => "httpd",
|
84
|
+
:httpd_role => true,
|
85
|
+
:saml_enabled => false,
|
86
|
+
:oidc_enabled => true,
|
87
|
+
:sso_enabled => options[:oidc_enable_sso] ? true : false,
|
88
|
+
:provider_type => "oidc")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
require "uri"
|
2
|
-
|
3
1
|
module ManageIQ
|
4
2
|
module ApplianceConsole
|
5
3
|
class SamlAuthentication
|
4
|
+
include ManageIQ::ApplianceConsole::AuthUtilities
|
5
|
+
|
6
6
|
MELLON_CREATE_METADATA_COMMAND = Pathname.new("/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh")
|
7
7
|
|
8
|
-
HTTPD_CONFIG_DIRECTORY = Pathname.new("/etc/httpd/conf.d")
|
9
8
|
SAML2_CONFIG_DIRECTORY = Pathname.new("/etc/httpd/saml2")
|
10
9
|
IDP_METADATA_FILE = SAML2_CONFIG_DIRECTORY.join("idp-metadata.xml")
|
11
10
|
|
@@ -105,14 +104,6 @@ module ManageIQ
|
|
105
104
|
HTTPD_CONFIG_DIRECTORY.join("manageiq-external-auth-saml.conf").exist?
|
106
105
|
end
|
107
106
|
|
108
|
-
def restart_httpd
|
109
|
-
httpd_service = LinuxAdmin::Service.new("httpd")
|
110
|
-
if httpd_service.running?
|
111
|
-
say("Restarting httpd ...")
|
112
|
-
httpd_service.restart
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
107
|
# SAML IDP Metadata
|
117
108
|
|
118
109
|
def validate_saml_idp_metadata_option
|
@@ -122,30 +113,8 @@ module ManageIQ
|
|
122
113
|
raise "Missing SAML IDP metadata file #{idp_metadata}" if path_is_file?(idp_metadata) && !File.exist?(idp_metadata)
|
123
114
|
end
|
124
115
|
|
125
|
-
def path_is_file?(path)
|
126
|
-
path.present? && !path_is_url?(path)
|
127
|
-
end
|
128
|
-
|
129
|
-
def path_is_url?(path)
|
130
|
-
path =~ /\A#{URI.regexp(["http", "https"])}\z/x
|
131
|
-
end
|
132
|
-
|
133
116
|
# File Management
|
134
117
|
|
135
|
-
def remove_file(path)
|
136
|
-
if path.exist?
|
137
|
-
debug_msg("Removing #{path} ...")
|
138
|
-
File.delete(path)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def copy_template(dir, file)
|
143
|
-
src_path = template_directory.join(relative_from_root(dir), file)
|
144
|
-
dest_path = dir.join(file)
|
145
|
-
debug_msg("Copying template #{src_path} to #{dest_path} ...")
|
146
|
-
FileUtils.cp(src_path, dest_path)
|
147
|
-
end
|
148
|
-
|
149
118
|
def download_network_file(source_file_url, target_file)
|
150
119
|
require "net/http"
|
151
120
|
|
@@ -156,52 +125,16 @@ module ManageIQ
|
|
156
125
|
File.write(target_file, result.body)
|
157
126
|
end
|
158
127
|
|
159
|
-
def template_directory
|
160
|
-
@template_directory ||= Pathname.new(ENV.fetch("APPLIANCE_TEMPLATE_DIRECTORY"))
|
161
|
-
end
|
162
|
-
|
163
|
-
def relative_from_root(path)
|
164
|
-
path.absolute? ? path.relative_path_from(Pathname.new("/")) : path
|
165
|
-
end
|
166
|
-
|
167
128
|
# Appliance Settings
|
168
129
|
|
169
130
|
def configure_auth_settings_saml
|
170
131
|
say("Setting Appliance Authentication Settings to SAML ...")
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
"/authentication/provider_type=saml"
|
178
|
-
]
|
179
|
-
Utilities.rake_run("evm:settings:set", params)
|
180
|
-
end
|
181
|
-
|
182
|
-
def configure_auth_settings_database
|
183
|
-
say("Setting Appliance Authentication Settings to Database ...")
|
184
|
-
params = [
|
185
|
-
"/authentication/mode=database",
|
186
|
-
"/authentication/httpd_role=false",
|
187
|
-
"/authentication/saml_enabled=false",
|
188
|
-
"/authentication/oidc_enabled=false",
|
189
|
-
"/authentication/sso_enabled=false",
|
190
|
-
"/authentication/provider_type=none"
|
191
|
-
]
|
192
|
-
Utilities.rake_run("evm:settings:set", params)
|
193
|
-
end
|
194
|
-
|
195
|
-
# Logging
|
196
|
-
|
197
|
-
def debug_msg(msg)
|
198
|
-
say(msg) if options[:verbose]
|
199
|
-
end
|
200
|
-
|
201
|
-
def log_command_error(err)
|
202
|
-
say(err.result.output)
|
203
|
-
say(err.result.error)
|
204
|
-
say("")
|
132
|
+
configure_auth_settings(:mode => "httpd",
|
133
|
+
:httpd_role => true,
|
134
|
+
:saml_enabled => true,
|
135
|
+
:oidc_enabled => false,
|
136
|
+
:sso_enabled => options[:saml_enable_sso] ? true : false,
|
137
|
+
:provider_type => "saml")
|
205
138
|
end
|
206
139
|
end
|
207
140
|
end
|
data/locales/appliance/en.yml
CHANGED
@@ -5,8 +5,6 @@ en:
|
|
5
5
|
advanced_settings:
|
6
6
|
menu_order:
|
7
7
|
- networking
|
8
|
-
- timezone
|
9
|
-
- datetime
|
10
8
|
- dbbackup
|
11
9
|
- dbdump
|
12
10
|
- dbrestore
|
@@ -24,8 +22,6 @@ en:
|
|
24
22
|
- summary
|
25
23
|
- quit
|
26
24
|
networking: Configure Network
|
27
|
-
timezone: Set Timezone
|
28
|
-
datetime: Set Date and Time
|
29
25
|
dbbackup: Create Database Backup
|
30
26
|
dbdump: Create Database Dump
|
31
27
|
dbrestore: Restore Database From Backup
|
data/locales/container/en.yml
CHANGED
@@ -4,7 +4,6 @@ en:
|
|
4
4
|
name: ManageIQ
|
5
5
|
advanced_settings:
|
6
6
|
menu_order:
|
7
|
-
- timezone
|
8
7
|
- dbrestore
|
9
8
|
- db_config
|
10
9
|
- db_replication
|
@@ -15,7 +14,6 @@ en:
|
|
15
14
|
- shutdown
|
16
15
|
- summary
|
17
16
|
- quit
|
18
|
-
timezone: Set Timezone
|
19
17
|
dbrestore: Restore Database From Backup
|
20
18
|
db_config: Configure Database
|
21
19
|
db_replication: Configure Database Replication
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manageiq-appliance_console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -264,6 +264,7 @@ files:
|
|
264
264
|
- bin/appliance_console
|
265
265
|
- bin/appliance_console_cli
|
266
266
|
- lib/manageiq-appliance_console.rb
|
267
|
+
- lib/manageiq/appliance_console/auth_utilities.rb
|
267
268
|
- lib/manageiq/appliance_console/certificate.rb
|
268
269
|
- lib/manageiq/appliance_console/certificate_authority.rb
|
269
270
|
- lib/manageiq/appliance_console/cli.rb
|
@@ -272,7 +273,6 @@ files:
|
|
272
273
|
- lib/manageiq/appliance_console/database_replication.rb
|
273
274
|
- lib/manageiq/appliance_console/database_replication_primary.rb
|
274
275
|
- lib/manageiq/appliance_console/database_replication_standby.rb
|
275
|
-
- lib/manageiq/appliance_console/date_time_configuration.rb
|
276
276
|
- lib/manageiq/appliance_console/errors.rb
|
277
277
|
- lib/manageiq/appliance_console/external_auth_options.rb
|
278
278
|
- lib/manageiq/appliance_console/external_database_configuration.rb
|
@@ -285,12 +285,12 @@ files:
|
|
285
285
|
- lib/manageiq/appliance_console/logger.rb
|
286
286
|
- lib/manageiq/appliance_console/logging.rb
|
287
287
|
- lib/manageiq/appliance_console/logical_volume_management.rb
|
288
|
+
- lib/manageiq/appliance_console/oidc_authentication.rb
|
288
289
|
- lib/manageiq/appliance_console/principal.rb
|
289
290
|
- lib/manageiq/appliance_console/prompts.rb
|
290
291
|
- lib/manageiq/appliance_console/saml_authentication.rb
|
291
292
|
- lib/manageiq/appliance_console/scap.rb
|
292
293
|
- lib/manageiq/appliance_console/temp_storage_configuration.rb
|
293
|
-
- lib/manageiq/appliance_console/timezone_configuration.rb
|
294
294
|
- lib/manageiq/appliance_console/utilities.rb
|
295
295
|
- lib/manageiq/appliance_console/version.rb
|
296
296
|
- locales/appliance/en.yml
|
@@ -1,117 +0,0 @@
|
|
1
|
-
module ManageIQ
|
2
|
-
module ApplianceConsole
|
3
|
-
class DateTimeConfiguration
|
4
|
-
DATE_REGEXP = /^(2[0-9]{3})-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])/
|
5
|
-
DATE_PROMPT = "current date (YYYY-MM-DD)".freeze
|
6
|
-
TIME_REGEXP = /^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/
|
7
|
-
TIME_PROMPT = "current time in 24 hour format (HH:MM:SS)".freeze
|
8
|
-
|
9
|
-
attr_accessor :new_date, :new_time, :manual_time_sync
|
10
|
-
|
11
|
-
include ManageIQ::ApplianceConsole::Logging
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
@new_date = nil
|
15
|
-
@new_time = nil
|
16
|
-
@manual_time_sync = false
|
17
|
-
end
|
18
|
-
|
19
|
-
def activate
|
20
|
-
say("Applying time configuration...")
|
21
|
-
establish_auto_sync &&
|
22
|
-
configure_date_time
|
23
|
-
end
|
24
|
-
|
25
|
-
def ask_questions
|
26
|
-
ask_establish_auto_sync
|
27
|
-
ask_for_date &&
|
28
|
-
ask_for_time &&
|
29
|
-
confirm
|
30
|
-
end
|
31
|
-
|
32
|
-
def ask_establish_auto_sync
|
33
|
-
say("Automatic time synchronization must be disabled to manually set date or time\n\n")
|
34
|
-
|
35
|
-
@manual_time_sync = agree(<<-EOL)
|
36
|
-
Yes to disable Automatic time synchronization and prompt for date and time.
|
37
|
-
No to enable Automatic time synchronization. (Y/N):
|
38
|
-
|
39
|
-
EOL
|
40
|
-
end
|
41
|
-
|
42
|
-
def ask_for_date
|
43
|
-
return true unless manual_time_sync
|
44
|
-
@new_date = just_ask(DATE_PROMPT, nil, DATE_REGEXP)
|
45
|
-
true
|
46
|
-
rescue
|
47
|
-
false
|
48
|
-
end
|
49
|
-
|
50
|
-
def ask_for_time
|
51
|
-
return true unless manual_time_sync
|
52
|
-
@new_time = just_ask(TIME_PROMPT, nil, TIME_REGEXP)
|
53
|
-
true
|
54
|
-
rescue
|
55
|
-
false
|
56
|
-
end
|
57
|
-
|
58
|
-
def confirm
|
59
|
-
manual_time_sync ? confirm_manual : confirm_auto
|
60
|
-
end
|
61
|
-
|
62
|
-
def confirm_auto
|
63
|
-
clear_screen
|
64
|
-
say("Date and Time Configuration will be automatic")
|
65
|
-
|
66
|
-
agree("Apply automatic time configuration? (Y/N): ")
|
67
|
-
end
|
68
|
-
|
69
|
-
def confirm_manual
|
70
|
-
clear_screen
|
71
|
-
say(<<-EOL)
|
72
|
-
Date and Time Configuration
|
73
|
-
|
74
|
-
Date: #{new_date}
|
75
|
-
Time: #{new_time}
|
76
|
-
|
77
|
-
EOL
|
78
|
-
|
79
|
-
agree("Apply manual time configuration? (Y/N): ")
|
80
|
-
end
|
81
|
-
|
82
|
-
def establish_auto_sync
|
83
|
-
manual_time_sync ? disable_auto_sync : enable_auto_sync
|
84
|
-
end
|
85
|
-
|
86
|
-
def enable_auto_sync
|
87
|
-
LinuxAdmin::Service.new("chronyd").enable.start
|
88
|
-
LinuxAdmin::Service.new("systemd-timedated").restart
|
89
|
-
true
|
90
|
-
rescue => e
|
91
|
-
say("Failed to enable time synchronization")
|
92
|
-
logger.error("Failed to enable time synchronization: #{e.message}")
|
93
|
-
false
|
94
|
-
end
|
95
|
-
|
96
|
-
def disable_auto_sync
|
97
|
-
LinuxAdmin::Service.new("chronyd").stop.disable
|
98
|
-
LinuxAdmin::Service.new("systemd-timedated").restart
|
99
|
-
true
|
100
|
-
rescue => e
|
101
|
-
say("Failed to disable time synchronization")
|
102
|
-
logger.error("Failed to disable time synchronization: #{e.message}")
|
103
|
-
false
|
104
|
-
end
|
105
|
-
|
106
|
-
def configure_date_time
|
107
|
-
return true unless manual_time_sync
|
108
|
-
LinuxAdmin::TimeDate.system_time = Time.parse("#{new_date} #{new_time}").getlocal
|
109
|
-
true
|
110
|
-
rescue => e
|
111
|
-
say("Failed to apply time configuration")
|
112
|
-
logger.error("Failed to apply time configuration: #{e.message}")
|
113
|
-
false
|
114
|
-
end
|
115
|
-
end # class DateTimeConfiguration
|
116
|
-
end # module ApplianceConsole
|
117
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require "linux_admin"
|
2
|
-
|
3
|
-
module ManageIQ
|
4
|
-
module ApplianceConsole
|
5
|
-
class TimezoneConfiguration
|
6
|
-
include ManageIQ::ApplianceConsole::Logging
|
7
|
-
|
8
|
-
attr_reader :current_timzone
|
9
|
-
attr_accessor :new_timezone
|
10
|
-
|
11
|
-
def initialize(region_timezone_string)
|
12
|
-
@current_timezone = region_timezone_string
|
13
|
-
end
|
14
|
-
|
15
|
-
def activate
|
16
|
-
log_and_feedback(__method__) do
|
17
|
-
say("Applying new timezone #{new_timezone}...")
|
18
|
-
begin
|
19
|
-
LinuxAdmin::TimeDate.system_timezone = new_timezone
|
20
|
-
rescue LinuxAdmin::TimeDate::TimeCommandError => e
|
21
|
-
say("Failed to apply timezone configuration")
|
22
|
-
logger.error("Failed to timezone configuration: #{e.message}")
|
23
|
-
return false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
true
|
27
|
-
end
|
28
|
-
|
29
|
-
def ask_questions
|
30
|
-
ask_for_timezone && confirm
|
31
|
-
end
|
32
|
-
|
33
|
-
def ask_for_timezone
|
34
|
-
current_item = timezone_hash
|
35
|
-
|
36
|
-
while current_item.is_a?(Hash)
|
37
|
-
selection = ask_with_menu("Geographic Location", current_item.keys, nil, false)
|
38
|
-
return false if selection == CANCEL
|
39
|
-
current_item = current_item[selection]
|
40
|
-
end
|
41
|
-
|
42
|
-
@new_timezone = current_item
|
43
|
-
true
|
44
|
-
end
|
45
|
-
|
46
|
-
def confirm
|
47
|
-
clear_screen
|
48
|
-
agree("Change the timezone to #{new_timezone}? (Y/N): ")
|
49
|
-
end
|
50
|
-
|
51
|
-
def timezone_hash
|
52
|
-
LinuxAdmin::TimeDate.timezones.each_with_object({}) do |tz, hash|
|
53
|
-
hash.store_path(*tz.split("/"), tz)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end # class TimezoneConfiguration
|
57
|
-
end # module ApplianceConsole
|
58
|
-
end
|