manageiq-appliance_console 1.0.1 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b10986b5028473a3dc2c76b61a64e76ce3516a66
4
- data.tar.gz: b6da7fa0e0418a9de8e7cbdef7c2360cc6e5a693
2
+ SHA256:
3
+ metadata.gz: ab0a7cbd85921dd1332fbaa9b01329e3bc2a5197be9e12ea928f9737ee499003
4
+ data.tar.gz: 9a8fd3d5d58239eec4c21ce7efb4ecb2546215b7e0f66ec2a14c2f6fe81e66b6
5
5
  SHA512:
6
- metadata.gz: e77ae3abc9a699233df891bd03d21c69556f74f859530d62d01920d83334500a0244299e4b18dcc74f6dbb288c9f56b803d1859a46b776ba00e43485a118bbdb
7
- data.tar.gz: b7f905b13233cfeaaf3fbb77128f7253a96374777d896f48d6a6774041080d507317685209ab51fee860f142ba0df7ddad3218b13ce6035425ddbe98786b26a5
6
+ metadata.gz: ed57328bff42362e4a51920baa3268ed3a2d8d6e16a8b0da493eec419c65e05763ba820a0e195b61279bc521f4c012d0a5246fb9ebeacc5354543d89136eb8bd
7
+ data.tar.gz: 80e710fa562abca7f2a935b9828ebc91841730f9eac789214a35bc64439e011b07918cfea629649d11519eee676bd6264b404e6762b7ce3d6bbbaf94d372f824
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - '2.3.5'
3
+ - '2.3.1'
4
4
  - '2.4.2'
5
5
  sudo: false
6
6
  cache: bundler
@@ -173,7 +173,7 @@ To modify the configuration, use a web browser to access the management page.
173
173
  new_mask = ask_for_ipv4("Netmask", mask)
174
174
  new_gw = ask_for_ipv4("Gateway", gw)
175
175
  new_dns1 = ask_for_ipv4("Primary DNS", dns1)
176
- new_dns2 = ask_for_ipv4_or_none("Secondary DNS (Enter 'none' for no value)")
176
+ new_dns2 = ask_for_ipv4_or_none("Secondary DNS (Enter 'none' for no value)", dns2)
177
177
 
178
178
  new_search_order = ask_for_many("domain", "Domain search order", order)
179
179
 
@@ -225,7 +225,7 @@ Static Network Configuration
225
225
  new_prefix = ask_for_integer('IPv6 prefix length', 1..127, eth0.prefix6 || 64)
226
226
  new_gw = ask_for_ipv6('Default gateway', eth0.gateway6)
227
227
  new_dns1 = ask_for_ip('Primary DNS', dns1)
228
- new_dns2 = ask_for_ipv6_or_none("Secondary DNS (Enter 'none' for no value)")
228
+ new_dns2 = ask_for_ipv6_or_none("Secondary DNS (Enter 'none' for no value)", dns2)
229
229
 
230
230
  new_search_order = ask_for_many('domain', 'Domain search order', order)
231
231
 
@@ -24,6 +24,7 @@ require 'manageiq/appliance_console/logger'
24
24
  require 'manageiq/appliance_console/logging'
25
25
 
26
26
  require 'manageiq-gems-pending'
27
+ require 'highline'
27
28
 
28
29
  require 'manageiq/appliance_console/certificate'
29
30
  require 'manageiq/appliance_console/certificate_authority'
@@ -36,11 +36,11 @@ module ApplianceConsole
36
36
  end
37
37
 
38
38
  def database?
39
- hostname
39
+ options[:standalone] || hostname
40
40
  end
41
41
 
42
42
  def local_database?
43
- database? && local?(hostname)
43
+ database? && (local?(hostname) || options[:standalone])
44
44
  end
45
45
 
46
46
  def certs?
@@ -79,6 +79,14 @@ module ApplianceConsole
79
79
  options[:db_hourly_maintenance]
80
80
  end
81
81
 
82
+ def set_replication?
83
+ options[:cluster_node_number] && options[:password] && replication_params?
84
+ end
85
+
86
+ def replication_params?
87
+ options[:replication] == "primary" || (options[:replication] == "standby" && options[:primary_host])
88
+ end
89
+
82
90
  def initialize(options = {})
83
91
  self.options = options
84
92
  end
@@ -116,6 +124,11 @@ module ApplianceConsole
116
124
  opt :force_key, "Forcefully create encryption key", :type => :boolean, :short => "f"
117
125
  opt :sshlogin, "SSH login", :type => :string, :default => "root"
118
126
  opt :sshpassword, "SSH password", :type => :string
