ops_manager_ui_drivers 1.6.3 → 1.7.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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ops_manager_ui_drivers/page_helpers.rb +9 -1
  3. data/lib/ops_manager_ui_drivers/version.rb +1 -1
  4. data/lib/ops_manager_ui_drivers/version16/api_1_6.rb +42 -0
  5. data/lib/ops_manager_ui_drivers/version17/available_products.rb +25 -0
  6. data/lib/ops_manager_ui_drivers/version17/bosh_product_sections/advanced_infrastructure_config.rb +18 -0
  7. data/lib/ops_manager_ui_drivers/version17/bosh_product_sections/availability_zones.rb +29 -0
  8. data/lib/ops_manager_ui_drivers/version17/bosh_product_sections/bosh_product_form_section.rb +39 -0
  9. data/lib/ops_manager_ui_drivers/version17/bosh_product_sections/iaas_configuration.rb +17 -0
  10. data/lib/ops_manager_ui_drivers/version17/bosh_product_sections/networks.rb +51 -0
  11. data/lib/ops_manager_ui_drivers/version17/job_availability_zone_mapping_helper.rb +70 -0
  12. data/lib/ops_manager_ui_drivers/version17/job_network_mapping_helper.rb +47 -0
  13. data/lib/ops_manager_ui_drivers/version17/job_status_helper.rb +17 -0
  14. data/lib/ops_manager_ui_drivers/version17/ops_manager_director.rb +188 -0
  15. data/lib/ops_manager_ui_drivers/version17/product_availability_zones.rb +38 -0
  16. data/lib/ops_manager_ui_drivers/version17/product_configuration.rb +38 -0
  17. data/lib/ops_manager_ui_drivers/version17/product_dashboard.rb +191 -0
  18. data/lib/ops_manager_ui_drivers/version17/product_errands.rb +42 -0
  19. data/lib/ops_manager_ui_drivers/version17/product_form.rb +61 -0
  20. data/lib/ops_manager_ui_drivers/version17/product_logs.rb +38 -0
  21. data/lib/ops_manager_ui_drivers/version17/product_resource_configuration.rb +69 -0
  22. data/lib/ops_manager_ui_drivers/version17/product_status_helper.rb +64 -0
  23. data/lib/ops_manager_ui_drivers/version17/settings.rb +136 -0
  24. data/lib/ops_manager_ui_drivers/version17/setup.rb +44 -0
  25. data/lib/ops_manager_ui_drivers/version17/state_change_progress.rb +43 -0
  26. data/lib/ops_manager_ui_drivers/version17/web_ui.rb +110 -0
  27. metadata +25 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50ac2ad69a6d14f53cb0ee3970778aa5bf487554
4
- data.tar.gz: 27322d1f93a92e53a92cadc357da652b72e25046
3
+ metadata.gz: 7307813db2fc2143053f5ac3d555958b7b6f2e55
4
+ data.tar.gz: d59a42cb98fe60a70229ed3c710a0d75f8cb2680
5
5
  SHA512:
6
- metadata.gz: 5541f78d9f9ed2f7c99c9b0d6c9eeb51027eb68c19302fefdfbca77bbbed95cb72a90a79772ff2cc62241d63d037285e0886e6bfd443426b8d4b8545fea4804a
7
- data.tar.gz: faef704df96666119e23fb40f9fbec92860f2b8696e6240c465c009d6015061368eb1017a538f2827e4fb1961107eb9e71f2dbbce8711939f25b95b9a6507425
6
+ metadata.gz: e45b366266a54d41b64e5f5ac92fc021a485cbcc9d03998f322c5a39dd9d2bd89038c4814309c9f0e64fb0cfd31a5a59e37daad14972a5af1805e8beb776b8ae
7
+ data.tar.gz: 49d3cf915e247e998f04209d23c7569505b9f82a7487a72615dacbfc2f0fb30c7df345807e5eb86855fa1272b83717618de0ef8abba04579fa99a3c41d9482f7
@@ -12,10 +12,14 @@ module OpsManagerUiDrivers
12
12
  @om_1_5 ||= create_web_ui(ops_manager_url, Version15)
