brpm_content_framework 0.1.55

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 (77) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +38 -0
  3. data/.travis.yml +17 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +21 -0
  6. data/README.md +308 -0
  7. data/Rakefile +23 -0
  8. data/TO_BE_MIGRATED.txt +9 -0
  9. data/architecture.png +0 -0
  10. data/automations/direct_execute.meta +10 -0
  11. data/automations/direct_execute.rb +10 -0
  12. data/automations/install_module.meta +10 -0
  13. data/automations/install_module.rb +13 -0
  14. data/bin/brpm_install +30 -0
  15. data/bin/brpm_uninstall +30 -0
  16. data/bin/event_handler +63 -0
  17. data/bin/webhook_receiver +49 -0
  18. data/brpm_content.gemspec +31 -0
  19. data/config.yml +8 -0
  20. data/infrastructure/.bashrc +6 -0
  21. data/infrastructure/.brpm +2 -0
  22. data/infrastructure/config/customer_include.rb +26 -0
  23. data/infrastructure/config/server.yml +3 -0
  24. data/infrastructure/log.html +39 -0
  25. data/infrastructure/scripts/backup_database.sh +19 -0
  26. data/infrastructure/scripts/ddns.sh +10 -0
  27. data/infrastructure/scripts/install_brpm.sh +63 -0
  28. data/infrastructure/scripts/maintenance.sh +4 -0
  29. data/infrastructure/scripts/patch_brpm.sh +90 -0
  30. data/infrastructure/scripts/restore_database.sh +33 -0
  31. data/infrastructure/scripts/run_event_handler.cmd +19 -0
  32. data/infrastructure/scripts/run_event_handler.sh +20 -0
  33. data/infrastructure/scripts/run_webhook_receiver.cmd +15 -0
  34. data/infrastructure/scripts/run_webhook_receiver.sh +15 -0
  35. data/infrastructure/silent_install_options_4.6.txt +93 -0
  36. data/infrastructure/silent_install_options_upgrade_4.6.txt +92 -0
  37. data/infrastructure/smtp_settings.rb +42 -0
  38. data/lib/brpm_auto.rb +358 -0
  39. data/lib/brpm_script_executor.rb +80 -0
  40. data/lib/logging/brpm_logger.rb +39 -0
  41. data/lib/logging/logger_base.rb +36 -0
  42. data/lib/logging/simple_logger.rb +27 -0
  43. data/lib/module_installer.rb +483 -0
  44. data/lib/params/all_params.rb +80 -0
  45. data/lib/params/integration_settings.rb +27 -0
  46. data/lib/params/params.rb +174 -0
  47. data/lib/params/params_base.rb +81 -0
  48. data/lib/params/request_params.rb +38 -0
  49. data/lib/rest_api.rb +155 -0
  50. data/lib/semaphore.rb +79 -0
  51. data/lib/utilities.rb +317 -0
  52. data/lib/version_control/git.rb +192 -0
  53. data/lib/version_control/svn.rb +221 -0
  54. data/lib/write_to.rb +1 -0
  55. data/tests/all_params_spec.rb +116 -0
  56. data/tests/brpm_auto_spec.rb +84 -0
  57. data/tests/customer_include/config/customer_include.rb +10 -0
  58. data/tests/customer_include/config/server.yml +3 -0
  59. data/tests/customer_include_spec.rb +29 -0
  60. data/tests/gemspec_spec.rb +11 -0
  61. data/tests/module_installer_spec.rb +46 -0
  62. data/tests/params_spec.rb +172 -0
  63. data/tests/request_params_spec.rb +86 -0
  64. data/tests/server_yaml_spec.rb +19 -0
  65. data/tests/spec_helper.rb +64 -0
  66. data/to_be_migrated/brpm_framework.rb +88 -0
  67. data/to_be_migrated/customer_include_default.rb +25 -0
  68. data/to_be_migrated/local_jirb.rb +15 -0
  69. data/to_be_migrated/resource_framework.rb +211 -0
  70. data/transport/dispatch_baa.rb +355 -0
  71. data/transport/dispatch_base.rb +345 -0
  72. data/transport/dispatch_nsh.rb +248 -0
  73. data/transport/dispatch_ssh.rb +154 -0
  74. data/transport/transport_baa.rb +1095 -0
  75. data/transport/transport_nsh.rb +359 -0
  76. data/transport/transport_ssh.rb +220 -0
  77. metadata +204 -0
