ops_manager_ui_drivers 0.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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE +13 -0
- data/README.md +39 -0
- data/Rakefile +12 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/ci/run_specs.sh +11 -0
- data/lib/ops_manager_ui_drivers.rb +10 -0
- data/lib/ops_manager_ui_drivers/page_helpers.rb +52 -0
- data/lib/ops_manager_ui_drivers/version.rb +3 -0
- data/lib/ops_manager_ui_drivers/version11/api_1_1.rb +40 -0
- data/lib/ops_manager_ui_drivers/version11/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version11/install_progress.rb +24 -0
- data/lib/ops_manager_ui_drivers/version11/login.rb +24 -0
- data/lib/ops_manager_ui_drivers/version11/network_configuration.rb +31 -0
- data/lib/ops_manager_ui_drivers/version11/ntp_servers.rb +28 -0
- data/lib/ops_manager_ui_drivers/version11/ops_manager_director.rb +27 -0
- data/lib/ops_manager_ui_drivers/version11/product_dashboard.rb +73 -0
- data/lib/ops_manager_ui_drivers/version11/vcenter_credentials.rb +31 -0
- data/lib/ops_manager_ui_drivers/version11/vsphere_configuration.rb +31 -0
- data/lib/ops_manager_ui_drivers/version11/web_ui.rb +34 -0
- data/lib/ops_manager_ui_drivers/version12/api_1_2.rb +40 -0
- data/lib/ops_manager_ui_drivers/version12/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version12/install_progress.rb +24 -0
- data/lib/ops_manager_ui_drivers/version12/login.rb +24 -0
- data/lib/ops_manager_ui_drivers/version12/network_configuration.rb +32 -0
- data/lib/ops_manager_ui_drivers/version12/ntp_servers.rb +28 -0
- data/lib/ops_manager_ui_drivers/version12/ops_manager_director.rb +27 -0
- data/lib/ops_manager_ui_drivers/version12/product_dashboard.rb +73 -0
- data/lib/ops_manager_ui_drivers/version12/vcenter_credentials.rb +31 -0
- data/lib/ops_manager_ui_drivers/version12/vsphere_configuration.rb +30 -0
- data/lib/ops_manager_ui_drivers/version12/web_ui.rb +34 -0
- data/lib/ops_manager_ui_drivers/version13/api_1_3.rb +40 -0
- data/lib/ops_manager_ui_drivers/version13/availability_zones.rb +55 -0
- data/lib/ops_manager_ui_drivers/version13/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version13/iaas_configuration.rb +65 -0
- data/lib/ops_manager_ui_drivers/version13/install_progress.rb +43 -0
- data/lib/ops_manager_ui_drivers/version13/job_availability_zone_mapping_helper.rb +70 -0
- data/lib/ops_manager_ui_drivers/version13/job_network_mapping_helper.rb +47 -0
- data/lib/ops_manager_ui_drivers/version13/job_status_helper.rb +17 -0
- data/lib/ops_manager_ui_drivers/version13/networks.rb +83 -0
- data/lib/ops_manager_ui_drivers/version13/ops_manager_director.rb +140 -0
- data/lib/ops_manager_ui_drivers/version13/product_availability_zones.rb +38 -0
- data/lib/ops_manager_ui_drivers/version13/product_dashboard.rb +157 -0
- data/lib/ops_manager_ui_drivers/version13/product_logs.rb +53 -0
- data/lib/ops_manager_ui_drivers/version13/product_resource_configuration.rb +46 -0
- data/lib/ops_manager_ui_drivers/version13/product_status_helper.rb +64 -0
- data/lib/ops_manager_ui_drivers/version13/setup.rb +40 -0
- data/lib/ops_manager_ui_drivers/version13/web_ui.rb +106 -0
- data/lib/ops_manager_ui_drivers/version14/api_1_4.rb +40 -0
- data/lib/ops_manager_ui_drivers/version14/availability_zones.rb +59 -0
- data/lib/ops_manager_ui_drivers/version14/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version14/iaas_configuration.rb +89 -0
- data/lib/ops_manager_ui_drivers/version14/job_availability_zone_mapping_helper.rb +70 -0
- data/lib/ops_manager_ui_drivers/version14/job_network_mapping_helper.rb +47 -0
- data/lib/ops_manager_ui_drivers/version14/job_status_helper.rb +17 -0
- data/lib/ops_manager_ui_drivers/version14/networks.rb +58 -0
- data/lib/ops_manager_ui_drivers/version14/ops_manager_director.rb +252 -0
- data/lib/ops_manager_ui_drivers/version14/product_availability_zones.rb +38 -0
- data/lib/ops_manager_ui_drivers/version14/product_configuration.rb +34 -0
- data/lib/ops_manager_ui_drivers/version14/product_dashboard.rb +175 -0
- data/lib/ops_manager_ui_drivers/version14/product_form.rb +47 -0
- data/lib/ops_manager_ui_drivers/version14/product_logs.rb +38 -0
- data/lib/ops_manager_ui_drivers/version14/product_resource_configuration.rb +46 -0
- data/lib/ops_manager_ui_drivers/version14/product_status_helper.rb +64 -0
- data/lib/ops_manager_ui_drivers/version14/setup.rb +40 -0
- data/lib/ops_manager_ui_drivers/version14/state_change_progress.rb +43 -0
- data/lib/ops_manager_ui_drivers/version14/web_ui.rb +104 -0
- data/lib/ops_manager_ui_drivers/version15/availability_zones.rb +59 -0
- data/lib/ops_manager_ui_drivers/version15/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version15/iaas_configuration.rb +105 -0
- data/lib/ops_manager_ui_drivers/version15/job_availability_zone_mapping_helper.rb +70 -0
- data/lib/ops_manager_ui_drivers/version15/job_network_mapping_helper.rb +47 -0
- data/lib/ops_manager_ui_drivers/version15/job_status_helper.rb +17 -0
- data/lib/ops_manager_ui_drivers/version15/networks.rb +55 -0
- data/lib/ops_manager_ui_drivers/version15/ops_manager_director.rb +261 -0
- data/lib/ops_manager_ui_drivers/version15/product_availability_zones.rb +38 -0
- data/lib/ops_manager_ui_drivers/version15/product_configuration.rb +34 -0
- data/lib/ops_manager_ui_drivers/version15/product_dashboard.rb +176 -0
- data/lib/ops_manager_ui_drivers/version15/product_form.rb +47 -0
- data/lib/ops_manager_ui_drivers/version15/product_logs.rb +38 -0
- data/lib/ops_manager_ui_drivers/version15/product_resource_configuration.rb +63 -0
- data/lib/ops_manager_ui_drivers/version15/product_status_helper.rb +64 -0
- data/lib/ops_manager_ui_drivers/version15/setup.rb +44 -0
- data/lib/ops_manager_ui_drivers/version15/state_change_progress.rb +43 -0
- data/lib/ops_manager_ui_drivers/version15/web_ui.rb +104 -0
- data/lib/ops_manager_ui_drivers/wait_helper.rb +51 -0
- data/ops_manager_ui_drivers.gemspec +29 -0
- metadata +233 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
3
|
+
class ProductForm
|
|
4
|
+
def initialize(browser:, product_name:, form_name:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
@product_name = product_name
|
|
7
|
+
@form_name = form_name
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def property(property_reference)
|
|
11
|
+
browser.find_field("#{form_name}[#{property_reference}]")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def nested_property(property_reference, nested_reference)
|
|
15
|
+
browser.find_field("#{form_name}[#{property_reference}][#{nested_reference}]")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def generate_self_signed_cert(wildcard_domain)
|
|
19
|
+
browser.click_on 'Generate Self-Signed RSA Certificate'
|
|
20
|
+
browser.within '#rsa-certificate-form' do
|
|
21
|
+
browser.fill_in 'rsa_certificate[domains]', with: wildcard_domain
|
|
22
|
+
browser.click_on 'save-rsa-certificate-action'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def save_form(validate: true)
|
|
27
|
+
browser.click_on 'Save'
|
|
28
|
+
|
|
29
|
+
fail('unexpected failure') unless browser.has_css?('.flash-message')
|
|
30
|
+
|
|
31
|
+
if validate
|
|
32
|
+
fail(browser.find('.flash-message.error').text) unless browser.has_css?('.flash-message.success')
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def open_form
|
|
37
|
+
browser.visit '/'
|
|
38
|
+
browser.click_on "show-#{product_name}-configure-action"
|
|
39
|
+
browser.click_on "show-#{form_name}-action"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
attr_reader :browser, :product_name, :form_name
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
|
|
3
|
+
module OpsManagerUiDrivers
|
|
4
|
+
module Version14
|
|
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
|
+
browser.visit('/')
|
|
13
|
+
browser.click_on("show-#{product_name}-configure-action")
|
|
14
|
+
browser.click_on('show-status-action')
|
|
15
|
+
browser.find(%Q(a[id^="download-#{job_name}-"][id$="-0-log-action"])).click
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def most_recent_log_creation_time
|
|
19
|
+
browser.visit('/')
|
|
20
|
+
browser.click_on("show-#{product_name}-configure-action")
|
|
21
|
+
browser.click_on('show-logs-action')
|
|
22
|
+
|
|
23
|
+
log_row = browser.all('#downloaded_logs tr').
|
|
24
|
+
select { |e| e.find(%Q(a[href^="/products/#{product_name}"])) }.
|
|
25
|
+
last
|
|
26
|
+
|
|
27
|
+
return unless log_row
|
|
28
|
+
|
|
29
|
+
date_string = log_row.all('td').last.text
|
|
30
|
+
DateTime.parse(date_string)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
attr_reader :product_name, :browser
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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
|
+
Version14::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
|
+
Version14::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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
3
|
+
class StateChangeProgress
|
|
4
|
+
def initialize(browser:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def state_change_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 =~ %r(^/+install)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
attr_reader :browser
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
require 'net/https'
|
|
2
|
+
require 'date'
|
|
3
|
+
|
|
4
|
+
module OpsManagerUiDrivers
|
|
5
|
+
module Version14
|
|
6
|
+
class WebUi
|
|
7
|
+
def initialize(browser: nil)
|
|
8
|
+
@browser = browser
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def setup_page
|
|
12
|
+
Version14::Setup.new(browser: browser)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def product_dashboard
|
|
16
|
+
Version14::ProductDashboard.new(browser: browser)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def state_change_progress
|
|
20
|
+
Version14::StateChangeProgress.new(browser: browser)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def available_products
|
|
24
|
+
Version14::AvailableProducts.new(browser: browser)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def ops_manager_director
|
|
28
|
+
Version14::OpsManagerDirector.new(browser: browser)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def product_logs_for(product_name)
|
|
32
|
+
Version14::ProductLogs.new(browser: browser, product_name: product_name)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def product_resources_configuration(product_name)
|
|
36
|
+
Version14::ProductResourceConfiguration.new(browser: browser, product_name: product_name)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def product(product_name)
|
|
40
|
+
Version14::ProductConfiguration.new(browser: browser, product_name: product_name)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def product_status_for(product_name)
|
|
44
|
+
Version14::ProductStatusHelper.new(browser: browser, product_name: product_name)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def job_network_mapping_for(product_name)
|
|
48
|
+
Version14::JobNetworkMappingHelper.new(browser: browser, product_name: product_name)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def product_availability_zones(product)
|
|
52
|
+
Version14::ProductAvailabilityZones.new(browser: browser, product: product)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def assign_availability_zones_for_product(product:, zones:)
|
|
56
|
+
if zones
|
|
57
|
+
Version14::JobAvailabilityZoneMappingHelper.new(
|
|
58
|
+
browser: browser,
|
|
59
|
+
product_name: product,
|
|
60
|
+
).assign_availability_zones!(
|
|
61
|
+
singleton_availability_zone: zones[0]['name'],
|
|
62
|
+
availability_zones: zones.map { |z| z['name'] },
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def current_time
|
|
68
|
+
uri = URI(Capybara.app_host)
|
|
69
|
+
uri.path = '/'
|
|
70
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: (uri.scheme == 'https'), verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
|
|
71
|
+
response = http.request(Net::HTTP::Get.new(uri))
|
|
72
|
+
DateTime.parse(response['Date'])
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def flash_message
|
|
77
|
+
browser.find('.flash-message').text
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def availability_zone_guid_for_name(az_name)
|
|
81
|
+
browser.visit '/'
|
|
82
|
+
browser.click_on 'show-microbosh-configure-action'
|
|
83
|
+
browser.click_on 'show-director-availability-zone-assignment-action'
|
|
84
|
+
|
|
85
|
+
availability_zone_options = browser.find_field('Singleton Availability Zone').all('option')
|
|
86
|
+
availability_zone_options.each do |element|
|
|
87
|
+
if element.text == az_name
|
|
88
|
+
return element[:value]
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
attr_reader :browser
|
|
96
|
+
|
|
97
|
+
def guid
|
|
98
|
+
# jenkins gives us the job name in an environment variable, otherwise use the hostname
|
|
99
|
+
job_name = ENV['JOB_NAME'] || `hostname`.chomp.split(/\./).first
|
|
100
|
+
job_name.gsub(/[^[:alnum:]]+/, '_')
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
3
|
+
class AvailabilityZones
|
|
4
|
+
def initialize(browser:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def add_aws_az(iaas_identifier)
|
|
9
|
+
open_form('availability_zones')
|
|
10
|
+
|
|
11
|
+
set_fields(fields: {'iaas_identifier' => iaas_identifier})
|
|
12
|
+
save_form
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add_az(name, cluster, resource_pool)
|
|
16
|
+
open_form('availability_zones')
|
|
17
|
+
|
|
18
|
+
browser.click_on 'Add'
|
|
19
|
+
set_fields(
|
|
20
|
+
fields: {
|
|
21
|
+
'name' => name,
|
|
22
|
+
'cluster' => cluster,
|
|
23
|
+
'resource_pool' => resource_pool,
|
|
24
|
+
}
|
|
25
|
+
)
|
|
26
|
+
save_form
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
attr_reader :browser
|
|
32
|
+
|
|
33
|
+
def save_form
|
|
34
|
+
browser.click_on 'Save'
|
|
35
|
+
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def open_form(form)
|
|
39
|
+
browser.visit '/'
|
|
40
|
+
browser.click_on 'show-microbosh-configure-action'
|
|
41
|
+
browser.click_on "show-#{form}-action"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def set_fields(fields:)
|
|
45
|
+
fields.each do |field, value|
|
|
46
|
+
set_field(field, value)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def set_field(field, value)
|
|
51
|
+
last_field(field).set(value)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def last_field(field)
|
|
55
|
+
browser.all(:field, "availability_zones[availability_zones][][#{field}]").last
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|