opsmgr 0.26.1
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/LEGAL.txt +13 -0
- data/README.md +21 -0
- data/lib/opsmgr.rb +12 -0
- data/lib/opsmgr/api/client.rb +85 -0
- data/lib/opsmgr/api/endpoints_factory.rb +39 -0
- data/lib/opsmgr/api/http_client.rb +204 -0
- data/lib/opsmgr/api/results.rb +257 -0
- data/lib/opsmgr/api/version20/endpoints.rb +93 -0
- data/lib/opsmgr/cmd/bosh_command.rb +213 -0
- data/lib/opsmgr/cmd/ops_manager.rb +100 -0
- data/lib/opsmgr/environments.rb +77 -0
- data/lib/opsmgr/errand_runner.rb +75 -0
- data/lib/opsmgr/log.rb +70 -0
- data/lib/opsmgr/product_upload_wrapper.rb +69 -0
- data/lib/opsmgr/renderer.rb +23 -0
- data/lib/opsmgr/renderer/aws.rb +147 -0
- data/lib/opsmgr/renderer/noop.rb +21 -0
- data/lib/opsmgr/settings/microbosh/installation_settings.rb +84 -0
- data/lib/opsmgr/settings/microbosh/job.rb +54 -0
- data/lib/opsmgr/settings/microbosh/job_list.rb +27 -0
- data/lib/opsmgr/settings/microbosh/network.rb +21 -0
- data/lib/opsmgr/settings/microbosh/product.rb +88 -0
- data/lib/opsmgr/settings/microbosh/product_list.rb +27 -0
- data/lib/opsmgr/settings/microbosh/property.rb +31 -0
- data/lib/opsmgr/settings/microbosh/property_list.rb +27 -0
- data/lib/opsmgr/tasks.rb +16 -0
- data/lib/opsmgr/tasks/bosh.rake +70 -0
- data/lib/opsmgr/tasks/destroy.rake +42 -0
- data/lib/opsmgr/tasks/info.rake +19 -0
- data/lib/opsmgr/tasks/opsmgr.rake +179 -0
- data/lib/opsmgr/tasks/product.rake +53 -0
- data/lib/opsmgr/teapot.rb +51 -0
- data/lib/opsmgr/teapot/app.rb +50 -0
- data/lib/opsmgr/teapot/spec_helper.rb +33 -0
- data/lib/opsmgr/ui_helpers/add_first_user_spec.rb +25 -0
- data/lib/opsmgr/ui_helpers/config_helper.rb +151 -0
- data/lib/opsmgr/ui_helpers/delete_installation_spec.rb +41 -0
- data/lib/opsmgr/ui_helpers/delete_product_if_present_spec.rb +43 -0
- data/lib/opsmgr/ui_helpers/delete_product_spec.rb +39 -0
- data/lib/opsmgr/ui_helpers/export_installation_spec.rb +31 -0
- data/lib/opsmgr/ui_helpers/get_latest_install_log_spec.rb +29 -0
- data/lib/opsmgr/ui_helpers/import_installation_spec.rb +29 -0
- data/lib/opsmgr/ui_helpers/import_stemcell_spec.rb +30 -0
- data/lib/opsmgr/ui_helpers/microbosh/configure_microbosh_spec.rb +31 -0
- data/lib/opsmgr/ui_helpers/trigger_install_spec.rb +35 -0
- data/lib/opsmgr/ui_helpers/ui_spec_runner.rb +117 -0
- data/lib/opsmgr/ui_helpers/uncheck_errands_spec.rb +29 -0
- data/lib/opsmgr/ui_helpers/upload_and_add_product_spec.rb +27 -0
- data/lib/opsmgr/ui_helpers/upload_and_upgrade_product_spec.rb +36 -0
- data/lib/opsmgr/version.rb +11 -0
- metadata +360 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
namespace :opsmgr do
|
2
|
+
namespace :product do
|
3
|
+
desc 'Upload and Add a Pivotal Product'
|
4
|
+
task :upload_add, [:environment, :_om_version, :product_path, :product_name] do |_, args|
|
5
|
+
require 'opsmgr/product_upload_wrapper'
|
6
|
+
|
7
|
+
ProductUploadWrapper.wrap_add(
|
8
|
+
environment: args.environment,
|
9
|
+
product_path: args.product_path,
|
10
|
+
product_name: args.product_name
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Upgrade a Generic Pivotal Product'
|
15
|
+
task :upload_upgrade, [:environment, :_om_version, :product_path, :product_name] do |_, args|
|
16
|
+
require 'opsmgr/product_upload_wrapper'
|
17
|
+
|
18
|
+
ProductUploadWrapper.wrap_upgrade(
|
19
|
+
environment: args.environment,
|
20
|
+
product_path: args.product_path,
|
21
|
+
product_name: args.product_name
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'Import a stemcell for a Generic Pivotal Product'
|
26
|
+
task :import_stemcell, [:environment, :om_version, :stemcell_path, :product_name] do |_, args|
|
27
|
+
require 'opsmgr/ui_helpers/ui_spec_runner'
|
28
|
+
|
29
|
+
UiSpecRunner.new(
|
30
|
+
environment: args.environment,
|
31
|
+
om_version: args.om_version
|
32
|
+
).import_stemcell(args.stemcell_path, args.product_name)
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'Uncheck errands for a Generic Pivotal Product'
|
36
|
+
task :uncheck_errands, [:environment, :om_version, :product_name] do |_, args|
|
37
|
+
require 'opsmgr/ui_helpers/ui_spec_runner'
|
38
|
+
|
39
|
+
UiSpecRunner.new(
|
40
|
+
environment: args.environment,
|
41
|
+
om_version: args.om_version
|
42
|
+
).uncheck_errands(args.product_name, args.extras)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
47
|
+
# All rights reserved.
|
48
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
49
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
50
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
51
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
52
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
53
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
require 'opsmgr/teapot/app'
|
5
|
+
|
6
|
+
module Opsmgr
|
7
|
+
module Teapot
|
8
|
+
class << self
|
9
|
+
attr_accessor :configured_components
|
10
|
+
|
11
|
+
def start(components)
|
12
|
+
@configured_components = components
|
13
|
+
@teapot_tempest_thread = Thread.new do
|
14
|
+
silence(:stderr) do # Teapot's Sinatra is very chatty on stderr.
|
15
|
+
Opsmgr::Teapot::App.run!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
fail 'Teapot never started!' unless listening?
|
20
|
+
end
|
21
|
+
|
22
|
+
def stop
|
23
|
+
@teapot_tempest_thread.kill
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def listening?
|
29
|
+
# inspired by http://stackoverflow.com/a/9017896
|
30
|
+
Timeout.timeout(5) do
|
31
|
+
begin
|
32
|
+
TCPSocket.new('localhost', App.port).close
|
33
|
+
true
|
34
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
35
|
+
retry
|
36
|
+
end
|
37
|
+
end
|
38
|
+
rescue Timeout::Error
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
45
|
+
# All rights reserved.
|
46
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
47
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
48
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
49
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
50
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
51
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Opsmgr
|
5
|
+
module Teapot
|
6
|
+
class App < Sinatra::Base
|
7
|
+
set :port, 8741
|
8
|
+
enable :sessions
|
9
|
+
set :server, 'webrick'
|
10
|
+
|
11
|
+
get '/api/api_version' do
|
12
|
+
content_type :json
|
13
|
+
case @@version
|
14
|
+
when '1.4'
|
15
|
+
api_version = '2.0'
|
16
|
+
end
|
17
|
+
{ 'version' => api_version }.to_json
|
18
|
+
end
|
19
|
+
|
20
|
+
get '/teapot/reset' do
|
21
|
+
@@installs = nil
|
22
|
+
@@components = nil
|
23
|
+
@@products = nil
|
24
|
+
@@logged_in_users = nil
|
25
|
+
@@everyone_logged_in = false
|
26
|
+
@@enable_number_of_cores_error = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
post '/teapot/version' do
|
30
|
+
Teapot.configured_components.components_for(params['version']).each do |component|
|
31
|
+
components << component
|
32
|
+
end
|
33
|
+
@@version = params['version']
|
34
|
+
{ version: params['version'] }.to_json
|
35
|
+
end
|
36
|
+
|
37
|
+
def components
|
38
|
+
@@components ||= []
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
44
|
+
# All rights reserved.
|
45
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
46
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
47
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
48
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
49
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
50
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module Opsmgr
|
4
|
+
module Teapot
|
5
|
+
module SpecHelper
|
6
|
+
def set_teapot_version(version)
|
7
|
+
post('/teapot/version', version: version)
|
8
|
+
end
|
9
|
+
|
10
|
+
def post(path, params = {})
|
11
|
+
req = Net::HTTP::Post.new(path)
|
12
|
+
req.set_form_data(params)
|
13
|
+
response = teapot_client.request(req)
|
14
|
+
|
15
|
+
fail "Teapot gave HTTP response #{response.code} POST of #{path} with #{params.inspect}" if response.is_a?(Net::HTTPInternalServerError)
|
16
|
+
|
17
|
+
response
|
18
|
+
end
|
19
|
+
|
20
|
+
def teapot_client
|
21
|
+
Net::HTTP.new('localhost', App.port)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
27
|
+
# All rights reserved.
|
28
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
29
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
30
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
31
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
32
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
33
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'config_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Adding the first user', order: :defined do
|
4
|
+
let!(:current_ops_manager) { ops_manager_driver }
|
5
|
+
let!(:env_settings) { fetch_environment_settings }
|
6
|
+
|
7
|
+
it 'creates the admin user and logs in' do
|
8
|
+
poll_up_to_mins(10) do
|
9
|
+
current_ops_manager.setup_page.setup_or_login(
|
10
|
+
user: env_settings.ops_manager.username,
|
11
|
+
password: env_settings.ops_manager.password,
|
12
|
+
)
|
13
|
+
|
14
|
+
expect(page).to have_content('Installation Dashboard')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
19
|
+
# All rights reserved.
|
20
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
21
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
22
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
24
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
25
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,151 @@
|
|
1
|
+
PROJECT_ROOT = File.expand_path(File.join(__dir__, '..'))
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'ops_manager_ui_drivers'
|
5
|
+
require 'recursive-open-struct'
|
6
|
+
require 'capybara/webkit'
|
7
|
+
require 'yaml'
|
8
|
+
require 'opsmgr/environments'
|
9
|
+
require 'json'
|
10
|
+
|
11
|
+
module SettingsHelper
|
12
|
+
def product_path
|
13
|
+
ENV.fetch('PRODUCT_PATH')
|
14
|
+
end
|
15
|
+
|
16
|
+
def product_name
|
17
|
+
ENV.fetch('PRODUCT_NAME')
|
18
|
+
end
|
19
|
+
|
20
|
+
def export_destination_path
|
21
|
+
ENV.fetch('EXPORT_DESTINATION')
|
22
|
+
end
|
23
|
+
|
24
|
+
def import_file_path
|
25
|
+
ENV.fetch('IMPORT_FILE')
|
26
|
+
end
|
27
|
+
|
28
|
+
def stemcell_file_path
|
29
|
+
ENV.fetch('STEMCELL_FILE')
|
30
|
+
end
|
31
|
+
|
32
|
+
def om_version
|
33
|
+
ENV.fetch('OM_VERSION')
|
34
|
+
end
|
35
|
+
|
36
|
+
def install_timeout
|
37
|
+
ENV.fetch('INSTALL_TIMEOUT').to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
def delete_timeout
|
41
|
+
Integer(ENV.fetch('DELETE_TIMEOUT'))
|
42
|
+
end
|
43
|
+
|
44
|
+
def errand_names
|
45
|
+
JSON.parse(ENV.fetch('ERRAND_NAMES'))
|
46
|
+
end
|
47
|
+
|
48
|
+
def ops_manager_driver
|
49
|
+
configure_capybara(fetch_environment_settings.ops_manager.url)
|
50
|
+
case om_version
|
51
|
+
when '1.4'
|
52
|
+
om_1_4(fetch_environment_settings.ops_manager.url)
|
53
|
+
when '1.5'
|
54
|
+
om_1_5(fetch_environment_settings.ops_manager.url)
|
55
|
+
when '1.6'
|
56
|
+
om_1_6(fetch_environment_settings.ops_manager.url)
|
57
|
+
when '1.7'
|
58
|
+
om_1_7(fetch_environment_settings.ops_manager.url)
|
59
|
+
else
|
60
|
+
fail "Unsupported Ops Manager Version #{om_version.inspect}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def ops_manager_api_driver
|
65
|
+
env_settings = fetch_environment_settings
|
66
|
+
case om_version
|
67
|
+
when '1.4'
|
68
|
+
api_1_4(
|
69
|
+
host: env_settings.ops_manager.url,
|
70
|
+
username: env_settings.ops_manager.username,
|
71
|
+
password: env_settings.ops_manager.password,
|
72
|
+
)
|
73
|
+
when '1.5'
|
74
|
+
api_1_5(
|
75
|
+
host: env_settings.ops_manager.url,
|
76
|
+
username: env_settings.ops_manager.username,
|
77
|
+
password: env_settings.ops_manager.password,
|
78
|
+
)
|
79
|
+
when '1.6'
|
80
|
+
api_1_6(
|
81
|
+
host: env_settings.ops_manager.url,
|
82
|
+
username: env_settings.ops_manager.username,
|
83
|
+
password: env_settings.ops_manager.password,
|
84
|
+
)
|
85
|
+
when '1.7'
|
86
|
+
api_1_7(
|
87
|
+
host: env_settings.ops_manager.url,
|
88
|
+
username: env_settings.ops_manager.username,
|
89
|
+
password: env_settings.ops_manager.password,
|
90
|
+
)
|
91
|
+
else
|
92
|
+
fail "Unsupported Ops Manager Version #{om_version.inspect}"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def environment_name
|
97
|
+
ENV.fetch('ENVIRONMENT_NAME')
|
98
|
+
end
|
99
|
+
|
100
|
+
def fetch_environment_settings
|
101
|
+
Opsmgr::Environments.for(environment_name).settings
|
102
|
+
end
|
103
|
+
|
104
|
+
def configure_capybara(ops_manager_url)
|
105
|
+
Capybara.configure do |c|
|
106
|
+
c.default_driver = :webkit
|
107
|
+
end
|
108
|
+
|
109
|
+
begin
|
110
|
+
Capybara::Webkit.configure do |c|
|
111
|
+
c.allow_url(ops_manager_url)
|
112
|
+
c.ignore_ssl_errors
|
113
|
+
end
|
114
|
+
rescue
|
115
|
+
# Capybara says, "All configuration must take place before the driver starts"
|
116
|
+
end
|
117
|
+
|
118
|
+
page.current_window.resize_to(1024, 1600) # avoid overlapping footer spec failures
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
RSpec.configure do |config|
|
123
|
+
config.fail_fast = true
|
124
|
+
config.default_formatter = 'documentation'
|
125
|
+
|
126
|
+
config.include(SettingsHelper)
|
127
|
+
config.include(Capybara::DSL)
|
128
|
+
config.include(OpsManagerUiDrivers::PageHelpers)
|
129
|
+
config.include(OpsManagerUiDrivers::WaitHelper)
|
130
|
+
|
131
|
+
config.after(:each) do |example|
|
132
|
+
if example.exception
|
133
|
+
page = save_page
|
134
|
+
screenshot = save_screenshot(nil)
|
135
|
+
|
136
|
+
exception = example.exception
|
137
|
+
exception.define_singleton_method :message do
|
138
|
+
super() +
|
139
|
+
"\nHTML page: #{page}\nScreenshot: #{screenshot}"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
145
|
+
# All rights reserved.
|
146
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
147
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
148
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
149
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
150
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
151
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative 'config_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Deleting the installation', order: :defined do
|
4
|
+
let!(:current_ops_manager) { ops_manager_driver }
|
5
|
+
let!(:env_settings) { fetch_environment_settings }
|
6
|
+
|
7
|
+
it 'creates the admin user and logs in' do
|
8
|
+
# if the ops manager is not up, fail earlier than other cases and
|
9
|
+
# let the caller handle the error
|
10
|
+
poll_up_to_mins(1) do
|
11
|
+
current_ops_manager.setup_page.setup_or_login(
|
12
|
+
user: env_settings.ops_manager.username,
|
13
|
+
password: env_settings.ops_manager.password,
|
14
|
+
)
|
15
|
+
|
16
|
+
expect(page).to have_content('Installation Dashboard')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'deletes the installation' do
|
21
|
+
if current_ops_manager.product_dashboard.delete_installation_available?
|
22
|
+
current_ops_manager.product_dashboard.delete_whole_installation
|
23
|
+
|
24
|
+
expect(current_ops_manager.product_dashboard).not_to be_delete_installation_available
|
25
|
+
|
26
|
+
poll_up_to_mins(45) do
|
27
|
+
expect(current_ops_manager.state_change_progress).to be_state_change_success
|
28
|
+
end
|
29
|
+
else
|
30
|
+
puts 'no installation to delete'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
35
|
+
# All rights reserved.
|
36
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
37
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
38
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
39
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
40
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
41
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'config_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Deleting a product if it is present', order: :defined do
|
4
|
+
let!(:current_ops_manager) { ops_manager_driver }
|
5
|
+
let!(:env_settings) { fetch_environment_settings }
|
6
|
+
|
7
|
+
it 'creates the admin user and logs in' do
|
8
|
+
poll_up_to_mins(10) do
|
9
|
+
current_ops_manager.setup_page.setup_or_login(
|
10
|
+
user: env_settings.ops_manager.username,
|
11
|
+
password: env_settings.ops_manager.password,
|
12
|
+
)
|
13
|
+
|
14
|
+
expect(page).to have_content('Installation Dashboard')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'removes the product if it exists on the dashboard' do
|
19
|
+
if current_ops_manager.product_dashboard.product_on_dashboard?(product_name)
|
20
|
+
current_ops_manager.product_dashboard.delete_product(product_name)
|
21
|
+
else
|
22
|
+
puts "#{product_name} does not exist on dashboard, skipping deletion"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'deletes' do
|
27
|
+
current_ops_manager.product_dashboard.apply_updates
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'waits for a successful installation' do
|
31
|
+
poll_up_to_mins(delete_timeout) do
|
32
|
+
expect(current_ops_manager.state_change_progress).to be_state_change_success
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
37
|
+
# All rights reserved.
|
38
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
39
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
40
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
41
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
42
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
43
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|