manageiq-appliance_console 6.0.0 → 6.1.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/.codeclimate.yml +24 -25
- data/.rspec_ci +2 -0
- data/.travis.yml +3 -2
- data/Gemfile +0 -2
- data/Rakefile +20 -1
- data/bin/appliance_console +30 -6
- data/lib/manageiq-appliance_console.rb +2 -6
- data/lib/manageiq/appliance_console/certificate_authority.rb +1 -1
- data/lib/manageiq/appliance_console/cli.rb +64 -20
- data/lib/manageiq/appliance_console/database_configuration.rb +2 -1
- data/lib/manageiq/appliance_console/database_replication.rb +1 -1
- data/lib/manageiq/appliance_console/database_replication_standby.rb +1 -1
- data/lib/manageiq/appliance_console/internal_database_configuration.rb +1 -1
- data/lib/manageiq/appliance_console/logfile_configuration.rb +2 -2
- data/lib/manageiq/appliance_console/message_configuration.rb +199 -0
- data/lib/manageiq/appliance_console/message_configuration_client.rb +96 -0
- data/lib/manageiq/appliance_console/message_configuration_server.rb +319 -0
- data/lib/manageiq/appliance_console/postgres_admin.rb +325 -0
- data/lib/manageiq/appliance_console/utilities.rb +45 -1
- data/lib/manageiq/appliance_console/version.rb +1 -1
- data/manageiq-appliance_console.gemspec +2 -2
- metadata +19 -16
- data/lib/manageiq/appliance_console/messaging_configuration.rb +0 -92
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34445fe4cc1b697688c30f689ed12499635959a5ad428763f2cfaac48a9f64c9
|
4
|
+
data.tar.gz: ed7530438fc6d4cf6d143e99bee966a890af509bdcb065831db8897b995a7fa8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a35d79649faa4a600b16959312a35468737a49f106524a510ee6d917154eb736547980a5597edc853b39325730ec3eece30efd4ed7375717525f5ad56ae3191e
|
7
|
+
data.tar.gz: 537c818711a763daa128491cf61895fac0646a568d7b9f39d7701707ecfcef33272d1f0cb7347290f1f61e10eb4cb7729ad2cadd18556ab5c9dd8888c7104842
|
data/.codeclimate.yml
CHANGED
@@ -1,12 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
-
|
4
|
-
|
5
|
-
-
|
6
|
-
|
7
|
-
-
|
8
|
-
|
9
|
-
|
1
|
+
prepare:
|
2
|
+
fetch:
|
3
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/.rubocop_base.yml
|
4
|
+
path: ".rubocop_base.yml"
|
5
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/.rubocop_cc_base.yml
|
6
|
+
path: ".rubocop_cc_base.yml"
|
7
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/styles/base.yml
|
8
|
+
path: styles/base.yml
|
9
|
+
- url: https://raw.githubusercontent.com/ManageIQ/manageiq-style/master/styles/cc_base.yml
|
10
|
+
path: styles/cc_base.yml
|
11
|
+
plugins:
|
12
|
+
rubocop:
|
13
|
+
enabled: true
|
14
|
+
config: ".rubocop_cc.yml"
|
15
|
+
channel: rubocop-0-82
|
10
16
|
brakeman:
|
11
17
|
enabled: false
|
12
18
|
bundler-audit:
|
@@ -26,19 +32,12 @@ engines:
|
|
26
32
|
enabled: false
|
27
33
|
markdownlint:
|
28
34
|
enabled: false
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
- "**.rake"
|
39
|
-
- "**.rb"
|
40
|
-
plugins:
|
41
|
-
rubocop:
|
42
|
-
enabled: true
|
43
|
-
config: ".rubocop_cc.yml"
|
44
|
-
channel: rubocop-0-82
|
35
|
+
exclude_patterns:
|
36
|
+
- ".git/"
|
37
|
+
- "**.xml"
|
38
|
+
- "**.yaml"
|
39
|
+
- "**.yml"
|
40
|
+
- locale/
|
41
|
+
- spec/
|
42
|
+
- tools/
|
43
|
+
version: '2'
|
data/.rspec_ci
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
3
|
|
4
|
+
desc "Run RSpec code examples (skip postgres required ones)"
|
4
5
|
RSpec::Core::RakeTask.new(:spec)
|
5
6
|
|
6
|
-
|
7
|
+
# In CI, as part of the .rspec_ci, load a helper that sets the configuration
|
8
|
+
# setting to allow the postgres specs to run.
|
9
|
+
desc "Run RSpec code examples (assumes ci dependencies)"
|
10
|
+
RSpec::Core::RakeTask.new("spec:ci") do |t|
|
11
|
+
t.rspec_opts = "--options #{File.expand_path(".rspec_ci", __dir__)}"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Run RSpec code examples (with local postgres dependencies)"
|
15
|
+
RSpec::Core::RakeTask.new("spec:dev") do |t|
|
16
|
+
# Load the PostgresRunner helper to facilitate a clean postgres environment
|
17
|
+
# for testing locally (not necessary for CI), and enables the postgres test
|
18
|
+
# via the helper.
|
19
|
+
pg_runner = File.join("spec", "postgres_runner_helper.rb")
|
20
|
+
t.rspec_opts = "-r #{File.expand_path(pg_runner, __dir__)}"
|
21
|
+
end
|
22
|
+
|
23
|
+
task :default do
|
24
|
+
Rake::Task["spec#{':ci' if ENV['CI']}"].invoke
|
25
|
+
end
|
data/bin/appliance_console
CHANGED
@@ -13,7 +13,7 @@ require 'highline/system_extensions'
|
|
13
13
|
require 'rubygems'
|
14
14
|
require 'bcrypt'
|
15
15
|
require 'linux_admin'
|
16
|
-
require '
|
16
|
+
require 'manageiq/appliance_console/postgres_admin'
|
17
17
|
require 'awesome_spawn'
|
18
18
|
include HighLine::SystemExtensions
|
19
19
|
|
@@ -384,13 +384,14 @@ Static Network Configuration
|
|
384
384
|
"Create Region in External Database" => "create_external",
|
385
385
|
"Join Region in External Database" => "join_external",
|
386
386
|
"Reset Configured Database" => "reset_region",
|
387
|
-
"No
|
387
|
+
"Make No Database Changes" => "no_changes"
|
388
388
|
}
|
389
389
|
database_action = ask_with_menu("Database Operation", options)
|
390
390
|
|
391
391
|
messaging_options = {
|
392
|
-
"
|
393
|
-
"
|
392
|
+
"Configure this appliance as a messaging server" => "message_server",
|
393
|
+
"Connect to an external messaging system" => "message_client",
|
394
|
+
"Make No messaging changes" => "no_changes"
|
394
395
|
}
|
395
396
|
|
396
397
|
messaging_action = ask_with_menu("Configure Messaging", messaging_options)
|
@@ -420,8 +421,31 @@ Static Network Configuration
|
|
420
421
|
region = ManageIQ::ApplianceConsole::DatabaseConfiguration.region
|
421
422
|
|
422
423
|
case messaging_action
|
423
|
-
when "
|
424
|
-
|
424
|
+
when "message_server"
|
425
|
+
say("#{selection}\n\n")
|
426
|
+
|
427
|
+
message_server = MessageServerConfiguration.new
|
428
|
+
if message_server.ask_questions && message_server.configure
|
429
|
+
say("\nMessage Server configured successfully.\n")
|
430
|
+
press_any_key
|
431
|
+
else
|
432
|
+
say("\nMessage Server configuration failed!\n")
|
433
|
+
press_any_key
|
434
|
+
raise MiqSignalError
|
435
|
+
end
|
436
|
+
|
437
|
+
when "message_client"
|
438
|
+
say("#{selection}\n\n")
|
439
|
+
|
440
|
+
message_client = MessageClientConfiguration.new
|
441
|
+
if message_client.ask_questions && message_client.configure
|
442
|
+
say("\nMessage Client configured successfully.\n")
|
443
|
+
press_any_key
|
444
|
+
else
|
445
|
+
say("\nMessage Client configuration failed!\n")
|
446
|
+
press_any_key
|
447
|
+
raise MiqSignalError
|
448
|
+
end
|
425
449
|
end
|
426
450
|
|
427
451
|
press_any_key
|
@@ -11,10 +11,6 @@ module ManageIQ
|
|
11
11
|
def self.logger
|
12
12
|
@logger ||= ManageIQ::ApplianceConsole::Logger.instance
|
13
13
|
end
|
14
|
-
|
15
|
-
def self.logger=(logger)
|
16
|
-
@logger = logger
|
17
|
-
end
|
18
14
|
end
|
19
15
|
end
|
20
16
|
|
@@ -24,7 +20,6 @@ require 'manageiq/appliance_console/logger'
|
|
24
20
|
require 'manageiq/appliance_console/logging'
|
25
21
|
require 'manageiq/appliance_console/prompts'
|
26
22
|
|
27
|
-
require 'manageiq-gems-pending'
|
28
23
|
require 'highline'
|
29
24
|
|
30
25
|
require 'manageiq/appliance_console/auth_utilities'
|
@@ -43,7 +38,8 @@ require 'manageiq/appliance_console/internal_database_configuration'
|
|
43
38
|
require 'manageiq/appliance_console/key_configuration'
|
44
39
|
require 'manageiq/appliance_console/logfile_configuration'
|
45
40
|
require 'manageiq/appliance_console/logical_volume_management'
|
46
|
-
require 'manageiq/appliance_console/
|
41
|
+
require 'manageiq/appliance_console/message_configuration_client'
|
42
|
+
require 'manageiq/appliance_console/message_configuration_server'
|
47
43
|
require 'manageiq/appliance_console/oidc_authentication'
|
48
44
|
require 'manageiq/appliance_console/principal'
|
49
45
|
require 'manageiq/appliance_console/saml_authentication'
|
@@ -77,6 +77,22 @@ module ApplianceConsole
|
|
77
77
|
options[:saml_unconfig]
|
78
78
|
end
|
79
79
|
|
80
|
+
def message_server_config?
|
81
|
+
options[:message_server_config]
|
82
|
+
end
|
83
|
+
|
84
|
+
def message_server_unconfig?
|
85
|
+
options[:message_server_unconfig]
|
86
|
+
end
|
87
|
+
|
88
|
+
def message_client_config?
|
89
|
+
options[:message_client_config]
|
90
|
+
end
|
91
|
+
|
92
|
+
def message_client_unconfig?
|
93
|
+
options[:message_client_unconfig]
|
94
|
+
end
|
95
|
+
|
80
96
|
def oidc_config?
|
81
97
|
options[:oidc_config]
|
82
98
|
end
|
@@ -101,10 +117,6 @@ module ApplianceConsole
|
|
101
117
|
options[:openscap]
|
102
118
|
end
|
103
119
|
|
104
|
-
def configure_messaging?
|
105
|
-
options[:messaging_hostname] && options[:messaging_password] && options[:messaging_port] && options[:messaging_username]
|
106
|
-
end
|
107
|
-
|
108
120
|
def initialize(options = {})
|
109
121
|
self.options = options
|
110
122
|
end
|
@@ -175,15 +187,36 @@ module ApplianceConsole
|
|
175
187
|
opt :oidc_unconfig, "Unconfigure Appliance OpenID-Connect Authentication", :type => :boolean, :default => false
|
176
188
|
opt :server, "{start|stop|restart} actions on evmserverd Server", :type => :string
|
177
189
|
opt :openscap, "Setup OpenScap", :type => :boolean, :default => false
|
178
|
-
opt :
|
179
|
-
opt :
|
180
|
-
opt :
|
181
|
-
opt :
|
190
|
+
opt :message_server_config, "Subcommand to Configure Appliance as a Kafka Message Server", :type => :boolean, :default => false
|
191
|
+
opt :message_server_unconfig, "Subcommand to Unconfigure Appliance as a Kafka Message Server", :type => :boolean, :default => false
|
192
|
+
opt :message_client_config, "Subcommand to Configure Appliance as a Kafka Message Client", :type => :boolean, :default => false
|
193
|
+
opt :message_client_unconfig, "Subcommand to Unconfigure Appliance as a Kafka Message Client", :type => :boolean, :default => false
|
194
|
+
opt :message_keystore_username, "Message Server Keystore Username", :type => :string
|
195
|
+
opt :message_keystore_password, "Message Server Keystore Password", :type => :string
|
196
|
+
opt :message_server_username, "Message Server Username", :type => :string
|
197
|
+
opt :message_server_password, "Message Server password", :type => :string
|
198
|
+
opt :message_server_port, "Message Server Port", :type => :integer
|
199
|
+
opt :message_server_use_ipaddr, "Message Server Use Address", :type => :boolean, :default => false
|
200
|
+
opt :message_server_host, "Message Server Hostname or IP Address", :type => :string
|
201
|
+
opt :message_truststore_path_src, "Message Server Truststore Path", :type => :string
|
202
|
+
opt :message_ca_cert_path_src, "Message Server CA Cert Path", :type => :string
|
203
|
+
opt :message_persistent_disk, "Message Persistent Disk Path", :type => :string
|
182
204
|
end
|
183
205
|
Optimist.die :region, "needed when setting up a local database" if region_number_required? && options[:region].nil?
|
206
|
+
Optimist.die "Supply only one of --message-server-host or --message-server-use-ipaddr=true" if both_host_and_use_ip_addr_specified?
|
207
|
+
Optimist.die "Supply only one of --message-server-config, --message-server-unconfig, --message-client-config or --message-client-unconfig" if multiple_message_subcommands?
|
184
208
|
self
|
185
209
|
end
|
186
210
|
|
211
|
+
def both_host_and_use_ip_addr_specified?
|
212
|
+
!options[:message_server_host].nil? && options[:message_server_use_ipaddr] == true
|
213
|
+
end
|
214
|
+
|
215
|
+
def multiple_message_subcommands?
|
216
|
+
a = [options[:message_server_config], options[:message_server_unconfig], options[:message_client_config], options[:message_client_unconfig]]
|
217
|
+
a.each_with_object(Hash.new(0)) { |o, h| h[o] += 1 }[true] > 1
|
218
|
+
end
|
219
|
+
|
187
220
|
def region_number_required?
|
188
221
|
!options[:standalone] && local_database?
|
189
222
|
end
|
@@ -193,7 +226,9 @@ module ApplianceConsole
|
|
193
226
|
uninstall_ipa? || install_ipa? || certs? || extauth_opts? ||
|
194
227
|
set_server_state? || set_replication? || openscap? ||
|
195
228
|
saml_config? || saml_unconfig? ||
|
196
|
-
oidc_config? || oidc_unconfig? ||
|
229
|
+
oidc_config? || oidc_unconfig? ||
|
230
|
+
message_server_config? || message_server_unconfig? ||
|
231
|
+
message_client_config? || message_client_unconfig?
|
197
232
|
|
198
233
|
if set_host?
|
199
234
|
system_hosts = LinuxAdmin::Hosts.new
|
@@ -217,7 +252,10 @@ module ApplianceConsole
|
|
217
252
|
oidc_unconfig if oidc_unconfig?
|
218
253
|
set_server_state if set_server_state?
|
219
254
|
openscap if openscap?
|
220
|
-
|
255
|
+
message_server_config if message_server_config?
|
256
|
+
message_server_unconfig if message_server_unconfig?
|
257
|
+
message_client_config if message_client_config?
|
258
|
+
message_client_unconfig if message_client_unconfig?
|
221
259
|
rescue CliError => e
|
222
260
|
say(e.message)
|
223
261
|
say("")
|
@@ -419,6 +457,22 @@ module ApplianceConsole
|
|
419
457
|
OIDCAuthentication.new(options).unconfigure
|
420
458
|
end
|
421
459
|
|
460
|
+
def message_server_config
|
461
|
+
MessageServerConfiguration.new(options).configure
|
462
|
+
end
|
463
|
+
|
464
|
+
def message_server_unconfig
|
465
|
+
MessageServerConfiguration.new(options).unconfigure
|
466
|
+
end
|
467
|
+
|
468
|
+
def message_client_config
|
469
|
+
MessageClientConfiguration.new(options).configure
|
470
|
+
end
|
471
|
+
|
472
|
+
def message_client_unconfig
|
473
|
+
MessageClientConfiguration.new(options).unconfigure
|
474
|
+
end
|
475
|
+
|
422
476
|
def set_server_state
|
423
477
|
service = LinuxAdmin::Service.new("evmserverd")
|
424
478
|
service_running = service.running?
|
@@ -437,16 +491,6 @@ module ApplianceConsole
|
|
437
491
|
def self.parse(args)
|
438
492
|
new.parse(args).run
|
439
493
|
end
|
440
|
-
|
441
|
-
def configure_messaging
|
442
|
-
say("configuring messaging")
|
443
|
-
ManageIQ::ApplianceConsole::MessagingConfiguration.new.save(
|
444
|
-
"hostname" => options[:messaging_hostname],
|
445
|
-
"password" => options[:messaging_password],
|
446
|
-
"port" => options[:messaging_port],
|
447
|
-
"username" => options[:messaging_username]
|
448
|
-
)
|
449
|
-
end
|
450
494
|
end
|
451
495
|
end
|
452
496
|
end
|
@@ -8,7 +8,8 @@ require 'fileutils'
|
|
8
8
|
module ManageIQ
|
9
9
|
module ApplianceConsole
|
10
10
|
class DatabaseConfiguration
|
11
|
-
attr_accessor :adapter, :host, :username, :database, :
|
11
|
+
attr_accessor :adapter, :host, :username, :database, :port, :region
|
12
|
+
attr_reader :password
|
12
13
|
|
13
14
|
class ModelWithNoBackingTable < ActiveRecord::Base
|
14
15
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
+
require "manageiq/appliance_console/utilities"
|
1
2
|
require 'linux_admin'
|
2
3
|
require 'pathname'
|
3
4
|
require 'fileutils'
|
4
|
-
require 'util/miq-system.rb'
|
5
5
|
|
6
6
|
module ManageIQ
|
7
7
|
module ApplianceConsole
|
@@ -18,7 +18,7 @@ module ApplianceConsole
|
|
18
18
|
self.disk = config[:disk]
|
19
19
|
self.new_logrotate_count = nil
|
20
20
|
|
21
|
-
self.size =
|
21
|
+
self.size = Utilities.disk_usage(LOGFILE_DIRECTORY)[0][:total_bytes]
|
22
22
|
self.current_logrotate_count = /rotate\s+(\d+)/.match(File.read(MIQ_LOGS_CONF))[1]
|
23
23
|
self.evm_was_running = LinuxAdmin::Service.new("evmserverd").running?
|
24
24
|
end
|
@@ -0,0 +1,199 @@
|
|
1
|
+
require 'active_support/core_ext/module/delegation'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module ManageIQ
|
5
|
+
module ApplianceConsole
|
6
|
+
class MessageConfiguration
|
7
|
+
attr_reader :message_keystore_username, :message_keystore_password,
|
8
|
+
:message_server_host, :message_server_port,
|
9
|
+
:miq_config_dir_path, :config_dir_path, :sample_config_dir_path,
|
10
|
+
:client_properties_path,
|
11
|
+
:keystore_dir_path, :truststore_path, :keystore_path,
|
12
|
+
:messaging_yaml_sample_path, :messaging_yaml_path,
|
13
|
+
:ca_cert_path
|
14
|
+
|
15
|
+
BASE_DIR = "/opt/kafka".freeze
|
16
|
+
LOGS_DIR = "#{BASE_DIR}/logs".freeze
|
17
|
+
CONFIG_DIR = "#{BASE_DIR}/config".freeze
|
18
|
+
SAMPLE_CONFIG_DIR = "#{BASE_DIR}/config-sample".freeze
|
19
|
+
MIQ_CONFIG_DIR = ManageIQ::ApplianceConsole::RAILS_ROOT.join("config").freeze
|
20
|
+
|
21
|
+
def initialize(options = {})
|
22
|
+
@message_server_port = options[:message_server_port] || 9093
|
23
|
+
@message_keystore_username = options[:message_keystore_username] || "admin"
|
24
|
+
@message_keystore_password = options[:message_keystore_password]
|
25
|
+
|
26
|
+
@miq_config_dir_path = Pathname.new(MIQ_CONFIG_DIR)
|
27
|
+
@config_dir_path = Pathname.new(CONFIG_DIR)
|
28
|
+
@sample_config_dir_path = Pathname.new(SAMPLE_CONFIG_DIR)
|
29
|
+
|
30
|
+
@client_properties_path = config_dir_path.join("client.properties")
|
31
|
+
@keystore_dir_path = config_dir_path.join("keystore")
|
32
|
+
@truststore_path = keystore_dir_path.join("truststore.jks")
|
33
|
+
@keystore_path = keystore_dir_path.join("keystore.jks")
|
34
|
+
|
35
|
+
@messaging_yaml_sample_path = miq_config_dir_path.join("messaging.kafka.yml")
|
36
|
+
@messaging_yaml_path = miq_config_dir_path.join("messaging.yml")
|
37
|
+
@ca_cert_path = keystore_dir_path.join("ca-cert")
|
38
|
+
end
|
39
|
+
|
40
|
+
def already_configured?
|
41
|
+
installed_file_found = false
|
42
|
+
installed_files.each do |f|
|
43
|
+
if File.exist?(f)
|
44
|
+
installed_file_found = true
|
45
|
+
say("Installed file #{f} found.")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
installed_file_found
|
49
|
+
end
|
50
|
+
|
51
|
+
def ask_questions
|
52
|
+
return false unless valid_environment?
|
53
|
+
|
54
|
+
ask_for_parameters
|
55
|
+
show_parameters
|
56
|
+
return false unless agree("\nProceed? (Y/N): ")
|
57
|
+
|
58
|
+
return false unless host_reachable?(message_server_host, "Message Server Host:")
|
59
|
+
|
60
|
+
true
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_client_properties
|
64
|
+
say(__method__.to_s.tr("_", " ").titleize)
|
65
|
+
|
66
|
+
return if file_found?(client_properties_path)
|
67
|
+
|
68
|
+
algorithm = message_server_host.ipaddress? ? "" : "HTTPS"
|
69
|
+
protocol = secure? ? "SASL_SSL" : "PLAINTEXT"
|
70
|
+
content = secure? ? secure_client_properties_content(algorithm, protocol) : unsecure_client_properties_content(algorithm, protocol)
|
71
|
+
|
72
|
+
File.write(client_properties_path, content)
|
73
|
+
end
|
74
|
+
|
75
|
+
def secure_client_properties_content(algorithm, protocol)
|
76
|
+
secure_content = <<~CLIENT_PROPERTIES
|
77
|
+
ssl.truststore.location=#{truststore_path}
|
78
|
+
ssl.truststore.password=#{message_keystore_password}
|
79
|
+
CLIENT_PROPERTIES
|
80
|
+
|
81
|
+
unsecure_client_properties_content(algorithm, protocol) + secure_content
|
82
|
+
end
|
83
|
+
|
84
|
+
def unsecure_client_properties_content(algorithm, protocol)
|
85
|
+
<<~CLIENT_PROPERTIES
|
86
|
+
ssl.endpoint.identification.algorithm=#{algorithm}
|
87
|
+
|
88
|
+
sasl.mechanism=PLAIN
|
89
|
+
security.protocol=#{protocol}
|
90
|
+
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \\
|
91
|
+
username=#{message_keystore_username} \\
|
92
|
+
password=#{message_keystore_password} ;
|
93
|
+
CLIENT_PROPERTIES
|
94
|
+
end
|
95
|
+
|
96
|
+
def configure_messaging_yaml
|
97
|
+
say(__method__.to_s.tr("_", " ").titleize)
|
98
|
+
|
99
|
+
return if file_found?(messaging_yaml_path)
|
100
|
+
|
101
|
+
messaging_yaml = YAML.load_file(messaging_yaml_sample_path)
|
102
|
+
|
103
|
+
messaging_yaml["production"].delete("username")
|
104
|
+
messaging_yaml["production"].delete("password")
|
105
|
+
|
106
|
+
messaging_yaml["production"]["hostname"] = message_server_host
|
107
|
+
messaging_yaml["production"]["port"] = message_server_port
|
108
|
+
messaging_yaml["production"]["sasl.mechanism"] = "PLAIN"
|
109
|
+
messaging_yaml["production"]["sasl.username"] = message_keystore_username
|
110
|
+
messaging_yaml["production"]["sasl.password"] = ManageIQ::Password.try_encrypt(message_keystore_password)
|
111
|
+
|
112
|
+
if secure?
|
113
|
+
messaging_yaml["production"]["security.protocol"] = "SASL_SSL"
|
114
|
+
messaging_yaml["production"]["ssl.ca.location"] = ca_cert_path.to_path
|
115
|
+
else
|
116
|
+
messaging_yaml["production"]["security.protocol"] = "PLAINTEXT"
|
117
|
+
end
|
118
|
+
|
119
|
+
File.write(messaging_yaml_path, messaging_yaml.to_yaml)
|
120
|
+
end
|
121
|
+
|
122
|
+
def remove_installed_files
|
123
|
+
say(__method__.to_s.tr("_", " ").titleize)
|
124
|
+
|
125
|
+
installed_files.each { |f| FileUtils.rm_rf(f) }
|
126
|
+
end
|
127
|
+
|
128
|
+
def valid_environment?
|
129
|
+
if already_configured?
|
130
|
+
unconfigure if agree("\nAlready configured on this Appliance, Un-Configure first? (Y/N): ")
|
131
|
+
return false unless agree("\nProceed with Configuration? (Y/N): ")
|
132
|
+
end
|
133
|
+
true
|
134
|
+
end
|
135
|
+
|
136
|
+
def file_found?(path)
|
137
|
+
return false unless File.exist?(path)
|
138
|
+
|
139
|
+
say("\tWARNING: #{path} already exists. Taking no action.")
|
140
|
+
true
|
141
|
+
end
|
142
|
+
|
143
|
+
def files_found?(path_list)
|
144
|
+
return false unless path_list.all? { |path| File.exist?(path) }
|
145
|
+
|
146
|
+
path_list.each { |path| file_found?(path) }
|
147
|
+
true
|
148
|
+
end
|
149
|
+
|
150
|
+
def file_contains?(path, content)
|
151
|
+
return false unless File.exist?(path)
|
152
|
+
|
153
|
+
content.split("\n").each do |l|
|
154
|
+
l.gsub!("/", "\\/")
|
155
|
+
l.gsub!(/password=.*$/, "password=") # Remove the password as it can have special characters that grep can not match.
|
156
|
+
return false unless File.foreach(path).grep(/#{l}/).any?
|
157
|
+
end
|
158
|
+
|
159
|
+
say("Content already exists in #{path}. Taking no action.")
|
160
|
+
true
|
161
|
+
end
|
162
|
+
|
163
|
+
def host_reachable?(host, what)
|
164
|
+
require 'net/ping'
|
165
|
+
say("Checking connectivity to #{host} ... ")
|
166
|
+
unless Net::Ping::External.new(host).ping
|
167
|
+
say("Failed.\nCould not connect to #{host},")
|
168
|
+
say("the #{what} must be reachable by name.")
|
169
|
+
return false
|
170
|
+
end
|
171
|
+
say("Succeeded.")
|
172
|
+
true
|
173
|
+
end
|
174
|
+
|
175
|
+
def configure_messaging_type(value)
|
176
|
+
say(__method__.to_s.tr("_", " ").titleize)
|
177
|
+
|
178
|
+
result = ManageIQ::ApplianceConsole::Utilities.rake_run("evm:settings:set", ["/prototype/messaging_type=#{value}"])
|
179
|
+
raise parse_errors(result).join(', ') if result.failure?
|
180
|
+
end
|
181
|
+
|
182
|
+
def restart_evmserverd
|
183
|
+
say("Restart evmserverd if it is running...")
|
184
|
+
evmserverd_service = LinuxAdmin::Service.new("evmserverd")
|
185
|
+
evmserverd_service.restart if evmserverd_service.running?
|
186
|
+
end
|
187
|
+
|
188
|
+
def unconfigure
|
189
|
+
configure_messaging_type("miq_queue") # Settings.prototype.messaging_type = 'miq_queue'
|
190
|
+
restart_evmserverd
|
191
|
+
remove_installed_files
|
192
|
+
end
|
193
|
+
|
194
|
+
def secure?
|
195
|
+
message_server_port == 9_093
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|