@@ -0,0 +1,483 @@
1
+ require "rubygems"
2
+ require 'rubygems/package'
3
+ require 'rubygems/installer'
4
+ require "bundler"
5
+
6
+ class ModuleInstaller
7
+ def initialize
8
+ set_gem_home
9
+ end
10
+
11
+ def install_module(module_name_or_path, module_version = nil)
12
+ brpm_content_spec = nil
13
+
14
+ if true #TODO: support no-gem-install mode
15
+ module_spec, specs = install_gem(module_name_or_path, module_version)
16
+
17
+ brpm_content_spec = specs.find { |spec| spec.name == "brpm_content" } if specs
18
+
19
+ install_bundle_if_necessary(module_spec)
20
+ else
21
+ module_name = module_name_or_path
22
+ module_spec = Gem::Specification.find_by_name(module_name)
23
+ end
24
+
25
+ if brpm_installed_locally?
26
+ BrpmAuto.log "A BRPM instance is installed locally"
27
+
28
+ if brpm_content_spec
29
+ if brpm_content_spec.version > Gem::Version.new(BrpmAuto.version) or ! File.exist?(get_symlink_path)
30
+ BrpmAuto.log "Updating the symlink to brpm_content-latest..."
31
+ update_symlink_to_brpm_content(brpm_content_spec.gem_dir)
32
+ end
33
+
34
+ if brpm_content_spec.version > Gem::Version.new(BrpmAuto.version) or ! File.exist?("#{ENV["BRPM_HOME"]}/automation_results/log.html")
35
+ BrpmAuto.log "Copying the log.html file to te automation_results directory..."
36
+ FileUtils.cp("#{brpm_content_spec.gem_dir}/infrastructure/log.html", "#{ENV["BRPM_HOME"]}/automation_results")
37
+ end
38
+ end
39
+
40
+ BrpmAuto.log "Preparing the connectivity to BRPM..."
41
+ if prepare_brpm_connection
42
+ BrpmAuto.log "Creating an automation error for '******** ERROR ********' if one doesn't exist yet..."
43
+ create_automation_error_if_not_exists("******** ERROR ********")
44
+
45
+ module_friendly_name = get_module_friendly_name(module_spec)
46
+ BrpmAuto.log "Creating an automation category for #{module_friendly_name} if one doesn't exist yet..."
47
+ create_automation_category_if_not_exists(module_friendly_name)
48
+
49
+ BrpmAuto.log "Retrieving the integration servers..."
50
+ integration_servers = @brpm_rest_client.get_project_servers
51
+
52
+ BrpmAuto.log "Installing the automation script wrappers in the local BRPM instance..."
53
+ failed_scripts = each_auto_script_wrapper(module_spec.gem_dir) do |auto_script_path, automation_type|
54
+ BrpmAuto.log "Installing automation script wrapper for script #{auto_script_path}..."
55
+ install_auto_script_wrapper(auto_script_path, automation_type, module_spec.name, module_friendly_name, integration_servers)
56
+ end
57
+
58
+ if failed_scripts.size > 0
59
+ return false
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def uninstall_module(module_name, module_version)
66
+ if brpm_installed_locally?
67
+ BrpmAuto.log "A BRPM instance is installed locally"
68
+
69
+ BrpmAuto.log "Preparing the connectivity to BRPM..."
70
+ if prepare_brpm_connection
71
+ version_req = Gem::Requirement.create(Gem::Version.new(module_version))
72
+ module_spec = Gem::Specification.find_by_name(module_name, version_req)
73
+
74
+ module_friendly_name = get_module_friendly_name(module_spec)
75
+
76
+ BrpmAuto.log "Uninstalling the automation script wrappers in the local BRPM instance..."
77
+ failed_scripts = each_auto_script_wrapper(module_spec.gem_dir) do |auto_script_path, automation_type|
78
+ BrpmAuto.log "Uninstalling automation script wrapper for script #{auto_script_path}..."
79
+ uninstall_auto_script_wrapper(auto_script_path, automation_type, module_friendly_name)
80
+ end
81
+
82
+ if failed_scripts.size > 0
83
+ BrpmAuto.log "Aborting the uninstall."
84
+ return false
85
+ end
86
+
87
+ BrpmAuto.log "Deleting the automation category for #{module_friendly_name}..."
88
+ delete_automation_category(module_friendly_name)
89
+ end
90
+ end
91
+
92
+ BrpmAuto.log "Uninstalling gem #{module_name} #{module_version}..."
93
+ BrpmAuto.log `gem uninstall #{module_name} -v #{module_version} -x`
94
+
95
+ return true
96
+ end
97
+
98
+ def module_installed?(module_name, module_version = nil)
99
+ Gem::Specification.find_by_name(module_name).size > 0
100
+ end
101
+
102
+ private
103
+
104
+ def prepare_brpm_connection
105
+ brpm_file = File.expand_path("~/.brpm")
106
+
107
+ brpm_config = nil
108
+ if File.exists?(brpm_file)
109
+ brpm_config = YAML.load_file(brpm_file)
110
+ end
111
+
112
+ if brpm_config
113
+ unless brpm_config["brpm_url"] and brpm_config["brpm_api_token"]
114
+ BrpmAuto.log "WARNING - Properties brpm_url and/or brpm_api_token don't exist in file ~/.brpm so not installing the automation script wrappers in BRPM. If you want to install them the next time you should add brpm_url and brpm_api_token properties in yaml format in file ~/.brpm."
115
+ return false
116
+ end
117
+ else
118
+ BrpmAuto.log "WARNING - File ~/.brpm doesn't exist so not installing the automation script wrappers in BRPM. If you want to install them the next time you should create this file and add brpm_url and brpm_api_token properties in yaml format."
119
+ return false
120
+ end
121
+
122
+ begin
123
+ BrpmAuto.log "Loading brpm_module_brpm..."
124
+ BrpmAuto.require_module "brpm_module_brpm"
125
+ rescue Gem::GemNotFoundException
126
+ BrpmAuto.log "WARNING - Module brpm_module_brpm is not installed so not installing the automation script wrappers in BRPM."
127
+ return false
128
+ end
129
+
130
+ @brpm_rest_client = BrpmRestClient.new(brpm_config["brpm_url"], brpm_config["brpm_api_token"])
131
+ true
132
+ end
133
+
134
+ def install_gem(module_name_or_path, module_version)
135
+ if module_name_or_path =~ /\.gem$/ and File.file? module_name_or_path
136
+ BrpmAuto.log "Installing gem #{module_name_or_path}#{module_version.nil? ? "" : " " + module_version} from file..."
137
+ require 'rubygems/name_tuple'
138
+ source = Gem::Source::SpecificFile.new module_name_or_path
139
+ module_spec = source.spec
140
+
141
+ gem = source.download module_spec
142
+
143
+ inst = Gem::Installer.new gem
144
+ inst.install
145
+ BrpmAuto.log "Done."
146
+ else
147
+ BrpmAuto.log "Installing gem #{module_name_or_path}#{module_version.nil? ? "" : " " + module_version}..."
148
+ version_req = module_version ? Gem::Requirement.create(Gem::Version.new(module_version)) : Gem::Requirement.default
149
+ specs = Gem.install(module_name_or_path, version_req)
150
+
151
+ BrpmAuto.log "Installed gems:"
152
+ specs.each do |spec|
153
+ BrpmAuto.log " - #{spec.name} #{spec.version}"
154
+ end
155
+
156
+ module_spec = specs.find { |spec| spec.name == module_name_or_path}
157
+ end
158
+
159
+ return module_spec, specs
160
+ end
161
+
162
+ def set_gem_home
163
+ if BrpmAuto.run_from_brpm or BrpmAuto.params.unit_test
164
+ # we need to override the GEM_HOME env var, otherwise the gems will be installed in BRPM's own gemset
165
+ ENV["GEM_HOME"] = BrpmAuto.get_gems_root_path
166
+ Gem.paths = ENV
167
+ end
168
+ end
169
+
170
+ def install_bundle_if_necessary(spec)
171
+ gemfile = File.join(spec.gem_dir, "Gemfile")
172
+ gemfile_lock = File.join(spec.gem_dir, "Gemfile.lock")
173
+
174
+ if File.exists?(gemfile) && File.exists?(gemfile_lock)
175
+ if BrpmAuto.run_from_brpm or BrpmAuto.params.unit_test
176
+ command = "cd #{spec.gem_dir}; export GEM_HOME=#{BrpmAuto.get_gems_root_path}; bundle install"
177
+ else
178
+ command = "cd #{spec.gem_dir}; bundle install"
179
+ end
180
+ BrpmAuto.log "Found a Gemfile.lock so executing command '#{command}'..."
181
+ result = BrpmAuto.execute_shell(command)
182
+
183
+ BrpmAuto.log result["stdout"] if result["stdout"] and !result["stdout"].empty?
184
+ unless result["status"] == 0
185
+ raise result["stderr"]
186
+ end
187
+ end
188
+ end
189
+
190
+ def get_symlink_path
191
+ "#{ENV["GEM_HOME"]}/gems/brpm_content-latest"
192
+ end
193
+
194
+ def update_symlink_to_brpm_content(brpm_content_path)
195
+ new_version_path = brpm_content_path
196
+ symlink_path = get_symlink_path
197
+
198
+ BrpmAuto.log "Linking #{symlink_path} to #{new_version_path}..."
199
+ result = BrpmAuto.execute_shell("ln -sfn #{new_version_path} #{symlink_path}")
200
+ BrpmAuto.log result["stdout"] if result["stdout"] and !result["stdout"].empty?
201
+ unless result["status"] == 0
202
+ raise result["stderr"]
203
+ end
204
+ end
205
+
206
+ def brpm_installed_locally?
207
+ ENV["BRPM_HOME"] and !ENV["BRPM_HOME"].empty?
208
+ end
209
+
210
+ def get_module_friendly_name(module_spec)
211
+ module_config = YAML.load_file("#{module_spec.gem_dir}/config.yml")
212
+
213
+ module_config["name"] || "#{module_spec.name.sub("brpm_module_", "").capitalize}"
214
+ end
215
+
216
+ def create_automation_error_if_not_exists(automation_error)
217
+ list_item = @brpm_rest_client.get_list_item_by_name("AutomationErrors", automation_error)
218
+
219
+ unless list_item
220
+ BrpmAuto.log "Automation error #{automation_error} doesn't exist yet, so creating it now..."
221
+ list_item = {}
222
+ list_item["list_id"] = @brpm_rest_client.get_list_by_name("AutomationErrors")["id"]
223
+ list_item["value_text"] = automation_error
224
+ @brpm_rest_client.create_list_item_from_hash(list_item)
225
+ end
226
+ end
227
+
228
+ def create_automation_category_if_not_exists(module_friendly_name)
229
+ list_item = @brpm_rest_client.get_list_item_by_name("AutomationCategory", module_friendly_name)
230
+
231
+ unless list_item
232
+ BrpmAuto.log "Automation category #{module_friendly_name} doesn't exist yet, so creating it now..."
233
+ list_item = {}
234
+ list_item["list_id"] = @brpm_rest_client.get_list_by_name("AutomationCategory")["id"]
235
+ list_item["value_text"] = module_friendly_name
236
+ @brpm_rest_client.create_list_item_from_hash(list_item)
237
+ end
238
+ end
239
+
240
+ def delete_automation_category(module_friendly_name)
241
+ #TODO: first check if there are any manually created automation scripts added to this automation category. If yes then dont delete it
242
+ list_item = @brpm_rest_client.get_list_item_by_name("AutomationCategory", module_friendly_name)
243
+
244
+ if list_item
245
+ @brpm_rest_client.archive_list_item(list_item["id"])
246
+ @brpm_rest_client.delete_list_item(list_item["id"])
247
+ end
248
+ end
249
+
250
+ def each_auto_script_wrapper(module_path)
251
+ # For resource automations
252
+ resource_automation_dir = "#{module_path}/resource_automations"
253
+ resource_automation_script_paths = Dir.glob("#{resource_automation_dir}/*.rb")
254
+
255
+ failed_scripts = []
256
+ if resource_automation_script_paths.size > 0
257
+ resource_automation_script_paths.each do |auto_script_path|
258
+ begin
259
+ yield auto_script_path, "ResourceAutomation"
260
+ rescue Exception => e
261
+ failed_scripts << auto_script_path
262
+ BrpmAuto.log_error(e)
263
+ BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
264
+ end
265
+ end
266
+ end
267
+
268
+ # For automations
269
+ automation_dir = "#{module_path}/automations"
270
+ automation_script_paths = Dir.glob("#{automation_dir}/*.rb")
271
+
272
+ if automation_script_paths.size > 0
273
+ automation_script_paths.each do |auto_script_path|
274
+ begin
275
+ yield auto_script_path, "Automation"
276
+ rescue Exception => e
277
+ failed_scripts << auto_script_path
278
+ BrpmAuto.log_error(e)
279
+ BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
280
+ end
281
+ end
282
+ end
283
+
284
+ if failed_scripts.size > 0
285
+ BrpmAuto.log "The following wrapper scripts generated errors:"
286
+ failed_scripts.each do |failed_script|
287
+ BrpmAuto.log " - #{failed_script}"
288
+ end
289
+ end
290
+
291
+ failed_scripts
292
+ end
293
+
294
+ def install_auto_script_wrapper(auto_script_path, automation_type, module_name, module_friendly_name, integration_servers)
295
+ auto_script_config = get_auto_script_config(auto_script_path, module_friendly_name)
296
+
297
+ BrpmAuto.log "Installing the wrapper script for automation script #{auto_script_config["name"]} (friendly name: #{auto_script_config["friendly_name"]}, automation type: #{automation_type})..."
298
+
299
+ if automation_type == "Automation"
300
+ add_version_params(auto_script_config["params"])
301
+ end
302
+
303
+ wrapper_script_content = ""
304
+ if auto_script_config["params"].size > 0
305
+ params_content = auto_script_config["params"].to_yaml
306
+ params_content.sub!("---\n", "") # Remove the yaml document separator line
307
+ params_content.gsub!(/(^)+/, "# ") # Prepend "# " to each line
308
+ wrapper_script_content = "###\n#{params_content}###\n"
309
+ end
310
+
311
+ integration_server = nil
312
+ if auto_script_config["integration_server_type"]
313
+ server_type_id = @brpm_rest_client.get_id_for_project_server_type(auto_script_config["integration_server_type"])
314
+ if server_type_id
315
+ integration_server = integration_servers.find { |integr_server| integr_server["server_name_id"] == server_type_id } #TODO: support multiple integration servers of same type (user should pick one)
316
+ else
317
+ integration_server = integration_servers.find { |integr_server| integr_server["name"].include?(auto_script_config["integration_server_type"]) } #TODO: support multiple integration servers of same type (user should pick one)
318
+ end
319
+
320
+ if integration_server
321
+ wrapper_script_content += "\n"
322
+ wrapper_script_content += get_integration_server_template(integration_server["id"], integration_server["name"], auto_script_config["integration_server_type"])
323
+ else
324
+ BrpmAuto.log "WARNING - An integration server of type #{auto_script_config["integration_server_type"]} (or that has #{auto_script_config["integration_server_type"]} in its name if the integration server type is not supported) doesn't exist so not setting the integration server in the wrapper script."
325
+ end
326
+ end
327
+
328
+ wrapper_script_content += "\n"
329
+ wrapper_script_content += get_script_executor_template(automation_type, module_name, auto_script_config["name"])
330
+
331
+ script = {}
332
+ script["name"] = auto_script_config["friendly_name"]
333
+ script["description"] = auto_script_config["description"] || ""
334
+ script["automation_type"] = automation_type
335
+ script["automation_category"] = module_friendly_name
336
+ script["content"] = wrapper_script_content
337
+ script["integration_id"] = integration_server["id"] if auto_script_config["integration_server_type"] and integration_server
338
+ if automation_type == "ResourceAutomation"
339
+ script["unique_identifier"] = auto_script_config["resource_id"] || auto_script_config["name"]
340
+ script["render_as"] = auto_script_config["render_as"] || "List"
341
+ end
342
+
343
+ script = @brpm_rest_client.create_or_update_script(script)
344
+
345
+ if script["aasm_state"] == "draft"
346
+ BrpmAuto.log "Updating the aasm_state of the wrapper script to 'pending'..."
347
+ script_to_update = {}
348
+ script_to_update["id"] = script["id"]
349
+ script_to_update["aasm_state"] = "pending"
350
+ script = @brpm_rest_client.update_script_from_hash(script_to_update)
351
+ end
352
+
353
+ if script["aasm_state"] == "pending"
354
+ BrpmAuto.log "Updating the aasm_state of the wrapper script to 'released'..."
355
+ script_to_update = {}
356
+ script_to_update["id"] = script["id"]
357
+ script_to_update["aasm_state"] = "released"
358
+ script = @brpm_rest_client.update_script_from_hash(script_to_update)
359
+ end
360
+
361
+ if script["aasm_state"] == "retired"
362
+ BrpmAuto.log "Updating the aasm_state of the wrapper script to 'released'..."
363
+ script_to_update = {}
364
+ script_to_update["id"] = script["id"]
365
+ script_to_update["aasm_state"] = "released"
366
+ script = @brpm_rest_client.update_script_from_hash(script_to_update)
367
+ end
368
+ end
369
+
370
+ def uninstall_auto_script_wrapper(auto_script_path, automation_type, module_friendly_name)
371
+ auto_script_config = get_auto_script_config(auto_script_path, module_friendly_name)
372
+
373
+ script = @brpm_rest_client.get_script_by_name(auto_script_config["friendly_name"])
374
+
375
+ unless script
376
+ BrpmAuto.log "Script #{auto_script_config["friendly_name"]} was not found, probably already deleted. Continuing."
377
+ return
378
+ end
379
+
380
+ if script["aasm_state"] == "released"
381
+ BrpmAuto.log "Updating the aasm_state of the wrapper script to 'retired'..."
382
+ script_to_update = {}
383
+ script_to_update["id"] = script["id"]
384
+ script_to_update["aasm_state"] = "retired"
385
+ script = @brpm_rest_client.update_script_from_hash(script_to_update)
386
+ end
387
+
388
+ if script["aasm_state"] == "retired"
389
+ BrpmAuto.log "Updating the aasm_state of the wrapper script to 'archived'..."
390
+ script_to_update = {}
391
+ script_to_update["id"] = script["id"]
392
+ script_to_update["aasm_state"] = "archived"
393
+ script = @brpm_rest_client.update_script_from_hash(script_to_update)
394
+ end
395
+
396
+ if script["aasm_state"] == "archived_state"
397
+ BrpmAuto.log "Deleting the wrapper script..."
398
+ @brpm_rest_client.delete_script(script["id"])
399
+ else
400
+ raise "Script #{auto_script_config["friendly_name"]} is not in aasm_state 'archived' so unable to delete it."
401
+ end
402
+ end
403
+
404
+ def get_auto_script_config(auto_script_path, module_friendly_name)
405
+ auto_script_name = File.basename(auto_script_path, ".rb")
406
+ auto_script_config_path = "#{File.dirname(auto_script_path)}/#{auto_script_name}.meta"
407
+
408
+ auto_script_config_content = File.exists?(auto_script_config_path) ? File.read(auto_script_config_path) : ""
409
+ auto_script_config = YAML.load(auto_script_config_content) || {}
410
+ auto_script_config["params"] = auto_script_config["params"] || {}
411
+ auto_script_config["name"] = File.basename(auto_script_path, ".rb")
412
+ auto_script_config["friendly_name"] = auto_script_config["friendly_name"] || "#{module_friendly_name} - #{auto_script_config["name"].gsub("_", " ").capitalize}"
413
+
414
+ auto_script_config
415
+ end
416
+
417
+ def add_version_params(auto_script_params)
418
+ include_position_attribute = false
419
+ if auto_script_params.find { |_, param| param.has_key?("position") }
420
+ include_position_attribute = true
421
+ end
422
+
423
+ input_params = auto_script_params.select do |_, param|
424
+ type = param["type"] || "in"
425
+ ! type.start_with?("out")
426
+ end
427
+
428
+ module_version_param = {}
429
+ module_version_param["name"] = "module_version"
430
+ module_version_param["required"] = false
431
+ module_version_param["position"] = "A#{input_params.size + 1}:C#{input_params.size + 1}" if include_position_attribute
432
+ auto_script_params["module_version"] = module_version_param
433
+
434
+ framework_version_param = {}
435
+ framework_version_param["name"] = "framework_version"
436
+ framework_version_param["required"] = false
437
+ framework_version_param["position"] = "A#{input_params.size + 2}:C#{input_params.size + 2}" if include_position_attribute
438
+ auto_script_params["framework_version"] = framework_version_param
439
+ end
440
+
441
+ def get_integration_server_template(integration_server_id, integration_server_name, integration_server_type)
442
+ <<EOR
443
+ #=== #{integration_server_type} Integration Server: #{integration_server_name} ===#
444
+ # [integration_id=#{integration_server_id}]
445
+ #=== End ===#
446
+
447
+ params["SS_integration_dns"] = SS_integration_dns
448
+ params["SS_integration_username"] = SS_integration_username
449
+ params["SS_integration_password_enc"] = SS_integration_password_enc
450
+ params["SS_integration_details"] = YAML.load(SS_integration_details)
451
+ EOR
452
+ end
453
+
454
+ def get_script_executor_template(automation_type, module_name, auto_script_name)
455
+ template = <<EOR
456
+ params["direct_execute"] = "true"
457
+
458
+ params["framework_version"] = nil if params["framework_version"].empty?
459
+ params["module_version"] = nil if params["module_version"].empty?
460
+
461
+ require "\#{ENV["BRPM_CONTENT_HOME"] || "\#{ENV["BRPM_HOME"]}/modules"}/gems/brpm_content-\#{params["framework_version"] || "latest"}/modules/framework/brpm_script_executor.rb"
462
+ EOR
463
+
464
+ if automation_type == "Automation"
465
+
466
+ template += <<EOR
467
+
468
+ BrpmScriptExecutor.execute_automation_script("#{module_name}", "#{auto_script_name}", params)
469
+ EOR
470
+
471
+ elsif automation_type == "ResourceAutomation"
472
+
473
+ template += <<EOR
474
+
475
+ def execute(script_params, parent_id, offset, max_records)
476
+ BrpmScriptExecutor.execute_resource_automation_script("#{module_name}", "#{auto_script_name}", script_params, parent_id, offset, max_records)
477
+ end
478
+ EOR
479
+ end
480
+
481
+ template
482
+ end
483
+ end
@@ -0,0 +1,80 @@
1
+ class AllParams < ParamsBase
2
+ def initialize(params, request_params)
3
+ @params = params
4
+ @request_params = request_params
5
+
6
+ # this class acts as a virtual hash on top of two real hashes for all write-related methods (which need to be overriden)
7
+ # the values from both hashes are also synchronized in this class to avoid having to override all read-related methods
8
+ self.merge!(@params)
9
+ self.merge!(@request_params)
10
+ end
11
+
12
+ alias :super_add :[]=
13
+
14
+ def []=(key,val)
15
+ raise RuntimeError.new("This is a virtual hash based on two physical hashes, use the add method instead.")
16
+ end
17
+
18
+ #TODO: refactor out the where functionality
19
+ # Test if a param is present
20
+ #
21
+ # ==== Attributes
22
+ #
23
+ # * +key_name+ - key to look for
24
+ # * +where+ - if true returns the hash where the key was found
25
+ #
26
+ # ==== Returns
27
+ #
28
+ # * the param hash name if where=true, otherwise true/false
29
+ def present?(key_name, where = false)
30
+ ans = nil
31
+ ans = "params" if @params.has_key?(key_name)
32
+ ans = "json" if @request_params.has_key?(key_name)
33
+ where ? ans : !ans.nil?
34
+ end
35
+
36
+ def present_json?(key_name)
37
+ @request_params.has_key?(key_name)
38
+ end
39
+
40
+ def present_local?(key_name)
41
+ @params.has_key?(key_name)
42
+ end
43
+
44
+ # Adds a key/value to the params
45
+ #
46
+ # ==== Attributes
47
+ #
48
+ # * +key_name+ - key name
49
+ # * +value+ - value to assign
50
+ # * +store+ - place to add params or json (default = params)
51
+ #
52
+ # ==== Returns
53
+ #
54
+ # * value added
55
+ def add(key, value, store = "params")
56
+ if store == "params"
57
+ @params[key] = value
58
+ elsif store == "json"
59
+ @request_params[key] = value
60
+ end
61
+ super_add(key, value)
62
+ end
63
+
64
+ # Adds a key/value to the params if not found
65
+ #
66
+ # ==== Attributes
67
+ #
68
+ # * +key_name+ - key name
69
+ # * +value+ - value to assign
70
+ # * +store+ - place to add params or json (default = params)
71
+ #
72
+ # ==== Returns
73
+ #
74
+ # * value of key
75
+ def find_or_add(key_name, value, store = "params")
76
+ ans = get(key_name)
77
+ add(key_name, value, store) if ans == ""
78
+ ans == "" ? value : ans
79
+ end
80
+ end
@@ -0,0 +1,27 @@
1
+ class IntegrationSettings
2
+ attr_reader :project_server
3
+ attr_reader :project_server_id
4
+ attr_reader :dns
5
+ attr_reader :username
6
+ attr_reader :password
7
+ attr_reader :details
8
+
9
+ def initialize(dns, username, password, details = nil, project_server = nil, project_server_id = nil)
10
+ @dns = dns
11
+ @username = username
12
+ @password = password
13
+ @details = details
14
+ @project_server = project_server
15
+ @project_server_id = project_server_id
16
+ end
17
+
18
+ def to_params
19
+ params = {}
20
+ params["SS_integration_dns"] = @dns
21
+ params["SS_integration_username"] = @username
22
+ params["SS_integration_password"] = @password
23
+ params["SS_integration_details"] = @details
24
+
25
+ params
26
+ end
27
+ end