127
+ opt :replication, "Configure database replication as primary or standby", :type => :string, :short => :none
128
+ opt :primary_host, "Primary database host IP address", :type => :string, :short => :none
129
+ opt :standby_host, "Standby database host IP address", :type => :string, :short => :none
130
+ opt :auto_failover, "Configure Replication Manager (repmgrd) for automatic failover", :type => :bool, :short => :none
131
+ opt :cluster_node_number, "Database unique cluster node number", :type => :integer, :short => :none
119
132
  opt :verbose, "Verbose", :type => :boolean, :short => "v"
120
133
  opt :dbdisk, "Database Disk Path", :type => :string
121
134
  opt :logdisk, "Log Disk Path", :type => :string
@@ -134,14 +147,19 @@ module ApplianceConsole
134
147
  opt :extauth_opts, "External Authentication Options", :type => :string
135
148
  opt :server, "Server status", :type => :string
136
149
  end
137
- Trollop.die :region, "needed when setting up a local database" if options[:region].nil? && local_database?
150
+ Trollop.die :region, "needed when setting up a local database" if region_number_required? && options[:region].nil?
138
151
  self
139
152
  end
140
153
 
154
+ def region_number_required?
155
+ !options[:standalone] && local_database?
156
+ end
157
+
141
158
  def run
142
159
  Trollop.educate unless set_host? || key? || database? || tmp_disk? || log_disk? ||
143
160
  uninstall_ipa? || install_ipa? || certs? || extauth_opts? ||
144
- time_zone? || set_server_state? || db_hourly_maintenance?
161
+ time_zone? || set_server_state? || db_hourly_maintenance? ||
162
+ set_replication?
145
163
  if set_host?
146
164
  system_hosts = LinuxAdmin::Hosts.new
147
165
  system_hosts.hostname = options[:host]
@@ -151,6 +169,7 @@ module ApplianceConsole
151
169
  end
152
170
  create_key if key?
153
171
  set_db if database?
172
+ set_replication if set_replication?
154
173
  set_time_zone if time_zone?
155
174
  config_db_hourly_maintenance if db_hourly_maintenance?
156
175
  config_tmp_disk if tmp_disk?
@@ -232,8 +251,28 @@ module ApplianceConsole
232
251
  config.post_activation
233
252
  end
234
253
 
254
+ def set_replication
255
+ if options[:replication] == "primary"
256
+ db_replication = ManageIQ::ApplianceConsole::DatabaseReplicationPrimary.new
257
+ say("Configuring Server as Primary")
258
+ else
259
+ db_replication = ManageIQ::ApplianceConsole::DatabaseReplicationStandby.new
260
+ say("Configuring Server as Standby")
261
+ db_replication.disk = disk_from_string(options[:dbdisk])
262
+ db_replication.primary_host = options[:primary_host]
263
+ db_replication.standby_host = options[:standby_host] if options[:standby_host]
264
+ db_replication.run_repmgrd_configuration = options[:auto_failover] ? true : false
265
+ end
266
+ db_replication.database_name = options[:dbname] if options[:dbname]
267
+ db_replication.database_user = options[:username] if options[:username]
268
+ db_replication.node_number = options[:cluster_node_number]
269
+ db_replication.database_password = options[:password]
270
+ db_replication.activate
271
+ end
272
+
235
273
  def set_time_zone
236
274
  timezone_config = ManageIQ::ApplianceConsole::TimezoneConfiguration.new(options[:timezone])
275
+ timezone_config.new_timezone = options[:timezone]
237
276
  if timezone_config.activate
238
277
  say("Timezone configured")
239
278
  else
@@ -254,7 +293,8 @@ module ApplianceConsole
254
293
  def create_key
255
294
  say "#{key_configuration.action} encryption key"
256
295
  unless key_configuration.activate
257
- raise "Could not create encryption key (v2_key)"
296
+ say("Could not create encryption key (v2_key)")
297
+ exit(1)
258
298
  end
259
299
  end
260
300
 
@@ -80,7 +80,8 @@ module ApplianceConsole
80
80
  end
81
81
 
82
82
  def create_region
83
- ManageIQ::ApplianceConsole::Utilities.bail_if_db_connections("preventing the setup of a database region")
83
+ hint = "Please stop the EVM server process on all appliances in the region"
84
+ ManageIQ::ApplianceConsole::Utilities.bail_if_db_connections("preventing the setup of a database region.\n#{hint}")
84
85
  log_and_feedback(__method__) do
85
86
  ManageIQ::ApplianceConsole::Utilities.rake("evm:db:region", ["--", {:region => region}])
86
87
  end
@@ -6,9 +6,10 @@ module ApplianceConsole
6
6
  class DatabaseReplication
