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,38 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
3
|
+
class WebUi
|
|
4
|
+
class ProductAvailabilityZones
|
|
5
|
+
def initialize(browser:, product_name:)
|
|
6
|
+
@browser = browser
|
|
7
|
+
@product_name = product_name
|
|
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_name
|
|
23
|
+
|
|
24
|
+
def open_form
|
|
25
|
+
browser.visit '/'
|
|
26
|
+
browser.click_on "show-#{product_name}-configure-action"
|
|
27
|
+
browser.click_on "show-#{product_name}-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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
3
|
+
class ProductConfiguration
|
|
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 upload_stemcell(stemcell_file_path)
|
|
12
|
+
visit_product_page
|
|
13
|
+
browser.click_on "show-#{product_name}-stemcell-assignment-action"
|
|
14
|
+
browser.attach_file('product_stemcell[file]', stemcell_file_path, {visible: false})
|
|
15
|
+
browser.wait {
|
|
16
|
+
browser.has_text?("Stemcell '#{File.basename(stemcell_file_path)}' has been uploaded successfully.")
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def product_form(form_name)
|
|
21
|
+
Version15::ProductForm.new(browser: browser, product_name: product_name, form_name: form_name)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :browser, :product_name
|
|
27
|
+
|
|
28
|
+
def visit_product_page
|
|
29
|
+
browser.visit '/'
|
|
30
|
+
browser.click_on "show-#{product_name}-configure-action"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
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
|
+
allow_icmp_verification_errors #this is only for AWS; consider moving out
|
|
16
|
+
|
|
17
|
+
ignore_allowable_errors
|
|
18
|
+
assert_installation_started
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def import_installation_file(file_path)
|
|
22
|
+
open_dashboard
|
|
23
|
+
browser.click_on 'toggle-installation-dropdown-action'
|
|
24
|
+
browser.click_on 'show-import-backup'
|
|
25
|
+
browser.attach_file 'import[file]', file_path
|
|
26
|
+
browser.click_on 'import-backup'
|
|
27
|
+
browser.wait { browser.has_text?('Successfully imported installation.') }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def upgrade_microbosh
|
|
31
|
+
open_dashboard
|
|
32
|
+
browser.find('p', text: 'Ops Manager Director').trigger(:mouseover)
|
|
33
|
+
browser.click_on 'upgrade-microbosh'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def delete_product(product_name)
|
|
37
|
+
open_dashboard
|
|
38
|
+
browser.click_on "open-delete-#{product_name}-modal"
|
|
39
|
+
wait_for_modal_css_transition_to_complete
|
|
40
|
+
browser.click_on "delete-#{product_name}-action"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def import_product_from(full_path)
|
|
44
|
+
open_dashboard
|
|
45
|
+
browser.attach_file('component_add[file]', full_path, {visible: false})
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def product_available?(product_name, product_version)
|
|
49
|
+
open_dashboard
|
|
50
|
+
browser.all("li.#{product_name} input#component_version[value='#{product_version}']", {visible: false}).any?
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def upgrade_product(product_name)
|
|
54
|
+
open_dashboard
|
|
55
|
+
browser.find(".product.#{product_name} p").trigger(:mouseover)
|
|
56
|
+
browser.click_on "upgrade-#{product_name}"
|
|
57
|
+
expect_no_flash_errors
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def version_for_product(product_name)
|
|
61
|
+
open_dashboard
|
|
62
|
+
browser.find("#show-#{product_name}-configure-action .version").text
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def delete_whole_installation
|
|
66
|
+
open_dashboard
|
|
67
|
+
browser.click_on 'toggle-installation-dropdown-action'
|
|
68
|
+
browser.click_on 'show-delete-installation-modal-action'
|
|
69
|
+
wait_for_modal_css_transition_to_complete
|
|
70
|
+
browser.click_on 'delete-installation-action'
|
|
71
|
+
apply_updates
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def wait_for_installation_to_be_deleted
|
|
75
|
+
browser.poll_up_to_mins(10) do
|
|
76
|
+
open_dashboard
|
|
77
|
+
assert_install_action_disabled
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def delete_installation_available?
|
|
82
|
+
open_dashboard
|
|
83
|
+
browser.click_on 'toggle-installation-dropdown-action'
|
|
84
|
+
browser.all('#show-delete-installation-modal-action').any?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def deletion_in_progress?
|
|
88
|
+
open_dashboard
|
|
89
|
+
browser.all('#delete-in-progress-marker').any?
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def reset_state(ops_manager)
|
|
93
|
+
revert_pending_changes if revert_available?
|
|
94
|
+
if delete_installation_available?
|
|
95
|
+
delete_whole_installation
|
|
96
|
+
browser.poll_up_to_mins(15) do
|
|
97
|
+
browser.expect(ops_manager.state_change_progress).to browser.be_state_change_success
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
attr_reader :browser
|
|
105
|
+
|
|
106
|
+
def assert_install_action_disabled
|
|
107
|
+
browser.expect(browser.page).to browser.have_css('#install-action.disabled')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def assert_installation_started
|
|
111
|
+
browser.expect(browser.page).to browser.have_text('Applying Changes')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def nonignorable_verification_failed?
|
|
115
|
+
browser.all('.flash-message.error').any? && browser.all('#ignore-install-action').empty?
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def allow_cpu_verification_errors
|
|
119
|
+
return if @allowed_ignorable_errors.include?(/Installation requires \d+ CPU cores/)
|
|
120
|
+
|
|
121
|
+
@allowed_ignorable_errors << /Installation requires \d+ CPU cores/
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def allow_privilege_verification_errors
|
|
125
|
+
return if @allowed_ignorable_errors.include?(/required privileges/i)
|
|
126
|
+
|
|
127
|
+
@allowed_ignorable_errors << /required privileges/i
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def allow_icmp_verification_errors
|
|
131
|
+
return if @allowed_ignorable_errors.include?(/ignorable if ICMP is disabled/i)
|
|
132
|
+
|
|
133
|
+
@allowed_ignorable_errors << /ignorable if ICMP is disabled/i
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def ignore_allowable_errors
|
|
137
|
+
flash_errors = browser.all('.flash-message.error')
|
|
138
|
+
|
|
139
|
+
if flash_errors.any?
|
|
140
|
+
unexpected_errors = flash_errors.reject do |error|
|
|
141
|
+
@allowed_ignorable_errors.select do |expected_error|
|
|
142
|
+
error.text =~ expected_error
|
|
143
|
+
end.any?
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
browser.click_on 'ignore-install-action' if unexpected_errors.empty?
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def expect_no_flash_errors
|
|
151
|
+
if (flash_error = browser.all('.flash-message.error').first)
|
|
152
|
+
fail flash_error.text
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def wait_for_modal_css_transition_to_complete
|
|
157
|
+
sleep 5 # Have to wait for the CSS shade effect
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def open_dashboard
|
|
161
|
+
browser.visit '/'
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def revert_pending_changes
|
|
165
|
+
open_dashboard
|
|
166
|
+
browser.click_on 'open-revert-installation-modal-action'
|
|
167
|
+
wait_for_modal_css_transition_to_complete
|
|
168
|
+
browser.click_on 'revert-installation-action'
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def revert_available?
|
|
172
|
+
browser.all('#open-revert-installation-modal-action').any?
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
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 Version15
|
|
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,63 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
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_instance_type_for_job(job_name, instance_type)
|
|
18
|
+
open_form
|
|
19
|
+
browser.
|
|
20
|
+
find("select[name='product_resources_form[#{job_name}][instance_type_id]']").
|
|
21
|
+
find("option[value='#{instance_type}']").
|
|
22
|
+
select_option
|
|
23
|
+
save_form
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def set_elb_name_for_job(job_name, elb_name)
|
|
27
|
+
open_form
|
|
28
|
+
browser.find_field("product_resources_form[#{job_name}][elb_name]").set(elb_name)
|
|
29
|
+
save_form
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def set_resources_for_jobs(resources_by_job, validate: true)
|
|
33
|
+
open_form
|
|
34
|
+
resources_by_job.each do |job, resources|
|
|
35
|
+
resources.each do |resource_or_instance, value|
|
|
36
|
+
browser.fill_in("product_resources_form[#{job}][#{resource_or_instance}][value]", with: value)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
save_form(validate: validate)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
attr_reader :browser
|
|
45
|
+
|
|
46
|
+
def open_form
|
|
47
|
+
browser.visit '/'
|
|
48
|
+
browser.click_on "show-#{product_name}-configure-action"
|
|
49
|
+
browser.click_on "show-#{product_name}-resource-sizes-action"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def save_form(validate: true)
|
|
53
|
+
browser.click_on 'Save'
|
|
54
|
+
|
|
55
|
+
fail('unexpected failure') unless browser.has_css?('.flash-message')
|
|
56
|
+
|
|
57
|
+
if validate
|
|
58
|
+
fail(browser.find('.flash-message.error').text) unless browser.has_css?('.flash-message.success')
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version15
|
|
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
|
+
Version15::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
|
+
Version15::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
|