13
13
  end
14
14
 
15
- def om_rc(ops_manager_url)
15
+ def om_1_6(ops_manager_url)
16
16
  @om_1_6 ||= create_web_ui(ops_manager_url, Version16)
17
17
  end
18
18
 
19
+ def om_rc(ops_manager_url)
20
+ @om_1_7 ||= create_web_ui(ops_manager_url, Version17)
21
+ end
22
+
19
23
  def api_1_4(host:, username:, password:)
20
24
  Version14::Api.new(host: host, user: username, password: password)
21
25
  end
@@ -24,6 +28,10 @@ module OpsManagerUiDrivers
24
28
  Version15::Api.new(host: host, user: username, password: password)
25
29
  end
26
30
 
31
+ def api_1_6(host:, username:, password:)
32
+ Version16::Api.new(host: host, user: username, password: password)
33
+ end
34
+
27
35
  private
28
36
 
29
37
  def create_web_ui(ops_manager_url, version_module)
@@ -1,3 +1,3 @@
1
1
  module OpsManagerUiDrivers
2
- VERSION = '1.6.3'
2
+ VERSION = '1.7.0'
3
3
  end
@@ -0,0 +1,42 @@
1
+ require 'net/https'
2
+
3
+ module OpsManagerUiDrivers
4
+ module Version16
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
+ tmpfile = Tempfile.new('installation.zip')
14
+ http.request(get('installation_asset_collection')) do |response|
15
+ response.read_body do |chunk|
16
+ tmpfile.write(chunk)
17
+ end
18
+ end
19
+ tmpfile.close
20
+ tmpfile
21
+ end
22
+
23
+ private
24
+
25
+ def http
26
+ uri = URI(@host)
27
+ Net::HTTP.new(uri.host, uri.port).tap do |http|
28
+ http.use_ssl = true
29
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
30
+ http.read_timeout = 1800
31
+ end
32
+ end
33
+
34
+ def get(endpoint)
35
+ uri = URI("#{@host}/api/#{endpoint}")
36
+ Net::HTTP::Get.new(uri.request_uri).tap do |get|
37
+ get.basic_auth(@user, @password)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,25 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
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
@@ -0,0 +1,18 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
3
+ module BoshProductSections
4
+ class AdvancedInfrastructureConfig
5
+ def initialize(browser:)
6
+ @bosh_product_form_section = BoshProductFormSection.new(browser, 'advanced_infrastructure_config')
7
+ end
8
+
9
+ def fill_advanced_infrastructure_config_settings(fields)
10
+ return if fields.empty?
11
+ @bosh_product_form_section.open_form('advanced_infrastructure_config')
12
+ @bosh_product_form_section.set_fields(fields)
13
+ @bosh_product_form_section.save_form
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
3
+ module BoshProductSections
4
+ class AvailabilityZones
5
+ def initialize(browser:)
6
+ @browser = browser
7
+ @bosh_product_form_section = BoshProductFormSection.new(browser, 'availability_zones[availability_zones][]')
8
+ end
9
+
10
+ def add_single_az(iaas_identifier)
11
+ @bosh_product_form_section.open_form('availability_zones')
12
+ @bosh_product_form_section.set_fields('iaas_identifier' => iaas_identifier)
13
+ @bosh_product_form_section.save_form
14
+ end
15
+
16
+ def add_az(fields)
17
+ @bosh_product_form_section.open_form('availability_zones')
18
+ browser.click_on 'Add'
19
+ @bosh_product_form_section.set_fields(fields)
20
+ @bosh_product_form_section.save_form
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :browser
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
3
+ module BoshProductSections
4
+ class BoshProductFormSection
5
+ def initialize(browser, field_prefix)
6
+ @browser = browser
7
+ @field_prefix = field_prefix
8
+ end
9
+
10
+ def open_form(form_name)
11
+ @browser.visit '/'
12
+ @browser.click_on 'show-p-bosh-configure-action'
13
+ @browser.click_on "show-#{form_name}-action"
14
+ end
15
+
16
+ def save_form
17
+ @browser.click_on 'Save'
18
+ @browser.expect(@browser.page).to @browser.have_css('.flash-message.success')
19
+ end
20
+
21
+ def set_fields(fields)
22
+ fields.each do |field, value|
23
+ set_field(field, value)
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def set_field(field, value)
30
+ last_field(field).set(value)
31
+ end
32
+
33
+ def last_field(field)
34
+ @browser.all(:field, "#{@field_prefix}[#{field}]").last
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
3
+ module BoshProductSections
4
+ class IaasConfiguration
5
+ def initialize(browser:)
6
+ @bosh_product_form_section = BoshProductFormSection.new(browser, 'iaas_configuration')
7
+ end
8
+
9
+ def fill_iaas_settings(fields)
10
+ @bosh_product_form_section.open_form('iaas_configuration')
11
+ @bosh_product_form_section.set_fields(fields)
12
+ @bosh_product_form_section.save_form
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,51 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
3
+ module BoshProductSections
4
+ class Networks
5
+ def initialize(browser:)
6
+ @browser = browser
7
+ @bosh_product_form_section = BoshProductFormSection.new(browser, 'network[networks][]')
8
+ end
9
+
10
+ def add_single_network(name:, iaas_network_identifier:, subnet:, dns:, gateway:, reserved_ip_ranges:)
11
+ @bosh_product_form_section.open_form('network')
12
+
13
+ @bosh_product_form_section.set_fields(
14
+ 'name' => name,
15
+ 'iaas_network_identifier' => iaas_network_identifier,
16
+ 'subnet' => subnet,
17
+ 'dns' => dns,
18
+ 'gateway' => gateway,
19
+ 'reserved_ip_ranges' => reserved_ip_ranges,
20
+ )
21
+ browser.click_on 'Save'
22
+ flash_errors = browser.all('.flash-message.error ul.message li').to_a
23
+ flash_errors.reject! { |node| node.text =~ /cannot reach gateway/i }
24
+
25
+ if (flash_errors.length > 0)
26
+ fail flash_errors.collect(&:text).inspect
27
+ end
28
+ end
29
+
30
+ def add_network(name:, iaas_network_identifier:, subnet:, dns:, gateway:, reserved_ip_ranges:)
31
+ @bosh_product_form_section.open_form('network')
32
+
33
+ browser.click_on 'Add'
34
+ @bosh_product_form_section.set_fields(
35
+ 'name' => name,
36
+ 'iaas_network_identifier' => iaas_network_identifier,
37
+ 'subnet' => subnet,
38
+ 'dns' => dns,
39
+ 'gateway' => gateway,
40
+ 'reserved_ip_ranges' => reserved_ip_ranges,
41
+ )
42
+ @bosh_product_form_section.save_form
43
+ end
44
+
45
+ private
46
+
47
+ attr_reader :browser
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,70 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
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 Version17
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
@@ -0,0 +1,17 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
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
@@ -0,0 +1,188 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
3
+ class OpsManagerDirector
4
+ def initialize(browser:, iaas_configuration: Version17::BoshProductSections::IaasConfiguration.new(browser: browser))
5
+ @browser = browser
6
+ @iaas_configuration = iaas_configuration
7
+ end
8
+
9
+ def configure_bosh_product(test_settings)
10
+ configure_iaas(test_settings)
11
+
12
+ config_director(test_settings.ops_manager)
13
+
14
+ add_availability_zones(test_settings.iaas_type, test_settings.ops_manager.availability_zones)
15
+
16
+ assign_availability_zone(test_settings.iaas_type, test_settings.ops_manager.availability_zones)
17
+
18
+ add_networks(test_settings)
19
+
20
+ assign_networks(test_settings.ops_manager)
21
+
22
+ customize_resource_config(test_settings.ops_manager.resource_config)
23
+ end
24
+
25
+ def configure_iaas(test_settings)
26
+ iaas_settings = Settings.for(test_settings)
27
+ iaas_specific_fields = iaas_settings.iaas_configuration_fields
28
+ advanced_infrastructure_config_fields = iaas_settings.advanced_infrastructure_config_fields
29
+ iaas_configuration.fill_iaas_settings(iaas_specific_fields)
30
+ advanced_infrastructure_config.fill_advanced_infrastructure_config_settings(advanced_infrastructure_config_fields)
31
+ end
32
+
33
+ def add_availability_zones(iaas_type, iaas_availability_zones)
34
+ case iaas_type
35
+ when OpsManagerUiDrivers::AWS_IAAS_TYPE, OpsManagerUiDrivers::OPENSTACK_IAAS_TYPE
36
+ return unless iaas_availability_zones
37
+ availability_zones.add_single_az(iaas_availability_zones.first['iaas_identifier'])
38
+ when OpsManagerUiDrivers::VSPHERE_IAAS_TYPE
39
+ iaas_availability_zones && iaas_availability_zones.each do |az|
40
+ availability_zones.add_az('name' => az['name'], 'cluster' => az['cluster'], 'resource_pool' => az['resource_pool'])
41
+ end
42
+ end
43
+ end
44
+
45
+ def add_networks(test_settings)
46
+ iaas_networks = test_settings.ops_manager.networks
47
+
48
+ case test_settings.iaas_type
49
+ when OpsManagerUiDrivers::AWS_IAAS_TYPE, OpsManagerUiDrivers::OPENSTACK_IAAS_TYPE
50
+ first_network = iaas_networks.first
51
+
52
+ networks.add_single_network(
53
+ name: first_network['name'],
54
+ iaas_network_identifier: first_network['identifier'],
55
+ subnet: first_network['subnet'],
56
+ reserved_ip_ranges: first_network['reserved_ips'],
57
+ dns: first_network['dns'],
58
+ gateway: first_network['gateway'],
59
+ )
60
+ else
61
+ iaas_networks && iaas_networks.each do |network|
62
+ networks.add_network(
63
+ name: network['name'],
64
+ iaas_network_identifier: network['identifier'],
65
+ subnet: network['subnet'],
66
+ reserved_ip_ranges: network['reserved_ips'],
67
+ dns: network['dns'],
68
+ gateway: network['gateway'],
69
+ )
70
+ end
71
+ end
72
+ end
73
+
74
+ def config_director(ops_manager)
75
+ browser.click_on 'Director Config'
76
+ browser.fill_in('director_configuration[ntp_servers_string]', with: ops_manager.ntp_servers)
77
+ browser.check('Enable VM Resurrector Plugin') if ops_manager.resurrector_enabled
78
+
79
+ s3_blobstore = ops_manager.s3_blobstore
80
+ if s3_blobstore
81
+ browser.choose('S3 Compatible Blobstore')
82
+ browser.fill_in('director_configuration[s3_blobstore_options][endpoint]', with: s3_blobstore.endpoint)
83
+ browser.fill_in('director_configuration[s3_blobstore_options][bucket_name]', with: s3_blobstore.bucket_name)
84
+ browser.fill_in('director_configuration[s3_blobstore_options][access_key]', with: s3_blobstore.access_key_id)
85
+ browser.fill_in('director_configuration[s3_blobstore_options][secret_key]', with: s3_blobstore.secret_access_key)
86
+ end
87
+
88
+ mysql = ops_manager.mysql
89
+ if mysql
90
+ browser.choose('External MySQL Database')
91
+ browser.fill_in('director_configuration[external_database_options][host]', with: mysql.host)
92
+ browser.fill_in('director_configuration[external_database_options][port]', with: mysql.port)
93
+ browser.fill_in('director_configuration[external_database_options][user]', with: mysql.user)
94
+ browser.fill_in('director_configuration[external_database_options][password]', with: mysql.password)
95
+ browser.fill_in('director_configuration[external_database_options][database]', with: mysql.dbname)
96
+ end
97
+
98
+ browser.click_on 'Save'
99
+ end
100
+
101
+ def assign_availability_zone(iaas_type, iaas_availability_zones)
102
+ return unless iaas_availability_zones
103
+ case iaas_type
104
+ when OpsManagerUiDrivers::AWS_IAAS_TYPE, OpsManagerUiDrivers::OPENSTACK_IAAS_TYPE
105
+ browser.click_on 'Assign Availability Zones'
106
+ browser.select(iaas_availability_zones.first['iaas_identifier'])
107
+ browser.click_on 'Save'
108
+ when OpsManagerUiDrivers::VSPHERE_IAAS_TYPE
109
+ browser.click_on 'Assign Availability Zones'
110
+ browser.select(iaas_availability_zones.first['name'])
111
+ browser.click_on 'Save'
112
+ end
113
+ end
114
+
115
+ def assign_networks(ops_manager)
116
+ if ops_manager.vcenter
117
+ deployment_network = ops_manager.networks[0]
118
+
119
+ infrastructure_network =
120
+ ops_manager.networks[1] ? ops_manager.networks[1] : ops_manager.networks[0]
121
+
122
+ assign_networks_vsphere(
123
+ infrastructure_network: infrastructure_network['name'],
124
+ deployment_network: deployment_network['name'],
125
+ )
126
+ else
127
+ assign_network(deployment_network: ops_manager.networks[0]['name'])
128
+ end
129
+ end
130
+
131
+ def customize_resource_config(resource_config)
132
+ browser.click_on 'Resource Config'
133
+ if resource_config
134
+ browser.fill_in('product_resources_form[director][persistent_disk][value]', with: resource_config.persistent_disk)
135
+ end
136
+ end
137
+
138
+ def assign_networks_vsphere(infrastructure_network:, deployment_network:)
139
+ browser.click_on 'Assign Networks'
140
+
141
+ browser.within browser.find '#director_network_assignments_infrastructure_network' do
142
+ browser.select infrastructure_network
143
+ end
144
+
145
+ browser.within browser.find '#director_network_assignments_deployment_network' do
146
+ browser.select deployment_network
147
+ end
148
+ browser.click_on 'Save'
149
+ browser.wait { browser.assert_text('Successfully assigned infrastructure network') }
150
+ end
151
+
152
+ def assign_network(deployment_network:)
153
+ browser.click_on 'Assign Networks'
154
+
155
+ browser.select(deployment_network, from: 'Network')
156
+ browser.click_on 'Save'
157
+ end
158
+
159
+ def configure_vm_passwords(use_generated_passwords: true)
160
+ browser.click_on 'Security'
161
+ if use_generated_passwords
162
+ browser.choose('Generate passwords')
163
+ else
164
+ browser.choose('Use default BOSH password')
165
+ end
166
+ browser.click_on 'Save'
167
+ browser.wait { browser.assert_text('Settings updated') }
168
+ end
169
+
170
+ private
171
+
172
+ attr_reader :browser, :iaas_configuration
173
+
174
+
175
+ def availability_zones
176
+ @availability_zones ||= Version17::BoshProductSections::AvailabilityZones.new(browser: browser)
177
+ end
178
+
179
+ def networks
180
+ @networks ||= Version17::BoshProductSections::Networks.new(browser: browser)
181
+ end
182
+
183
+ def advanced_infrastructure_config
184
+ @advanced_infrastructure_config ||= Version17::BoshProductSections::AdvancedInfrastructureConfig.new(browser: browser)
185
+ end
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,38 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
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,38 @@
1
+ module OpsManagerUiDrivers
2
+ module Version17
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.assert_text("Stemcell '#{File.basename(stemcell_file_path)}' has been uploaded successfully.")
17
+ }
18
+ end
19
+
20
+ def product_form(form_name)
21
+ Version17::ProductForm.new(browser: browser, product_name: product_name, form_name: form_name)
22
+ end
23
+
24
+ def product_errands
25
+ Version17::ProductErrands.new(browser: browser, product_name: product_name)
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :browser, :product_name
31
+
32
+ def visit_product_page
33
+ browser.visit '/'
34
+ browser.click_on "show-#{product_name}-configure-action"
35
+ end
36
+ end
37
+ end
38
+ end