7
7
  include ManageIQ::ApplianceConsole::Logging
8
8
 
9
- REPMGR_CONFIG = '/etc/repmgr.conf'.freeze
10
- REPMGR_LOG = '/var/log/repmgr/repmgrd.log'.freeze
11
- PGPASS_FILE = '/var/lib/pgsql/.pgpass'.freeze
9
+ REPMGR_CONFIG = '/etc/repmgr.conf'.freeze
10
+ REPMGR_LOG = '/var/log/repmgr/repmgrd.log'.freeze
11
+ PGPASS_FILE = '/var/lib/pgsql/.pgpass'.freeze
12
+ NETWORK_INTERFACE = 'eth0'.freeze
12
13
 
13
14
  attr_accessor :cluster_name, :node_number, :database_name, :database_user,
14
15
  :database_password, :primary_host
@@ -71,7 +72,7 @@ Replication Server Configuration
71
72
  primary_region_number =
72
73
  pg_conn.exec("SELECT last_value FROM miq_databases_id_seq").first["last_value"].to_i / 1_000_000_000_000
73
74
  self.cluster_name = "miq_region_#{primary_region_number}_cluster"
74
- rescue PG::ConnectionBad => e
75
+ rescue PG::ConnectionBad, PG::UndefinedTable => e
75
76
  say("Failed to get primary region number #{e.message}")
76
77
  logger.error("Failed to get primary region number #{e.message}")
77
78
  return false
@@ -65,11 +65,11 @@ module ApplianceConsole
65
65
  end
66
66
 
67
67
  def choose_disk
68
- @disk = ask_for_disk("database disk")
68
+ @disk = ask_for_disk("database disk", false, true)
69
69
  end
70
70
 
71
71
  def check_disk_is_mount_point
72
- error_message = "The disk for database must be a mount point"
72
+ error_message = "Internal databases require a volume mounted at #{mount_point}. Please add an unpartitioned disk and try again."
73
73
  raise error_message unless disk || pg_mount_point?
74
74
  end
75
75
 
@@ -144,12 +144,12 @@ module ApplianceConsole
144
144
  just_ask(prompt, default, INT_REGEXP, "an integer", Integer) { |q| q.in = range if range }
145
145
  end
146
146
 
147
- def ask_for_disk(disk_name, verify = true)
147
+ def ask_for_disk(disk_name, verify = true, silent = false)
148
148
  require "linux_admin"
149
149
  disks = LinuxAdmin::Disk.local.select { |d| d.partitions.empty? }
150
150
 
151
151
  if disks.empty?
152
- say "No partition found for #{disk_name}. You probably want to add an unpartitioned disk and try again."
152
+ say("No partition found for #{disk_name}. You probably want to add an unpartitioned disk and try again.") unless silent
153
153
  else
154
154
  default_choice = disks.size == 1 ? "1" : nil
155
155
  disk = ask_with_menu(
@@ -160,9 +160,8 @@ module ApplianceConsole
160
160
  q.choice("Don't partition the disk") { nil }
161
161
  end
162
162
  end
163
-
164
163
  if verify && disk.nil?
165
- say ""
164
+ say("")
166
165
  raise MiqSignalError unless are_you_sure?(" you don't want to partition the #{disk_name}")
167
166
  end
168
167
  disk
@@ -1,5 +1,5 @@
1
1
  module ManageIQ
2
2
  module ApplianceConsole
3
- VERSION = '1.0.1'.freeze
3
+ VERSION = '1.1.0'.freeze
4
4
  end
5
5
  end
@@ -20,8 +20,8 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_runtime_dependency "activerecord"
24
- spec.add_runtime_dependency "activesupport"
23
+ spec.add_runtime_dependency "activerecord", ">= 4.2.2"
24
+ spec.add_runtime_dependency "activesupport", ">= 4.2.2"
25
25
  spec.add_runtime_dependency "awesome_spawn", "~> 1.4"
26
26
  spec.add_runtime_dependency "bcrypt", "~> 3.1.10"
27
27
  spec.add_runtime_dependency "highline", "~> 1.6.21"
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: 1.0.1
4
+ version: 1.1.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: 2017-10-19 00:00:00.000000000 Z
11
+ date: 2017-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 4.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 4.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 4.2.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 4.2.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: awesome_spawn
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -296,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
296
  version: '0'
297
297
  requirements: []
298
298
  rubyforge_project:
299
- rubygems_version: 2.6.11
299
+ rubygems_version: 2.7.2
300
300
  signing_key:
301
301
  specification_version: 4
302
302
  summary: ManageIQ Appliance Console