ops_manager_ui_drivers 0.16.0 → 1.0.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/lib/ops_manager_ui_drivers/page_helpers.rb +0 -8
- data/lib/ops_manager_ui_drivers/version.rb +1 -1
- metadata +1 -18
- data/lib/ops_manager_ui_drivers/version13/api_1_3.rb +0 -40
- data/lib/ops_manager_ui_drivers/version13/availability_zones.rb +0 -55
- data/lib/ops_manager_ui_drivers/version13/available_products.rb +0 -25
- data/lib/ops_manager_ui_drivers/version13/iaas_configuration.rb +0 -65
- data/lib/ops_manager_ui_drivers/version13/install_progress.rb +0 -43
- data/lib/ops_manager_ui_drivers/version13/job_availability_zone_mapping_helper.rb +0 -70
- data/lib/ops_manager_ui_drivers/version13/job_network_mapping_helper.rb +0 -47
- data/lib/ops_manager_ui_drivers/version13/job_status_helper.rb +0 -17
- data/lib/ops_manager_ui_drivers/version13/networks.rb +0 -83
- data/lib/ops_manager_ui_drivers/version13/ops_manager_director.rb +0 -140
- data/lib/ops_manager_ui_drivers/version13/product_availability_zones.rb +0 -38
- data/lib/ops_manager_ui_drivers/version13/product_dashboard.rb +0 -157
- data/lib/ops_manager_ui_drivers/version13/product_logs.rb +0 -53
- data/lib/ops_manager_ui_drivers/version13/product_resource_configuration.rb +0 -46
- data/lib/ops_manager_ui_drivers/version13/product_status_helper.rb +0 -64
- data/lib/ops_manager_ui_drivers/version13/setup.rb +0 -40
- data/lib/ops_manager_ui_drivers/version13/web_ui.rb +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6077d80e46eb38cff09d0120cb6867e8490e3c04
|
4
|
+
data.tar.gz: c5adbba698bf03de4747fe69aec4585c29686e74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8865b18eb9a16aa2836d1779ebd7681fdd7b88183bfe8b5c2941b0ff906715851eacb11787bfdbd2cc5503b2df62bc1644866a214e5002969691c6de63f9b030
|
7
|
+
data.tar.gz: af1010289135d4597d20b3450efc937d47394927e44e98a18735d76f19187e293bd97ec024d4fb500df949186fd239aa9b61a4d0ff68208a526fb4435dc40b8b
|
@@ -4,10 +4,6 @@ module OpsManagerUiDrivers
|
|
4
4
|
module PageHelpers
|
5
5
|
include OpsManagerUiDrivers::WaitHelper
|
6
6
|
|
7
|
-
def om_1_3(ops_manager_url)
|
8
|
-
@om_1_3 ||= create_web_ui(ops_manager_url, Version13)
|
9
|
-
end
|
10
|
-
|
11
7
|
def om_1_4(ops_manager_url)
|
12
8
|
@om_1_4 ||= create_web_ui(ops_manager_url, Version14)
|
13
9
|
end
|
@@ -20,10 +16,6 @@ module OpsManagerUiDrivers
|
|
20
16
|
@om_1_6 ||= create_web_ui(ops_manager_url, Version16)
|
21
17
|
end
|
22
18
|
|
23
|
-
def api_1_3(host:, username:, password:)
|
24
|
-
Version13::Api.new(host: host, user: username, password: password)
|
25
|
-
end
|
26
|
-
|
27
19
|
def api_1_4(host:, username:, password:)
|
28
20
|
Version14::Api.new(host: host, user: username, password: password)
|
29
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ops_manager_ui_drivers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pivotal, Inc.
|
@@ -156,23 +156,6 @@ files:
|
|
156
156
|
- lib/ops_manager_ui_drivers.rb
|
157
157
|
- lib/ops_manager_ui_drivers/page_helpers.rb
|
158
158
|
- lib/ops_manager_ui_drivers/version.rb
|
159
|
-
- lib/ops_manager_ui_drivers/version13/api_1_3.rb
|
160
|
-
- lib/ops_manager_ui_drivers/version13/availability_zones.rb
|
161
|
-
- lib/ops_manager_ui_drivers/version13/available_products.rb
|
162
|
-
- lib/ops_manager_ui_drivers/version13/iaas_configuration.rb
|
163
|
-
- lib/ops_manager_ui_drivers/version13/install_progress.rb
|
164
|
-
- lib/ops_manager_ui_drivers/version13/job_availability_zone_mapping_helper.rb
|
165
|
-
- lib/ops_manager_ui_drivers/version13/job_network_mapping_helper.rb
|
166
|
-
- lib/ops_manager_ui_drivers/version13/job_status_helper.rb
|
167
|
-
- lib/ops_manager_ui_drivers/version13/networks.rb
|
168
|
-
- lib/ops_manager_ui_drivers/version13/ops_manager_director.rb
|
169
|
-
- lib/ops_manager_ui_drivers/version13/product_availability_zones.rb
|
170
|
-
- lib/ops_manager_ui_drivers/version13/product_dashboard.rb
|
171
|
-
- lib/ops_manager_ui_drivers/version13/product_logs.rb
|
172
|
-
- lib/ops_manager_ui_drivers/version13/product_resource_configuration.rb
|
173
|
-
- lib/ops_manager_ui_drivers/version13/product_status_helper.rb
|
174
|
-
- lib/ops_manager_ui_drivers/version13/setup.rb
|
175
|
-
- lib/ops_manager_ui_drivers/version13/web_ui.rb
|
176
159
|
- lib/ops_manager_ui_drivers/version14/api_1_4.rb
|
177
160
|
- lib/ops_manager_ui_drivers/version14/availability_zones.rb
|
178
161
|
- lib/ops_manager_ui_drivers/version14/available_products.rb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
|
3
|
-
module OpsManagerUiDrivers
|
4
|
-
module Version13
|
5
|
-
class Api
|
6
|
-
def initialize(host: nil, user: nil, password: nil)
|
7
|
-
@host = host
|
8
|
-
@user = user
|
9
|
-
@password = password
|
10
|
-
end
|
11
|
-
|
12
|
-
def export_installation
|
13
|
-
response = http.request(get('installation_asset_collection'))
|
14
|
-
|
15
|
-
Tempfile.new('installation.zip').tap do |tempfile|
|
16
|
-
tempfile.write(response.body)
|
17
|
-
tempfile.close
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def http
|
24
|
-
uri = URI(@host)
|
25
|
-
Net::HTTP.new(uri.host, uri.port).tap do |http|
|
26
|
-
http.use_ssl = true
|
27
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
28
|
-
http.read_timeout = 1800
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def get(endpoint)
|
33
|
-
uri = URI("#{@host}/api/#{endpoint}")
|
34
|
-
Net::HTTP::Get.new(uri.request_uri).tap do |get|
|
35
|
-
get.basic_auth(@user, @password)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class AvailabilityZones
|
4
|
-
def initialize(browser:, product:)
|
5
|
-
@browser = browser
|
6
|
-
@product = product
|
7
|
-
end
|
8
|
-
|
9
|
-
def add_az(name, cluster, resource_pool)
|
10
|
-
open_form('availability_zones')
|
11
|
-
|
12
|
-
browser.click_on 'Add'
|
13
|
-
set_fields(
|
14
|
-
fields: {
|
15
|
-
'name' => name,
|
16
|
-
'cluster' => cluster,
|
17
|
-
'resource_pool' => resource_pool,
|
18
|
-
}
|
19
|
-
)
|
20
|
-
save_form
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
attr_reader(
|
25
|
-
:browser,
|
26
|
-
:product,
|
27
|
-
)
|
28
|
-
|
29
|
-
def save_form
|
30
|
-
browser.click_on 'Save'
|
31
|
-
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
32
|
-
end
|
33
|
-
|
34
|
-
def open_form(form)
|
35
|
-
browser.visit '/'
|
36
|
-
browser.click_on "show-#{product}-configure-action"
|
37
|
-
browser.click_on "show-#{form}-action"
|
38
|
-
end
|
39
|
-
|
40
|
-
def set_fields(fields:)
|
41
|
-
fields.each do |field, value|
|
42
|
-
set_field(field, value)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def set_field(field, value)
|
47
|
-
last_field(field).set(value)
|
48
|
-
end
|
49
|
-
|
50
|
-
def last_field(field)
|
51
|
-
browser.all(:field, "availability_zones[availability_zones][][#{field}]").last
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class AvailableProducts
|
4
|
-
def initialize(browser:)
|
5
|
-
@browser = browser
|
6
|
-
end
|
7
|
-
|
8
|
-
def add_product_to_install(product_name)
|
9
|
-
browser.visit '/'
|
10
|
-
browser.click_on "add-#{product_name}"
|
11
|
-
browser.find("#show-#{product_name}-configure-action", wait: 10)
|
12
|
-
end
|
13
|
-
|
14
|
-
def product_added?(product_name)
|
15
|
-
browser.visit '/'
|
16
|
-
browser.all("#show-#{product_name}-configure-action").any?
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
attr_reader :browser
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class IaasConfiguration
|
4
|
-
def initialize(browser:, product:)
|
5
|
-
@browser = browser
|
6
|
-
@product = product
|
7
|
-
end
|
8
|
-
|
9
|
-
def configure_iaas
|
10
|
-
open_form('iaas_configuration')
|
11
|
-
|
12
|
-
yield
|
13
|
-
|
14
|
-
save_form
|
15
|
-
end
|
16
|
-
|
17
|
-
def set_vsphere_credentials(vcenter_ip:, username:, password:)
|
18
|
-
set_field('vcenter_ip', vcenter_ip)
|
19
|
-
set_field('vcenter_username', username)
|
20
|
-
set_field('vcenter_password', password)
|
21
|
-
end
|
22
|
-
|
23
|
-
def set_vcloud_credentials(vcd_url:, organization:, user:, password:)
|
24
|
-
set_field('vcd_url', vcd_url)
|
25
|
-
set_field('organization', organization)
|
26
|
-
set_field('vcd_username', user)
|
27
|
-
set_field('vcd_password', password)
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
def set_datacenter(datacenter)
|
32
|
-
set_field('datacenter', datacenter)
|
33
|
-
end
|
34
|
-
|
35
|
-
def set_datastores(datastores)
|
36
|
-
set_field('datastores_string', datastores)
|
37
|
-
end
|
38
|
-
|
39
|
-
def set_storage_profile(storage_profile)
|
40
|
-
set_field('storage_profile', storage_profile)
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
attr_reader(
|
45
|
-
:browser,
|
46
|
-
:product,
|
47
|
-
)
|
48
|
-
|
49
|
-
def save_form
|
50
|
-
browser.click_on 'Save'
|
51
|
-
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
52
|
-
end
|
53
|
-
|
54
|
-
def open_form(form)
|
55
|
-
browser.visit '/'
|
56
|
-
browser.click_on "show-#{product}-configure-action"
|
57
|
-
browser.click_on "show-#{form}-action"
|
58
|
-
end
|
59
|
-
|
60
|
-
def set_field(field, value)
|
61
|
-
browser.find_field("iaas_configuration[#{field}]").set(value)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class InstallProgress
|
4
|
-
def initialize(browser:)
|
5
|
-
@browser = browser
|
6
|
-
end
|
7
|
-
|
8
|
-
def install_success?
|
9
|
-
open_install_progress
|
10
|
-
browser.all('#install-success-modal').any?
|
11
|
-
end
|
12
|
-
|
13
|
-
def errand_ran?(errand_name)
|
14
|
-
open_install_progress
|
15
|
-
browser.find('#install-output .output', visible: false).text(:all).
|
16
|
-
include?("Errand `#{errand_name}' completed successfully (exit code 0)")
|
17
|
-
end
|
18
|
-
|
19
|
-
def errand_ran_with_text?(errand_name)
|
20
|
-
{
|
21
|
-
errand_ran: errand_ran?(errand_name),
|
22
|
-
output: browser.find('#install-output .output', visible: false).text(:all),
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def open_install_progress
|
29
|
-
browser.visit '/install' unless install_progress_open?
|
30
|
-
browser.fail_early('Install probably aborted immediately') unless install_progress_open?
|
31
|
-
browser.fail_early('Install failed') if browser.all('#install-failure-modal').any?
|
32
|
-
end
|
33
|
-
|
34
|
-
def install_progress_open?
|
35
|
-
browser.current_path == '/install'
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
attr_reader :browser
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class JobAvailabilityZoneMappingHelper
|
4
|
-
def initialize(product_name: nil, browser: nil)
|
5
|
-
@product_name = product_name
|
6
|
-
@browser = browser
|
7
|
-
end
|
8
|
-
|
9
|
-
SINGLETON_AVAILABILITY_ZONE_INPUT_SELECTOR = "input[name='product[singleton_availability_zone_reference]']"
|
10
|
-
AVAILABILITY_ZONE_INPUT_SELECTOR = "input[name='product[availability_zone_references][]']"
|
11
|
-
|
12
|
-
def assign_availability_zones!(singleton_availability_zone:, availability_zones:)
|
13
|
-
open_form
|
14
|
-
|
15
|
-
browser.all(AVAILABILITY_ZONE_INPUT_SELECTOR).each do |checkbox|
|
16
|
-
checkbox.set(false)
|
17
|
-
end
|
18
|
-
|
19
|
-
availability_zones.each do |az_name|
|
20
|
-
browser.check("#{az_name}")
|
21
|
-
end
|
22
|
-
|
23
|
-
browser.choose("#{singleton_availability_zone}")
|
24
|
-
|
25
|
-
save_form
|
26
|
-
end
|
27
|
-
|
28
|
-
def singleton_availability_zone
|
29
|
-
open_form
|
30
|
-
|
31
|
-
selected_options = browser.all("#{SINGLETON_AVAILABILITY_ZONE_INPUT_SELECTOR}[selected='selected']").map do |radio|
|
32
|
-
browser.find("label[for='#{radio[:id]}']").text
|
33
|
-
end
|
34
|
-
|
35
|
-
raise ArgumentError, 'availability_zone not selected' if selected_options.empty?
|
36
|
-
selected_options.first
|
37
|
-
end
|
38
|
-
|
39
|
-
def availability_zones
|
40
|
-
open_form
|
41
|
-
|
42
|
-
browser.all("#{AVAILABILITY_ZONE_INPUT_SELECTOR}[checked='checked']").map do |checkbox|
|
43
|
-
browser.find("label[for='#{checkbox[:id]}']").text
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
attr_reader :browser, :product_name
|
50
|
-
|
51
|
-
def open_form
|
52
|
-
browser.visit '/'
|
53
|
-
browser.click_on "show-#{product_name}-configure-action"
|
54
|
-
browser.click_on "show-#{product_name}-job-availability-zone-assignment-action"
|
55
|
-
end
|
56
|
-
|
57
|
-
def save_form
|
58
|
-
browser.click_on 'Save'
|
59
|
-
|
60
|
-
unless browser.has_css?('.flash-message.success')
|
61
|
-
if browser.has_css?('.flash-message.error')
|
62
|
-
raise browser.find('.flash-message.error').text
|
63
|
-
else
|
64
|
-
raise 'unexpected failure'
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class JobNetworkMappingHelper
|
4
|
-
PRODUCT_NETWORK_FIELD_NAME = 'product_network_assignment'
|
5
|
-
|
6
|
-
def initialize(product_name:, browser:)
|
7
|
-
@product_name = product_name
|
8
|
-
@browser = browser
|
9
|
-
end
|
10
|
-
|
11
|
-
def assign_product_to_network(network)
|
12
|
-
open_form
|
13
|
-
browser.find_field(PRODUCT_NETWORK_FIELD_NAME).find(:option, text: network).select_option
|
14
|
-
save_form
|
15
|
-
end
|
16
|
-
|
17
|
-
def product_network
|
18
|
-
open_form
|
19
|
-
selected_options = browser.find_field(PRODUCT_NETWORK_FIELD_NAME).all('option[selected]')
|
20
|
-
raise ArgumentError, "#{PRODUCT_NETWORK_FIELD_NAME} not selected" if selected_options.empty?
|
21
|
-
selected_options.first.text
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
attr_reader :product_name, :browser
|
27
|
-
|
28
|
-
def open_form
|
29
|
-
browser.visit '/'
|
30
|
-
browser.click_on "show-#{product_name}-configure-action"
|
31
|
-
browser.click_on "show-#{product_name}-job-network-assignment-action"
|
32
|
-
end
|
33
|
-
|
34
|
-
def save_form
|
35
|
-
browser.click_on 'Save'
|
36
|
-
|
37
|
-
unless browser.has_css?('.flash-message.success')
|
38
|
-
if browser.has_css?('.flash-message.error')
|
39
|
-
raise browser.find('.flash-message.error').text
|
40
|
-
else
|
41
|
-
raise 'unexpected failure'
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class JobStatusHelper
|
4
|
-
def self.from_job_row(job_row)
|
5
|
-
ips_string = job_row.find('.actual-ips').text
|
6
|
-
ips = ips_string.split(', ')
|
7
|
-
new(ips: ips)
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(ips:)
|
11
|
-
@ips = ips
|
12
|
-
end
|
13
|
-
|
14
|
-
attr_reader :ips
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class Networks
|
4
|
-
def initialize(browser:, product:)
|
5
|
-
@browser = browser
|
6
|
-
@product = product
|
7
|
-
|
8
|
-
@allowed_ignorable_errors = []
|
9
|
-
end
|
10
|
-
|
11
|
-
def add_network(name:, iaas_network_identifier:, subnet:, dns:, gateway:, reserved_ip_ranges:)
|
12
|
-
open_form('network')
|
13
|
-
|
14
|
-
browser.click_on 'Add'
|
15
|
-
set_fields(
|
16
|
-
fields: {
|
17
|
-
'name' => name,
|
18
|
-
'iaas_network_identifier' => iaas_network_identifier,
|
19
|
-
'subnet' => subnet,
|
20
|
-
'dns' => dns,
|
21
|
-
'gateway' => gateway,
|
22
|
-
'reserved_ip_ranges' => reserved_ip_ranges,
|
23
|
-
}
|
24
|
-
)
|
25
|
-
|
26
|
-
allow_network_not_found_errors
|
27
|
-
save_form
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
attr_reader :browser, :product
|
33
|
-
|
34
|
-
def allow_network_not_found_errors
|
35
|
-
network_not_found = /not found in datacenter/
|
36
|
-
return if @allowed_ignorable_errors.include?(network_not_found)
|
37
|
-
|
38
|
-
@allowed_ignorable_errors << network_not_found
|
39
|
-
end
|
40
|
-
|
41
|
-
def expect_allowed_ignorable_errors
|
42
|
-
flash_errors = browser.all('.flash-message.error')
|
43
|
-
|
44
|
-
if flash_errors.any?
|
45
|
-
unexpected_errors = flash_errors.reject do |error|
|
46
|
-
@allowed_ignorable_errors.select do |expected_error|
|
47
|
-
error.text =~ expected_error
|
48
|
-
end.any?
|
49
|
-
end
|
50
|
-
|
51
|
-
fail "Unexepcted ignorable errors: #{unexpected_errors.map(&:text).inspect}" unless unexpected_errors.empty?
|
52
|
-
else
|
53
|
-
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def save_form
|
58
|
-
browser.click_on 'Save'
|
59
|
-
expect_allowed_ignorable_errors
|
60
|
-
end
|
61
|
-
|
62
|
-
def open_form(form)
|
63
|
-
browser.visit '/'
|
64
|
-
browser.click_on "show-#{product}-configure-action"
|
65
|
-
browser.click_on "show-#{form}-action"
|
66
|
-
end
|
67
|
-
|
68
|
-
def set_fields(fields:)
|
69
|
-
fields.each do |field, value|
|
70
|
-
set_field(field, value)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def set_field(field, value)
|
75
|
-
last_field(field).set(value)
|
76
|
-
end
|
77
|
-
|
78
|
-
def last_field(field)
|
79
|
-
browser.all(:field, "network[networks][][#{field}]").last
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,140 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class OpsManagerDirector
|
4
|
-
def initialize(browser:)
|
5
|
-
@browser = browser
|
6
|
-
end
|
7
|
-
|
8
|
-
def configure_microbosh(test_settings)
|
9
|
-
@product = test_settings.persistent_ops_manager.v13.microbosh_product_name
|
10
|
-
|
11
|
-
configure_iaas(test_settings)
|
12
|
-
|
13
|
-
config_director(ntp_servers: test_settings.ops_manager.ntp_servers)
|
14
|
-
|
15
|
-
add_azs(test_settings.ops_manager.availability_zones)
|
16
|
-
|
17
|
-
assign_availability_zone(test_settings.ops_manager.availability_zones)
|
18
|
-
|
19
|
-
add_networks(test_settings.ops_manager.networks)
|
20
|
-
|
21
|
-
assign_networks(test_settings.ops_manager)
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
attr_reader :browser
|
26
|
-
|
27
|
-
def product
|
28
|
-
@product || 'microbosh'
|
29
|
-
end
|
30
|
-
|
31
|
-
def configure_iaas(test_settings)
|
32
|
-
case test_settings.iaas_type
|
33
|
-
when OpsManagerUiDrivers::VCLOUD_IAAS_TYPE then
|
34
|
-
configure_vcloud(
|
35
|
-
vcd_url: test_settings.ops_manager.vcloud.creds.url,
|
36
|
-
organization: test_settings.ops_manager.vcloud.creds.organization,
|
37
|
-
user: test_settings.ops_manager.vcloud.creds.user,
|
38
|
-
password: test_settings.ops_manager.vcloud.creds.password,
|
39
|
-
datacenter: test_settings.ops_manager.vcloud.vdc.name,
|
40
|
-
storage_profile: test_settings.ops_manager.vcloud.vdc.storage_profile,
|
41
|
-
)
|
42
|
-
when OpsManagerUiDrivers::VSPHERE_IAAS_TYPE then
|
43
|
-
configure_vcenter(
|
44
|
-
ip: test_settings.ops_manager.vcenter.creds.ip,
|
45
|
-
username: test_settings.ops_manager.vcenter.creds.username,
|
46
|
-
password: test_settings.ops_manager.vcenter.creds.password,
|
47
|
-
datacenter: test_settings.ops_manager.vcenter.datacenter,
|
48
|
-
datastores: test_settings.ops_manager.vcenter.datastore,
|
49
|
-
)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def add_azs(iaas_availability_zones)
|
54
|
-
iaas_availability_zones && iaas_availability_zones.each do |az|
|
55
|
-
availability_zones.add_az(az['name'], az['cluster'], az['resource_pool'])
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def add_networks(iaas_networks)
|
60
|
-
iaas_networks && iaas_networks.each do |network|
|
61
|
-
networks.add_network(
|
62
|
-
name: network['name'],
|
63
|
-
iaas_network_identifier: network['identifier'],
|
64
|
-
subnet: network['subnet'],
|
65
|
-
dns: network['dns'],
|
66
|
-
gateway: network['gateway'],
|
67
|
-
reserved_ip_ranges: network['reserved_ips'],
|
68
|
-
)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def config_director(ntp_servers:)
|
73
|
-
browser.click_on 'Director Config'
|
74
|
-
browser.fill_in('director_configuration[ntp_servers_string]', with: ntp_servers)
|
75
|
-
browser.click_on 'Save'
|
76
|
-
end
|
77
|
-
|
78
|
-
def assign_availability_zone(iaas_availability_zones)
|
79
|
-
if iaas_availability_zones
|
80
|
-
browser.click_on 'Assign Availability Zones'
|
81
|
-
browser.select(iaas_availability_zones.first['name'])
|
82
|
-
browser.click_on 'Save'
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def assign_networks(ops_manager)
|
87
|
-
deployment_network = ops_manager.networks[0]
|
88
|
-
|
89
|
-
infrastructure_network =
|
90
|
-
ops_manager.networks[1] ? ops_manager.networks[1] : ops_manager.networks[0]
|
91
|
-
|
92
|
-
assign_networks_on_browser(
|
93
|
-
infrastructure_network: infrastructure_network['name'],
|
94
|
-
deployment_network: deployment_network['name'],
|
95
|
-
)
|
96
|
-
end
|
97
|
-
|
98
|
-
def assign_networks_on_browser(infrastructure_network:, deployment_network:)
|
99
|
-
browser.click_on 'Assign Networks'
|
100
|
-
|
101
|
-
browser.within browser.find '#director_network_assignments_infrastructure_network' do
|
102
|
-
browser.select infrastructure_network
|
103
|
-
end
|
104
|
-
|
105
|
-
browser.within browser.find '#director_network_assignments_deployment_network' do
|
106
|
-
browser.select deployment_network
|
107
|
-
end
|
108
|
-
browser.click_on 'Save'
|
109
|
-
end
|
110
|
-
|
111
|
-
def configure_vcenter(ip:, username:, password:, datacenter:, datastores:)
|
112
|
-
iaas_configuration.configure_iaas do
|
113
|
-
iaas_configuration.set_vsphere_credentials(vcenter_ip: ip, username: username, password: password)
|
114
|
-
iaas_configuration.set_datacenter(datacenter)
|
115
|
-
iaas_configuration.set_datastores(datastores)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def configure_vcloud(vcd_url:, organization:, user:, password:, datacenter:, storage_profile:)
|
120
|
-
iaas_configuration.configure_iaas do
|
121
|
-
iaas_configuration.set_vcloud_credentials(vcd_url: vcd_url, organization: organization, user: user, password: password)
|
122
|
-
iaas_configuration.set_datacenter(datacenter)
|
123
|
-
iaas_configuration.set_storage_profile(storage_profile)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def iaas_configuration
|
128
|
-
@iaas_configuration ||= Version13::IaasConfiguration.new(browser: browser, product: product)
|
129
|
-
end
|
130
|
-
|
131
|
-
def availability_zones
|
132
|
-
@availability_zones ||= Version13::AvailabilityZones.new(browser: browser, product: product)
|
133
|
-
end
|
134
|
-
|
135
|
-
def networks
|
136
|
-
@networks ||= Version13::Networks.new(browser: browser, product: product)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class WebUi
|
4
|
-
class ProductAvailabilityZones
|
5
|
-
def initialize(browser:, product:)
|
6
|
-
@browser = browser
|
7
|
-
@product = product
|
8
|
-
end
|
9
|
-
|
10
|
-
def assign_availability_zones(singleton_availability_zone:, availability_zones:)
|
11
|
-
open_form
|
12
|
-
browser.choose(singleton_availability_zone)
|
13
|
-
# we don't change the assignments in clean install yet,
|
14
|
-
# otherwise we'd want to clear them out first
|
15
|
-
availability_zones.each do |az_name|
|
16
|
-
browser.check(az_name)
|
17
|
-
end
|
18
|
-
save_form
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
attr_reader :browser, :product
|
23
|
-
|
24
|
-
def open_form
|
25
|
-
browser.visit '/'
|
26
|
-
browser.click_on "show-#{product}-configure-action"
|
27
|
-
browser.click_on "show-#{product}-job-availability-zone-assignment-action"
|
28
|
-
end
|
29
|
-
|
30
|
-
def save_form
|
31
|
-
browser.click_on 'Save'
|
32
|
-
|
33
|
-
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,157 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class ProductDashboard
|
4
|
-
def initialize(browser:)
|
5
|
-
@browser = browser
|
6
|
-
@allowed_ignorable_errors = []
|
7
|
-
end
|
8
|
-
|
9
|
-
def apply_updates
|
10
|
-
open_dashboard
|
11
|
-
browser.click_on 'install-action'
|
12
|
-
fail 'Install failed verification' if nonignorable_verification_failed?
|
13
|
-
allow_cpu_verification_errors
|
14
|
-
allow_privilege_verification_errors
|
15
|
-
|
16
|
-
ignore_allowable_errors
|
17
|
-
assert_installation_started
|
18
|
-
end
|
19
|
-
|
20
|
-
def import_installation_file(file_path)
|
21
|
-
open_dashboard
|
22
|
-
browser.click_on 'toggle-installation-dropdown-action'
|
23
|
-
browser.click_on 'show-import-backup'
|
24
|
-
browser.attach_file 'import[file]', file_path
|
25
|
-
browser.click_on 'import-backup'
|
26
|
-
end
|
27
|
-
|
28
|
-
def upgrade_microbosh
|
29
|
-
open_dashboard
|
30
|
-
browser.find('p', text: 'Ops Manager Director').trigger(:mouseover)
|
31
|
-
browser.click_on 'upgrade-microbosh'
|
32
|
-
end
|
33
|
-
|
34
|
-
def delete_product(product_name)
|
35
|
-
open_dashboard
|
36
|
-
browser.click_on "open-delete-#{product_name}-modal"
|
37
|
-
wait_for_modal_css_transition_to_complete
|
38
|
-
browser.click_on "delete-#{product_name}-action"
|
39
|
-
end
|
40
|
-
|
41
|
-
def import_product_from(full_path)
|
42
|
-
open_dashboard
|
43
|
-
browser.attach_file('component_add[file]', full_path, {visible: false})
|
44
|
-
end
|
45
|
-
|
46
|
-
def product_available?(product_name, product_version)
|
47
|
-
open_dashboard
|
48
|
-
browser.all("li.#{product_name} input#component_version[value='#{product_version}']", {visible: false}).any?
|
49
|
-
end
|
50
|
-
|
51
|
-
def upgrade_product(product_name)
|
52
|
-
open_dashboard
|
53
|
-
browser.find(".product.#{product_name} p").trigger(:mouseover)
|
54
|
-
browser.click_on "upgrade-#{product_name}"
|
55
|
-
expect_no_flash_errors
|
56
|
-
end
|
57
|
-
|
58
|
-
def version_for_product(product_name)
|
59
|
-
open_dashboard
|
60
|
-
browser.find("#show-#{product_name}-configure-action .version").text
|
61
|
-
end
|
62
|
-
|
63
|
-
def delete_whole_installation
|
64
|
-
open_dashboard
|
65
|
-
browser.click_on 'toggle-installation-dropdown-action'
|
66
|
-
browser.click_on 'show-delete-installation-modal-action'
|
67
|
-
wait_for_modal_css_transition_to_complete
|
68
|
-
browser.click_on 'delete-installation-action'
|
69
|
-
end
|
70
|
-
|
71
|
-
def delete_installation_available?
|
72
|
-
open_dashboard
|
73
|
-
browser.click_on 'toggle-installation-dropdown-action'
|
74
|
-
browser.all('#show-delete-installation-modal-action').any?
|
75
|
-
end
|
76
|
-
|
77
|
-
def deletion_in_progress?
|
78
|
-
open_dashboard
|
79
|
-
browser.all('#delete-in-progress-marker').any?
|
80
|
-
end
|
81
|
-
|
82
|
-
def reset_state
|
83
|
-
revert_pending_changes if revert_available?
|
84
|
-
delete_whole_installation if delete_installation_available?
|
85
|
-
end
|
86
|
-
|
87
|
-
def revert_pending_changes
|
88
|
-
open_dashboard
|
89
|
-
browser.click_on 'open-revert-installation-modal-action'
|
90
|
-
wait_for_modal_css_transition_to_complete
|
91
|
-
browser.click_on 'revert-installation-action'
|
92
|
-
end
|
93
|
-
|
94
|
-
def revert_available?
|
95
|
-
browser.all('#open-revert-installation-modal-action').any?
|
96
|
-
end
|
97
|
-
|
98
|
-
private
|
99
|
-
|
100
|
-
attr_reader :browser
|
101
|
-
|
102
|
-
def assert_installation_started
|
103
|
-
browser.expect(browser.page).to browser.have_text('Installation in Progress')
|
104
|
-
end
|
105
|
-
|
106
|
-
def nonignorable_verification_failed?
|
107
|
-
browser.all('.flash-message.error').any? && browser.all('#ignore-install-action').empty?
|
108
|
-
end
|
109
|
-
|
110
|
-
def allow_cpu_verification_errors
|
111
|
-
cpu_verification_regex = /Installation requires \d+ CPU cores/
|
112
|
-
return if @allowed_ignorable_errors.include?(cpu_verification_regex)
|
113
|
-
|
114
|
-
@allowed_ignorable_errors << cpu_verification_regex
|
115
|
-
end
|
116
|
-
|
117
|
-
def allow_privilege_verification_errors
|
118
|
-
priveleges_regex = /privileges are required/i
|
119
|
-
return if @allowed_ignorable_errors.include?(priveleges_regex)
|
120
|
-
|
121
|
-
@allowed_ignorable_errors << priveleges_regex
|
122
|
-
end
|
123
|
-
|
124
|
-
def ignore_allowable_errors
|
125
|
-
flash_errors = browser.all('.flash-message.error')
|
126
|
-
|
127
|
-
if flash_errors.any?
|
128
|
-
unexpected_errors = flash_errors.reject do |error|
|
129
|
-
@allowed_ignorable_errors.select do |expected_error|
|
130
|
-
error.text =~ expected_error
|
131
|
-
end.any?
|
132
|
-
end
|
133
|
-
|
134
|
-
if unexpected_errors.empty?
|
135
|
-
browser.click_on 'ignore-install-action'
|
136
|
-
else
|
137
|
-
fail "Unexepcted ignorable errors: #{unexpected_errors.map(&:text).inspect}"
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def expect_no_flash_errors
|
143
|
-
if (flash_error = browser.all('.flash-message.error').first)
|
144
|
-
fail flash_error.text
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def wait_for_modal_css_transition_to_complete
|
149
|
-
sleep 5 # Have to wait for the CSS shade effect
|
150
|
-
end
|
151
|
-
|
152
|
-
def open_dashboard
|
153
|
-
browser.visit '/'
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
|
-
module OpsManagerUiDrivers
|
4
|
-
module Version13
|
5
|
-
class ProductLogs
|
6
|
-
def initialize(browser:, product_name:)
|
7
|
-
@browser = browser
|
8
|
-
@product_name = product_name
|
9
|
-
end
|
10
|
-
|
11
|
-
def request_job_logs(job_name)
|
12
|
-
visit_product_status_page
|
13
|
-
browser.find(%Q(a[id^="download-#{job_name}-"][id$="-0-log-action"])).click
|
14
|
-
end
|
15
|
-
|
16
|
-
def most_recent_log_creation_time
|
17
|
-
visit_product_logs_page
|
18
|
-
|
19
|
-
most_recent_logs_timestamp
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
attr_reader :product_name, :browser
|
25
|
-
|
26
|
-
def visit_product_configure_page
|
27
|
-
browser.visit('/')
|
28
|
-
browser.click_on("show-#{product_name}-configure-action")
|
29
|
-
end
|
30
|
-
|
31
|
-
def visit_product_status_page
|
32
|
-
visit_product_configure_page
|
33
|
-
browser.click_on('show-status-action')
|
34
|
-
end
|
35
|
-
|
36
|
-
def visit_product_logs_page
|
37
|
-
visit_product_configure_page
|
38
|
-
browser.click_on('show-logs-action')
|
39
|
-
end
|
40
|
-
|
41
|
-
def most_recent_logs
|
42
|
-
browser.all('#downloaded_logs tr').select { |e| e.find(%Q(a[href^="/products/#{product_name}"])) }.last
|
43
|
-
end
|
44
|
-
|
45
|
-
def most_recent_logs_timestamp
|
46
|
-
return unless (log_row = most_recent_logs)
|
47
|
-
|
48
|
-
date_string = log_row.all('td').last.text
|
49
|
-
DateTime.parse(date_string)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class ProductResourceConfiguration
|
4
|
-
attr_reader :product_name
|
5
|
-
|
6
|
-
def initialize(browser:, product_name:)
|
7
|
-
@browser = browser
|
8
|
-
@product_name = product_name
|
9
|
-
end
|
10
|
-
|
11
|
-
def set_instances_for_job(job_name, instance_count)
|
12
|
-
open_form
|
13
|
-
browser.find_field("product_resources_form[#{job_name}][instances][value]").set(instance_count)
|
14
|
-
save_form
|
15
|
-
end
|
16
|
-
|
17
|
-
def set_elb_for_job(job_name, elb_name)
|
18
|
-
open_form
|
19
|
-
browser.find_field("product_resources_form[#{job_name}][elb_name]").set(elb_name)
|
20
|
-
save_form
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
attr_reader :browser
|
26
|
-
|
27
|
-
def open_form
|
28
|
-
browser.visit '/'
|
29
|
-
browser.click_on "show-#{product_name}-configure-action"
|
30
|
-
browser.click_on "show-#{product_name}-resource-sizes-action"
|
31
|
-
end
|
32
|
-
|
33
|
-
def save_form
|
34
|
-
browser.click_on 'Save'
|
35
|
-
|
36
|
-
unless browser.has_css?('.flash-message.success')
|
37
|
-
if browser.has_css?('.flash-message.error')
|
38
|
-
raise browser.find('.flash-message.error').text
|
39
|
-
else
|
40
|
-
raise 'unexpected failure'
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class ProductStatusHelper
|
4
|
-
def initialize(product_name:, browser:)
|
5
|
-
@product_name = product_name
|
6
|
-
@browser = browser
|
7
|
-
end
|
8
|
-
|
9
|
-
def job_status(job_name)
|
10
|
-
open_page
|
11
|
-
|
12
|
-
wait_for_loading_indicator_to_disappear
|
13
|
-
|
14
|
-
browser.within "##{product_name}-status" do
|
15
|
-
job_row = browser.find(:xpath, ".//tr[@data-ip-name = '#{job_name}']")
|
16
|
-
|
17
|
-
Version13::JobStatusHelper.from_job_row(job_row)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def job_status_in_az(job_name, az_guid)
|
22
|
-
open_page
|
23
|
-
|
24
|
-
wait_for_loading_indicator_to_disappear
|
25
|
-
|
26
|
-
browser.within "##{product_name}-#{az_guid}-status-table" do
|
27
|
-
job_row = browser.find(:xpath, ".//tr[@data-ip-name = '#{job_name}']")
|
28
|
-
|
29
|
-
Version13::JobStatusHelper.from_job_row(job_row)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def resource_pool_for_job_in_az(job_name, az_guid, vsphere_connection)
|
34
|
-
job_status = job_status_in_az("#{job_name}-partition-#{az_guid}", az_guid)
|
35
|
-
|
36
|
-
job_ip = job_status.ips.fetch(0)
|
37
|
-
|
38
|
-
vm = vsphere_connection.searchIndex.FindByIp(ip: job_ip, vmSearch: true)
|
39
|
-
vm.resourcePool.name
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
attr_reader :browser, :product_name
|
45
|
-
|
46
|
-
def open_page
|
47
|
-
browser.visit '/'
|
48
|
-
|
49
|
-
browser.click_on "show-#{dasherized_product_name}-configure-action"
|
50
|
-
browser.click_on 'show-status-action'
|
51
|
-
end
|
52
|
-
|
53
|
-
def wait_for_loading_indicator_to_disappear
|
54
|
-
Capybara.using_wait_time 10 do
|
55
|
-
browser.all('.status-loading', count: 0) # blocks until there are no spinners
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def dasherized_product_name
|
60
|
-
product_name.to_s.gsub(/[_]/, '-')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module OpsManagerUiDrivers
|
2
|
-
module Version13
|
3
|
-
class Setup
|
4
|
-
def initialize(browser: nil)
|
5
|
-
@browser = browser
|
6
|
-
end
|
7
|
-
|
8
|
-
def setup_and_login(user:, password:)
|
9
|
-
browser.visit '/setup'
|
10
|
-
browser.fill_in 'user[user_name]', with: user
|
11
|
-
browser.fill_in 'user[password]', with: password
|
12
|
-
browser.fill_in 'user[password_confirmation]', with: password
|
13
|
-
browser.check 'user_eula_accepted'
|
14
|
-
browser.click_on 'create-user-action'
|
15
|
-
end
|
16
|
-
|
17
|
-
def login(user: nil, password: nil)
|
18
|
-
browser.visit '/login'
|
19
|
-
browser.fill_in 'login[user_name]', with: user
|
20
|
-
browser.fill_in 'login[password]', with: password
|
21
|
-
browser.click_on 'login-action'
|
22
|
-
end
|
23
|
-
|
24
|
-
def setup_or_login(user:, password:)
|
25
|
-
browser.visit '/'
|
26
|
-
|
27
|
-
if browser.current_path == '/setup'
|
28
|
-
setup_and_login(user: user, password: password)
|
29
|
-
elsif browser.current_path == '/login'
|
30
|
-
login(user: user, password: password)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
attr_reader :browser
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,106 +0,0 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
require 'date'
|
3
|
-
|
4
|
-
module OpsManagerUiDrivers
|
5
|
-
module Version13
|
6
|
-
class WebUi
|
7
|
-
def initialize(browser: nil)
|
8
|
-
@browser = browser
|
9
|
-
end
|
10
|
-
|
11
|
-
def setup_page
|
12
|
-
@setup_page ||= Version13::Setup.new(browser: browser)
|
13
|
-
end
|
14
|
-
|
15
|
-
def product_dashboard
|
16
|
-
@product_dashboard ||= Version13::ProductDashboard.new(browser: browser)
|
17
|
-
end
|
18
|
-
|
19
|
-
def install_progress
|
20
|
-
@install_progress ||= Version13::InstallProgress.new(browser: browser)
|
21
|
-
end
|
22
|
-
|
23
|
-
def available_products
|
24
|
-
@available_products ||= Version13::AvailableProducts.new(browser: browser)
|
25
|
-
end
|
26
|
-
|
27
|
-
def product_logs_for(product_name)
|
28
|
-
Version13::ProductLogs.new(browser: browser, product_name: product_name)
|
29
|
-
end
|
30
|
-
|
31
|
-
def current_time
|
32
|
-
uri = URI(Capybara.app_host)
|
33
|
-
uri.path = '/'
|
34
|
-
Net::HTTP.start(uri.hostname, uri.port, use_ssl: (uri.scheme == 'https'), verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
|
35
|
-
response = http.request(Net::HTTP::Get.new(uri))
|
36
|
-
DateTime.parse(response['Date'])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def product_status_for(product_name)
|
41
|
-
Version13::ProductStatusHelper.new(
|
42
|
-
product_name: product_name,
|
43
|
-
browser: browser,
|
44
|
-
)
|
45
|
-
end
|
46
|
-
|
47
|
-
def job_network_mapping_for(product_name)
|
48
|
-
Version13::JobNetworkMappingHelper.new(
|
49
|
-
product_name: product_name,
|
50
|
-
browser: browser,
|
51
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
def assign_availability_zones_for_product(product:, zones:)
|
55
|
-
if zones
|
56
|
-
Version13::JobAvailabilityZoneMappingHelper.new(
|
57
|
-
product_name: product,
|
58
|
-
browser: browser,
|
59
|
-
).assign_availability_zones!(
|
60
|
-
singleton_availability_zone: zones[0]['name'],
|
61
|
-
availability_zones: zones.map { |z| z['name'] },
|
62
|
-
)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def ops_manager_director
|
67
|
-
@ops_manager_director ||= Version13::OpsManagerDirector.new(browser: browser)
|
68
|
-
end
|
69
|
-
|
70
|
-
def product_availability_zones(product)
|
71
|
-
@product_availability_zones ||= Version13::ProductAvailabilityZones.new(browser: browser, product: product)
|
72
|
-
end
|
73
|
-
|
74
|
-
def flash_message
|
75
|
-
browser.find('.flash-message').text
|
76
|
-
end
|
77
|
-
|
78
|
-
def availability_zone_guid_for_name(az_name)
|
79
|
-
browser.visit '/'
|
80
|
-
browser.click_on 'show-microbosh-configure-action'
|
81
|
-
browser.click_on 'show-director-availability-zone-assignment-action'
|
82
|
-
|
83
|
-
availability_zone_options = browser.find_field('Singleton Availability Zone').all('option')
|
84
|
-
availability_zone_options.each do |element|
|
85
|
-
if element.text == az_name
|
86
|
-
return element[:value]
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def product_resources_configuration(product_name)
|
92
|
-
Version13::ProductResourceConfiguration.new(browser: browser, product_name: product_name)
|
93
|
-
end
|
94
|
-
|
95
|
-
private
|
96
|
-
|
97
|
-
attr_reader :browser
|
98
|
-
|
99
|
-
def guid
|
100
|
-
# jenkins gives us the job name in an environment variable, otherwise use the hostname
|
101
|
-
job_name = ENV['JOB_NAME'] || `hostname`.chomp.split(/\./).first
|
102
|
-
job_name.gsub(/[^[:alnum:]]+/, '_')
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|