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,40 @@
|
|
|
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
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'net/https'
|
|
2
|
+
|
|
3
|
+
module OpsManagerUiDrivers
|
|
4
|
+
module Version14
|
|
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 = 900
|
|
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
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
3
|
+
class AvailabilityZones
|
|
4
|
+
def initialize(browser:, product:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
@product = product
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def add_aws_az(iaas_identifier)
|
|
10
|
+
open_form('availability_zones')
|
|
11
|
+
|
|
12
|
+
set_fields(fields: {'iaas_identifier' => iaas_identifier})
|
|
13
|
+
save_form
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def add_az(name, cluster, resource_pool)
|
|
17
|
+
open_form('availability_zones')
|
|
18
|
+
|
|
19
|
+
browser.click_on 'Add'
|
|
20
|
+
set_fields(
|
|
21
|
+
fields: {
|
|
22
|
+
'name' => name,
|
|
23
|
+
'cluster' => cluster,
|
|
24
|
+
'resource_pool' => resource_pool,
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
save_form
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
attr_reader :browser, :product
|
|
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-#{product}-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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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
|
+
end
|
|
12
|
+
|
|
13
|
+
def product_added?(product_name)
|
|
14
|
+
browser.visit '/'
|
|
15
|
+
browser.all("#show-configure-#{product_name}-action").any?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
attr_reader :browser
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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
|
+
def set_aws_credentials(access_key_id:, secret_access_key:, vpc_id:, security_group:, key_pair_name:, ssh_private_key:)
|
|
31
|
+
set_field('access_key_id', access_key_id)
|
|
32
|
+
set_field('secret_access_key', secret_access_key)
|
|
33
|
+
set_field('vpc_id', vpc_id)
|
|
34
|
+
set_field('security_group', security_group)
|
|
35
|
+
set_field('key_pair_name', key_pair_name)
|
|
36
|
+
set_field('ssh_private_key', ssh_private_key)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def set_openstack_credentials(
|
|
40
|
+
identity_endpoint:,
|
|
41
|
+
username:,
|
|
42
|
+
password:,
|
|
43
|
+
tenant:,
|
|
44
|
+
security_group_name:,
|
|
45
|
+
key_pair_name:,
|
|
46
|
+
ssh_private_key:
|
|
47
|
+
)
|
|
48
|
+
set_field('identity_endpoint', identity_endpoint)
|
|
49
|
+
set_field('username', username)
|
|
50
|
+
set_field('password', password)
|
|
51
|
+
set_field('tenant', tenant)
|
|
52
|
+
set_field('security_group', security_group_name)
|
|
53
|
+
set_field('key_pair_name', key_pair_name)
|
|
54
|
+
set_field('ssh_private_key', ssh_private_key)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def set_datacenter(datacenter)
|
|
59
|
+
set_field('datacenter', datacenter)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def set_datastores(datastores)
|
|
63
|
+
set_field('datastores_string', datastores)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def set_storage_profile(storage_profile)
|
|
67
|
+
set_field('storage_profile', storage_profile)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
attr_reader :browser, :product
|
|
72
|
+
|
|
73
|
+
def save_form
|
|
74
|
+
browser.click_on 'Save'
|
|
75
|
+
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def open_form(form)
|
|
79
|
+
browser.visit '/'
|
|
80
|
+
browser.click_on "show-#{product}-configure-action"
|
|
81
|
+
browser.click_on "show-#{form}-action"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def set_field(field, value)
|
|
85
|
+
browser.find_field("iaas_configuration[#{field}]").set(value)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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}-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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version14
|
|
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}-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
|