opsmgr 0.26.1
Sign up to get free protection for your applications and to get access to all the features.
- 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,93 @@
|
|
1
|
+
module Opsmgr
|
2
|
+
module Api
|
3
|
+
module Version20
|
4
|
+
class Endpoints
|
5
|
+
VERSION = '2.0'.freeze
|
6
|
+
|
7
|
+
def version
|
8
|
+
VERSION
|
9
|
+
end
|
10
|
+
|
11
|
+
def installation_settings_post_path
|
12
|
+
'/api/installation_settings'
|
13
|
+
end
|
14
|
+
|
15
|
+
def installation_settings_get_path
|
16
|
+
'/api/installation_settings'
|
17
|
+
end
|
18
|
+
|
19
|
+
def install_post_path
|
20
|
+
'/api/installation?ignore_warnings=1'
|
21
|
+
end
|
22
|
+
|
23
|
+
def installation_path
|
24
|
+
'/api/installation'
|
25
|
+
end
|
26
|
+
|
27
|
+
def configure_user_path
|
28
|
+
'/api/users'
|
29
|
+
end
|
30
|
+
|
31
|
+
def show_installation_status(id)
|
32
|
+
"/api/installation/#{id}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def installation_log_path(id)
|
36
|
+
"/api/installation/#{id}/logs"
|
37
|
+
end
|
38
|
+
|
39
|
+
def upload_product_path
|
40
|
+
'/api/products'
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_product_path
|
44
|
+
'/api/installation_settings/products'
|
45
|
+
end
|
46
|
+
|
47
|
+
def upgrade_product_path(product_guid)
|
48
|
+
"/api/installation_settings/products/#{product_guid}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def upload_product_form_key
|
52
|
+
'product'
|
53
|
+
end
|
54
|
+
|
55
|
+
def list_components_path
|
56
|
+
'/api/components'
|
57
|
+
end
|
58
|
+
|
59
|
+
def list_products_path
|
60
|
+
'/api/products'
|
61
|
+
end
|
62
|
+
|
63
|
+
def installed_products_path
|
64
|
+
'/api/installation_settings/products'
|
65
|
+
end
|
66
|
+
|
67
|
+
def product_manifest_path(product_guid)
|
68
|
+
"/api/manifests/#{product_guid}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def export_installation_path
|
72
|
+
'/api/installation_asset_collection'
|
73
|
+
end
|
74
|
+
|
75
|
+
def import_installation_path
|
76
|
+
'/api/installation_asset_collection'
|
77
|
+
end
|
78
|
+
|
79
|
+
def mark_for_deletion_path(product_guid)
|
80
|
+
"/api/installation_settings/products/#{product_guid}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
87
|
+
# All rights reserved.
|
88
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
89
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
90
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
91
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
92
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
93
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,213 @@
|
|
1
|
+
require 'opsmgr/ui_helpers/ui_spec_runner'
|
2
|
+
require 'opsmgr/environments'
|
3
|
+
require 'ops_manager_ui_drivers'
|
4
|
+
require 'capybara'
|
5
|
+
require 'capybara/webkit'
|
6
|
+
require 'net/ssh/gateway'
|
7
|
+
|
8
|
+
module Opsmgr
|
9
|
+
module Cmd
|
10
|
+
class BoshCommand
|
11
|
+
include Capybara::DSL
|
12
|
+
|
13
|
+
def initialize(env_name:, om_version:)
|
14
|
+
@env_settings = Opsmgr::Environments.for(env_name).settings
|
15
|
+
configure_capybara
|
16
|
+
|
17
|
+
@env_name = env_name
|
18
|
+
@om_version = om_version
|
19
|
+
@current_ops_manager = setup_or_login
|
20
|
+
end
|
21
|
+
|
22
|
+
def command
|
23
|
+
ip = ENV['DIRECTOR_IP_OVERRIDE'] || director_ip
|
24
|
+
|
25
|
+
%W(
|
26
|
+
bosh
|
27
|
+
-t #{ip}
|
28
|
+
-u director
|
29
|
+
-p #{director_password}
|
30
|
+
).join(' ')
|
31
|
+
end
|
32
|
+
|
33
|
+
def target
|
34
|
+
ip = ENV['DIRECTOR_IP_OVERRIDE'] || director_ip
|
35
|
+
|
36
|
+
%W(
|
37
|
+
bosh
|
38
|
+
-u director
|
39
|
+
-p #{director_password}
|
40
|
+
target #{ip}
|
41
|
+
).join(' ')
|
42
|
+
end
|
43
|
+
|
44
|
+
def director_ip
|
45
|
+
status_page = current_ops_manager.product_status_for(director_tile_name)
|
46
|
+
|
47
|
+
partitioned_job_name = 'director-partition-null-az'
|
48
|
+
availability_zones = env_settings.ops_manager.availability_zones
|
49
|
+
if availability_zones
|
50
|
+
az_name = availability_zones.first.iaas_identifier || 'first-az'
|
51
|
+
partitioned_job_name = "director-partition-#{current_ops_manager.availability_zone_guid_for_name(az_name)}"
|
52
|
+
end
|
53
|
+
|
54
|
+
director_status = status_page.job_status(partitioned_job_name)
|
55
|
+
|
56
|
+
director_status.ips.first
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def setup_or_login
|
62
|
+
driver = ops_manager_driver(om_version)
|
63
|
+
|
64
|
+
driver.setup_page.setup_or_login(
|
65
|
+
user: env_settings.ops_manager.username,
|
66
|
+
password: env_settings.ops_manager.password,
|
67
|
+
)
|
68
|
+
driver
|
69
|
+
end
|
70
|
+
|
71
|
+
def configure_capybara
|
72
|
+
Capybara.configure do |c|
|
73
|
+
c.default_driver = :webkit
|
74
|
+
c.run_server = false
|
75
|
+
c.app_host = env_settings.ops_manager.url
|
76
|
+
end
|
77
|
+
|
78
|
+
Capybara::Webkit.configure do |c|
|
79
|
+
c.ignore_ssl_errors = true
|
80
|
+
c.allow_url(env_settings.ops_manager.url)
|
81
|
+
end
|
82
|
+
|
83
|
+
page.current_window.resize_to(1024, 1600) # avoid overlapping footer spec failures
|
84
|
+
end
|
85
|
+
|
86
|
+
def director_password
|
87
|
+
browser = self
|
88
|
+
|
89
|
+
browser.visit '/'
|
90
|
+
browser.click_on "show-#{director_tile_name}-configure-action"
|
91
|
+
browser.click_on 'show-credentials-action'
|
92
|
+
|
93
|
+
credentials = ''
|
94
|
+
|
95
|
+
browser.within "#installations_credentials" do
|
96
|
+
credentials = browser.find(:xpath, ".//td[@class='with-table']/table[@class='table']/tbody/tr[4]/td[@class='value value-col']").text
|
97
|
+
end
|
98
|
+
|
99
|
+
credentials.split(' / ')[1]
|
100
|
+
end
|
101
|
+
|
102
|
+
def director_tile_name
|
103
|
+
(om_version.to_f >= 1.6) ? 'p-bosh' : 'microbosh'
|
104
|
+
end
|
105
|
+
|
106
|
+
def ops_manager_driver(om_version)
|
107
|
+
case om_version
|
108
|
+
when '1.4'
|
109
|
+
om_1_4
|
110
|
+
when '1.5'
|
111
|
+
om_1_5
|
112
|
+
when '1.6'
|
113
|
+
om_1_6
|
114
|
+
when '1.7'
|
115
|
+
om_1_7
|
116
|
+
else
|
117
|
+
fail "Unsupported Ops Manager Version #{om_version.inspect}"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def om_1_4
|
122
|
+
@om_1_4 ||= create_web_ui(OpsManagerUiDrivers::Version14)
|
123
|
+
end
|
124
|
+
|
125
|
+
def om_1_5
|
126
|
+
@om_1_5 ||= create_web_ui(OpsManagerUiDrivers::Version15)
|
127
|
+
end
|
128
|
+
|
129
|
+
def om_1_6
|
130
|
+
@om_1_6 ||= create_web_ui(OpsManagerUiDrivers::Version16)
|
131
|
+
end
|
132
|
+
|
133
|
+
def om_1_7
|
134
|
+
@om_1_7 ||= create_web_ui(OpsManagerUiDrivers::Version17)
|
135
|
+
end
|
136
|
+
|
137
|
+
def create_web_ui(version_module)
|
138
|
+
version_module::WebUi.new(browser: self)
|
139
|
+
end
|
140
|
+
|
141
|
+
attr_reader :env_settings, :om_version, :current_ops_manager
|
142
|
+
end
|
143
|
+
|
144
|
+
class IaasGateway
|
145
|
+
def initialize(bosh_command:, environment_name:, logger:)
|
146
|
+
@bosh_command = bosh_command
|
147
|
+
@environment = Opsmgr::Environments.for(environment_name)
|
148
|
+
@logger = logger
|
149
|
+
end
|
150
|
+
|
151
|
+
def gateway(&block)
|
152
|
+
case environment.settings.iaas_type
|
153
|
+
when 'vsphere'
|
154
|
+
block.call
|
155
|
+
when 'aws', 'openstack'
|
156
|
+
ssh_key_gateway(block)
|
157
|
+
when 'vcloud'
|
158
|
+
ssh_password_gateway(block)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
private
|
163
|
+
|
164
|
+
attr_reader :bosh_command, :environment, :logger
|
165
|
+
|
166
|
+
def ssh_password_gateway(block)
|
167
|
+
ENV['DIRECTOR_IP_OVERRIDE'] = 'localhost'
|
168
|
+
uri = URI.parse(environment.settings.ops_manager.url)
|
169
|
+
director_ip = bosh_command.director_ip
|
170
|
+
logger.info("Setting up SSH gateway to OpsManager at #{uri.host}")
|
171
|
+
Net::SSH::Gateway.new(
|
172
|
+
uri.host,
|
173
|
+
'ubuntu',
|
174
|
+
password: 'tempest'
|
175
|
+
).open(director_ip, 25_555, 25_555) do |_|
|
176
|
+
logger.info("Opened tunnel to MicroBOSH at #{director_ip}")
|
177
|
+
block.call
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def ssh_key_gateway(block)
|
182
|
+
ENV['DIRECTOR_IP_OVERRIDE'] = 'localhost'
|
183
|
+
uri = URI.parse(environment.settings.ops_manager.url)
|
184
|
+
director_ip = bosh_command.director_ip
|
185
|
+
Net::SSH::Gateway.new(
|
186
|
+
uri.host,
|
187
|
+
'ubuntu',
|
188
|
+
key_data: [ssh_key]
|
189
|
+
).open(director_ip, 25_555, 25_555) do |_|
|
190
|
+
logger.info("Opened tunnel to MicroBOSH at #{director_ip}")
|
191
|
+
block.call
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def ssh_key
|
196
|
+
case environment.settings.iaas_type
|
197
|
+
when 'aws'
|
198
|
+
environment.settings.ops_manager.aws.ssh_key
|
199
|
+
when 'openstack'
|
200
|
+
environment.settings.ops_manager.openstack.ssh_private_key
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
207
|
+
# All rights reserved.
|
208
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
209
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
210
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
211
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
212
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
213
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'opsmgr/log'
|
2
|
+
|
3
|
+
module Opsmgr
|
4
|
+
module Cmd
|
5
|
+
class OpsManager
|
6
|
+
include Loggable
|
7
|
+
|
8
|
+
def initialize(target_environment)
|
9
|
+
@environment = target_environment
|
10
|
+
end
|
11
|
+
|
12
|
+
def configure_microbosh_infrastructure(client)
|
13
|
+
result = client.installation_settings
|
14
|
+
return unless result.success?
|
15
|
+
|
16
|
+
result = result.as_hash
|
17
|
+
return if result.fetch('installation_version', '') != '1.4'
|
18
|
+
return if result['infrastructure']['type'] != 'vsphere'
|
19
|
+
|
20
|
+
result['infrastructure']['file_system'] = {
|
21
|
+
'microbosh_vm_folder' => environment.settings.name,
|
22
|
+
'microbosh_template_folder' => environment.settings.name,
|
23
|
+
'microbosh_disk_path' => environment.settings.name,
|
24
|
+
}
|
25
|
+
|
26
|
+
file = Tempfile.new('om_install_settings')
|
27
|
+
file.write(YAML.dump(result))
|
28
|
+
file.close
|
29
|
+
|
30
|
+
client.upload_product_installation_settings(file.path)
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete_unused_products(client)
|
34
|
+
result = client.delete_unused_products
|
35
|
+
if result.success?
|
36
|
+
log.info 'Successfully deleted unused products'
|
37
|
+
else
|
38
|
+
fail result.message
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def upload_product(client, path)
|
43
|
+
result = client.upload_component(path)
|
44
|
+
if result.success?
|
45
|
+
log.info 'Successfully uploaded product'
|
46
|
+
else
|
47
|
+
fail result.message
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def list_products(client)
|
52
|
+
result = client.list_products
|
53
|
+
if result.success?
|
54
|
+
result
|
55
|
+
else
|
56
|
+
fail result.message
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def add_product(client, name, version)
|
61
|
+
result = client.add_product(name, version)
|
62
|
+
if result.success?
|
63
|
+
log.info 'Successfully added product'
|
64
|
+
else
|
65
|
+
fail result.message
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def upgrade_product(client, guid, version)
|
70
|
+
result = client.upgrade_product(guid, version)
|
71
|
+
if result.success?
|
72
|
+
log.info 'Successfully upgraded product'
|
73
|
+
else
|
74
|
+
fail result.message
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def installed_products(client)
|
79
|
+
result = client.installed_products
|
80
|
+
if result.success?
|
81
|
+
result
|
82
|
+
else
|
83
|
+
fail result.message
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
attr_reader :environment
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
94
|
+
# All rights reserved.
|
95
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
96
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
97
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
98
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
99
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
100
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'recursive-open-struct'
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
require 'erb'
|
6
|
+
require 'yaml'
|
7
|
+
require 'opsmgr/renderer'
|
8
|
+
|
9
|
+
module Opsmgr
|
10
|
+
class Environments
|
11
|
+
def self.for(name = '')
|
12
|
+
env_config = config_file(directory, config_filename(name))
|
13
|
+
unless File.exist?(env_config)
|
14
|
+
raise "No environments config found in #{env_config}. Specify path using ENV_DIRECTORY or ENV_CONFIG_FILE."
|
15
|
+
end
|
16
|
+
|
17
|
+
new(env_config, name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.list
|
21
|
+
Dir.glob(config_file(directory, '*')).map do |path|
|
22
|
+
fname = File.basename(path, '.*')
|
23
|
+
if fname == 'metadata'
|
24
|
+
string_keyed_hash = YAML.load(File.read(path))
|
25
|
+
string_keyed_hash['name'].to_sym
|
26
|
+
else
|
27
|
+
fname.to_sym
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.directory
|
33
|
+
ENV.fetch('ENV_DIRECTORY', File.join(Dir.pwd, '../environment/'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.config_filename(name)
|
37
|
+
ENV.key?('ENV_DIRECTORY') ? "#{name}.yml" : 'metadata'
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.config_file(dir, name)
|
41
|
+
ENV.fetch('ENV_CONFIG_FILE', File.join(dir, name))
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize(config_path, env_name = '')
|
45
|
+
@config_path = config_path
|
46
|
+
@env_name = env_name
|
47
|
+
end
|
48
|
+
|
49
|
+
def settings_with_merged_folders(installation_settings)
|
50
|
+
return settings unless installation_settings['infrastructure']['file_system']
|
51
|
+
file_system = installation_settings['infrastructure']['file_system']
|
52
|
+
|
53
|
+
settings_to_modify = settings
|
54
|
+
settings_to_modify.vm_shepherd.vm_configs[0].cleanup.datacenter_folders_to_clean << file_system['microbosh_vm_folder']
|
55
|
+
settings_to_modify.vm_shepherd.vm_configs[0].cleanup.datacenter_folders_to_clean << file_system['microbosh_template_folder']
|
56
|
+
settings_to_modify.vm_shepherd.vm_configs[0].cleanup.datastore_folders_to_clean << file_system['microbosh_disk_path']
|
57
|
+
settings_to_modify
|
58
|
+
end
|
59
|
+
|
60
|
+
def settings
|
61
|
+
string_keyed_hash = YAML.load(Renderer.for(File.read(@config_path)).rendered_settings)
|
62
|
+
unless @env_name == '' || string_keyed_hash['name'] == @env_name
|
63
|
+
raise "Specified name #{@env_name} does not match name in #{@config_path}"
|
64
|
+
end
|
65
|
+
|
66
|
+
RecursiveOpenStruct.new(string_keyed_hash, recurse_over_arrays: true)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
# Copyright (c) 2014-2015 Pivotal Software, Inc.
|
71
|
+
# All rights reserved.
|
72
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
73
|
+
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
74
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
75
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
76
|
+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
77
|
+
# USE OR OTHER DEALINGS IN THE SOFTWARE.
|