brpm_content 0.1.16

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 (267) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +38 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +21 -0
  6. data/README.md +308 -0
  7. data/Rakefile +24 -0
  8. data/TO_BE_MIGRATED.txt +8 -0
  9. data/architecture.png +0 -0
  10. data/brpm_content.gemspec +31 -0
  11. data/customers/demo/integrations/brpm/process_event_handler_event.rb +183 -0
  12. data/customers/demo/integrations/jenkins/spec/api/applications_spec.rb +89 -0
  13. data/customers/demo/integrations/jenkins/spec/api/plans_spec.rb +69 -0
  14. data/customers/demo/integrations/jenkins/spec/api/requests_spec.rb +57 -0
  15. data/customers/demo/integrations/jenkins/spec/spec_helper.rb +33 -0
  16. data/customers/demo/integrations/jira/process_webhook_event.rb +33 -0
  17. data/customers/demo/jira_mappings.rb +29 -0
  18. data/infrastructure/integrations/event_handler.rb +62 -0
  19. data/infrastructure/integrations/webhook_receiver.rb +49 -0
  20. data/infrastructure/shell_scripts/backup_database.sh +19 -0
  21. data/infrastructure/shell_scripts/create_bl_package.sh +34 -0
  22. data/infrastructure/shell_scripts/create_release_request.sh +34 -0
  23. data/infrastructure/shell_scripts/ddns.sh +10 -0
  24. data/infrastructure/shell_scripts/install_brpm.sh +63 -0
  25. data/infrastructure/shell_scripts/install_content_module.sh +66 -0
  26. data/infrastructure/shell_scripts/install_content_repo.sh +60 -0
  27. data/infrastructure/shell_scripts/install_module_from_gem.sh +80 -0
  28. data/infrastructure/shell_scripts/maintenance.sh +4 -0
  29. data/infrastructure/shell_scripts/patch_brpm.sh +90 -0
  30. data/infrastructure/shell_scripts/restore_database.sh +33 -0
  31. data/infrastructure/shell_scripts/run_event_handler.cmd +16 -0
  32. data/infrastructure/shell_scripts/run_event_handler.sh +20 -0
  33. data/infrastructure/shell_scripts/run_webhook_receiver.cmd +14 -0
  34. data/infrastructure/shell_scripts/run_webhook_receiver.sh +15 -0
  35. data/infrastructure/shell_scripts/update_content_repo.sh +21 -0
  36. data/infrastructure/silent_install_options_4.6.txt +93 -0
  37. data/infrastructure/silent_install_options_upgrade_4.6.txt +92 -0
  38. data/infrastructure/smtp_settings.rb +42 -0
  39. data/infrastructure/ssh_script_header_additions.rb +21 -0
  40. data/modules/ansible/automations/execute_role.rb +3 -0
  41. data/modules/ansible/automations/execute_role.txt +12 -0
  42. data/modules/ansible/config.yml +5 -0
  43. data/modules/ansible/lib/ansible.rb +41 -0
  44. data/modules/atrium_orchestrator/automations/execute_workflow.rb +12 -0
  45. data/modules/atrium_orchestrator/automations/execute_workflow.txt +25 -0
  46. data/modules/atrium_orchestrator/automations/reserve_ip_address.rb +22 -0
  47. data/modules/atrium_orchestrator/automations/reserve_ip_address.txt +21 -0
  48. data/modules/atrium_orchestrator/config.yml +7 -0
  49. data/modules/atrium_orchestrator/lib/ao_soap_client.rb +94 -0
  50. data/modules/bladelogic/automations/create_package.rb +29 -0
  51. data/modules/bladelogic/automations/create_package.txt +26 -0
  52. data/modules/bladelogic/automations/deploy_package.rb +137 -0
  53. data/modules/bladelogic/automations/deploy_package.txt +53 -0
  54. data/modules/bladelogic/config.yml +7 -0
  55. data/modules/bladelogic/lib/bl_rest/bsa_rest_client.rb +65 -0
  56. data/modules/bladelogic/lib/bl_soap/blpackage.rb +43 -0
  57. data/modules/bladelogic/lib/bl_soap/bsa_soap_base.rb +118 -0
  58. data/modules/bladelogic/lib/bl_soap/bsa_soap_client.rb +34 -0
  59. data/modules/bladelogic/lib/bl_soap/compliance_job.rb +155 -0
  60. data/modules/bladelogic/lib/bl_soap/deploy_job.rb +48 -0
  61. data/modules/bladelogic/lib/bl_soap/depot_group.rb +47 -0
  62. data/modules/bladelogic/lib/bl_soap/job.rb +376 -0
  63. data/modules/bladelogic/lib/bl_soap/job_group.rb +72 -0
  64. data/modules/bladelogic/lib/bl_soap/job_management.rb +22 -0
  65. data/modules/bladelogic/lib/bl_soap/job_result.rb +12 -0
  66. data/modules/bladelogic/lib/bl_soap/job_run.rb +271 -0
  67. data/modules/bladelogic/lib/bl_soap/login.rb +47 -0
  68. data/modules/bladelogic/lib/bl_soap/nsh_script_job.rb +14 -0
  69. data/modules/bladelogic/lib/bl_soap/patch_catalog.rb +178 -0
  70. data/modules/bladelogic/lib/bl_soap/patch_remediation_job.rb +137 -0
  71. data/modules/bladelogic/lib/bl_soap/patching_job.rb +250 -0
  72. data/modules/bladelogic/lib/bl_soap/server.rb +12 -0
  73. data/modules/bladelogic/lib/bl_soap/template.rb +13 -0
  74. data/modules/bladelogic/lib/bl_soap/utility.rb +99 -0
  75. data/modules/bladelogic/resource_automations/select_job.rb +33 -0
  76. data/modules/bladelogic/resource_automations/select_job.txt +15 -0
  77. data/modules/bladelogic/tests/create_package_spec.rb +28 -0
  78. data/modules/bladelogic/tests/deploy_package_spec.rb +23 -0
  79. data/modules/bladelogic/tests/spec_helper.rb +82 -0
  80. data/modules/brpm/automations/create_release_from_excel.rb +34 -0
  81. data/modules/brpm/automations/create_release_from_excel.txt +5 -0
  82. data/modules/brpm/automations/create_release_request.rb +100 -0
  83. data/modules/brpm/automations/create_release_request.txt +5 -0
  84. data/modules/brpm/automations/create_request.rb +73 -0
  85. data/modules/brpm/automations/create_request.txt +23 -0
  86. data/modules/brpm/automations/promote_request.rb +197 -0
  87. data/modules/brpm/automations/promote_request.txt +24 -0
  88. data/modules/brpm/automations/select_application_version.rb +22 -0
  89. data/modules/brpm/automations/select_application_version.txt +17 -0
  90. data/modules/brpm/automations/select_component_version.rb +12 -0
  91. data/modules/brpm/automations/select_component_version.txt +5 -0
  92. data/modules/brpm/automations/select_request_template.rb +6 -0
  93. data/modules/brpm/automations/select_request_template.txt +13 -0
  94. data/modules/brpm/automations/wait_for_step_in_other_request.rb +11 -0
  95. data/modules/brpm/automations/wait_for_step_in_other_request.txt +13 -0
  96. data/modules/brpm/automations/wait_till_promoted_request_is_completed.rb +9 -0
  97. data/modules/brpm/automations/wait_till_promoted_request_is_completed.txt +5 -0
  98. data/modules/brpm/config.yml +6 -0
  99. data/modules/brpm/lib/brpm_request.rb +207 -0
  100. data/modules/brpm/lib/brpm_rest.rb +312 -0
  101. data/modules/brpm/lib/brpm_rest_client.rb +1501 -0
  102. data/modules/brpm/resource_automations/select_application.rb +16 -0
  103. data/modules/brpm/resource_automations/select_application.txt +5 -0
  104. data/modules/brpm/resource_automations/select_environment.rb +14 -0
  105. data/modules/brpm/resource_automations/select_environment.txt +5 -0
  106. data/modules/brpm/resource_automations/select_request_template.rb +16 -0
  107. data/modules/brpm/resource_automations/select_request_template.txt +5 -0
  108. data/modules/brpm/resource_automations/select_step_in_request.rb +33 -0
  109. data/modules/brpm/resource_automations/select_step_in_request.txt +5 -0
  110. data/modules/brpm/sample_applications/e-finance.json +0 -0
  111. data/modules/brpm/tests/create_release_request_spec.rb +66 -0
  112. data/modules/brpm/tests/create_request_spec.rb +84 -0
  113. data/modules/brpm/tests/select_application_version_spec.rb +47 -0
  114. data/modules/brpm/tests/spec_helper.rb +63 -0
  115. data/modules/docker_brpm/automations/create_brpm_instance_input_params.rb +10 -0
  116. data/modules/docker_brpm/automations/create_brpm_instance_input_params.txt +17 -0
  117. data/modules/docker_brpm/automations/create_brpm_instance_one_shot.rb +60 -0
  118. data/modules/docker_brpm/automations/create_brpm_instance_one_shot.txt +14 -0
  119. data/modules/docker_brpm/automations/create_brpm_instance_show_results.rb +23 -0
  120. data/modules/docker_brpm/automations/create_brpm_instance_show_results.txt +13 -0
  121. data/modules/docker_brpm/automations/create_database.rb +24 -0
  122. data/modules/docker_brpm/automations/create_database.txt +3 -0
  123. data/modules/docker_brpm/automations/create_environment.rb +14 -0
  124. data/modules/docker_brpm/automations/create_environment.txt +3 -0
  125. data/modules/docker_brpm/automations/create_image_for_application.rb +23 -0
  126. data/modules/docker_brpm/automations/create_image_for_application.txt +6 -0
  127. data/modules/docker_brpm/automations/create_image_for_brpm_application_input_params.rb +7 -0
  128. data/modules/docker_brpm/automations/create_image_for_brpm_application_input_params.txt +8 -0
  129. data/modules/docker_brpm/automations/create_image_for_brpm_database_creator_input_params.rb +7 -0
  130. data/modules/docker_brpm/automations/create_image_for_brpm_database_creator_input_params.txt +8 -0
  131. data/modules/docker_brpm/automations/create_image_for_database_creator.rb +21 -0
  132. data/modules/docker_brpm/automations/create_image_for_database_creator.txt +6 -0
  133. data/modules/docker_brpm/automations/create_installed_component_for_application.rb +11 -0
  134. data/modules/docker_brpm/automations/create_installed_component_for_application.txt +3 -0
  135. data/modules/docker_brpm/automations/create_installed_component_for_database.rb +7 -0
  136. data/modules/docker_brpm/automations/create_installed_component_for_database.txt +3 -0
  137. data/modules/docker_brpm/automations/create_installed_component_for_database_creator.rb +8 -0
  138. data/modules/docker_brpm/automations/create_installed_component_for_database_creator.txt +3 -0
  139. data/modules/docker_brpm/automations/create_installed_component_for_utilities.rb +7 -0
  140. data/modules/docker_brpm/automations/create_installed_component_for_utilities.txt +3 -0
  141. data/modules/docker_brpm/automations/create_version_tags_for_component_in_all_envs.rb +13 -0
  142. data/modules/docker_brpm/automations/create_version_tags_for_component_in_all_envs.txt +6 -0
  143. data/modules/docker_brpm/automations/delete_brpm_instance.rb +38 -0
  144. data/modules/docker_brpm/automations/delete_brpm_instance.txt +8 -0
  145. data/modules/docker_brpm/automations/execute_test_run_in_jenkins.rb +43 -0
  146. data/modules/docker_brpm/automations/execute_test_run_in_jenkins.txt +13 -0
  147. data/modules/docker_brpm/automations/execute_test_run_in_jenkins_show_results.rb +5 -0
  148. data/modules/docker_brpm/automations/execute_test_run_in_jenkins_show_results.txt +9 -0
  149. data/modules/docker_brpm/automations/launch_create_image_for_brpm_application_request.rb +27 -0
  150. data/modules/docker_brpm/automations/launch_create_image_for_brpm_application_request.txt +3 -0
  151. data/modules/docker_brpm/automations/launch_test_run_request.rb +30 -0
  152. data/modules/docker_brpm/automations/launch_test_run_request.txt +14 -0
  153. data/modules/docker_brpm/automations/release_brpm_input_params.rb +7 -0
  154. data/modules/docker_brpm/automations/release_brpm_input_params.txt +8 -0
  155. data/modules/docker_brpm/automations/run_application_container.rb +27 -0
  156. data/modules/docker_brpm/automations/run_application_container.txt +3 -0
  157. data/modules/docker_brpm/automations/run_database_container.rb +14 -0
  158. data/modules/docker_brpm/automations/run_database_container.txt +3 -0
  159. data/modules/docker_brpm/automations/stop_application_container.rb +11 -0
  160. data/modules/docker_brpm/automations/stop_application_container.txt +3 -0
  161. data/modules/docker_brpm/automations/stop_database_container.rb +11 -0
  162. data/modules/docker_brpm/automations/stop_database_container.txt +3 -0
  163. data/modules/docker_brpm/automations/test_rest_api.rb +18 -0
  164. data/modules/docker_brpm/automations/test_rest_api.txt +3 -0
  165. data/modules/docker_brpm/automations/upgrade_database.rb +19 -0
  166. data/modules/docker_brpm/automations/upgrade_database.txt +8 -0
  167. data/modules/docker_brpm/config.yml +8 -0
  168. data/modules/docker_brpm/lib/docker.rb +39 -0
  169. data/modules/docker_brpm/lib/git.rb +16 -0
  170. data/modules/docker_brpm/sample_applications/dockerizedbrpm.json +0 -0
  171. data/modules/email/automations/send_notification.rb +48 -0
  172. data/modules/email/automations/send_notification.txt +27 -0
  173. data/modules/email/config.yml +6 -0
  174. data/modules/framework/automations/direct_execute.rb +10 -0
  175. data/modules/framework/automations/direct_execute.txt +16 -0
  176. data/modules/framework/automations/install_module.rb +13 -0
  177. data/modules/framework/automations/install_module.txt +16 -0
  178. data/modules/framework/bin/brpm_install +106 -0
  179. data/modules/framework/bin/event_handler +63 -0
  180. data/modules/framework/bin/webhook_receiver +49 -0
  181. data/modules/framework/brpm_auto.rb +307 -0
  182. data/modules/framework/brpm_framework.rb +88 -0
  183. data/modules/framework/brpm_script_executor.rb +146 -0
  184. data/modules/framework/config.yml +7 -0
  185. data/modules/framework/config/customer_include.rb +26 -0
  186. data/modules/framework/config/server.yml +3 -0
  187. data/modules/framework/customer_include_default.rb +25 -0
  188. data/modules/framework/lib/logging/brpm_logger.rb +39 -0
  189. data/modules/framework/lib/logging/logger_base.rb +36 -0
  190. data/modules/framework/lib/logging/simple_logger.rb +27 -0
  191. data/modules/framework/lib/params/all_params.rb +80 -0
  192. data/modules/framework/lib/params/integration_settings.rb +27 -0
  193. data/modules/framework/lib/params/params.rb +172 -0
  194. data/modules/framework/lib/params/params_base.rb +81 -0
  195. data/modules/framework/lib/params/request_params.rb +38 -0
  196. data/modules/framework/lib/resource_framework.rb +211 -0
  197. data/modules/framework/lib/rest_api.rb +155 -0
  198. data/modules/framework/lib/semaphore.rb +79 -0
  199. data/modules/framework/lib/utilities.rb +317 -0
  200. data/modules/framework/lib/version_control/git.rb +192 -0
  201. data/modules/framework/lib/version_control/svn.rb +221 -0
  202. data/modules/framework/log.html +39 -0
  203. data/modules/framework/tests/all_params_spec.rb +116 -0
  204. data/modules/framework/tests/brpm_auto_spec.rb +84 -0
  205. data/modules/framework/tests/customer_include/config/customer_include.rb +10 -0
  206. data/modules/framework/tests/customer_include/config/server.yml +3 -0
  207. data/modules/framework/tests/customer_include_spec.rb +29 -0
  208. data/modules/framework/tests/local_jirb.rb +15 -0
  209. data/modules/framework/tests/params_spec.rb +172 -0
  210. data/modules/framework/tests/request_params_spec.rb +86 -0
  211. data/modules/framework/tests/server_yaml_spec.rb +19 -0
  212. data/modules/framework/tests/spec_helper.rb +42 -0
  213. data/modules/framework/transport/dispatch_baa.rb +355 -0
  214. data/modules/framework/transport/dispatch_base.rb +345 -0
  215. data/modules/framework/transport/dispatch_nsh.rb +248 -0
  216. data/modules/framework/transport/dispatch_ssh.rb +154 -0
  217. data/modules/framework/transport/transport_baa.rb +1095 -0
  218. data/modules/framework/transport/transport_nsh.rb +359 -0
  219. data/modules/framework/transport/transport_ssh.rb +220 -0
  220. data/modules/framework/write_to.rb +1 -0
  221. data/modules/jenkins/automations/create_release.rb +4 -0
  222. data/modules/jenkins/automations/create_release.txt +23 -0
  223. data/modules/jenkins/automations/f2_downloadJenkinsArtifact.rb +126 -0
  224. data/modules/jenkins/config.yml +7 -0
  225. data/modules/jenkins/lib/jenkins.rb +300 -0
  226. data/modules/jenkins/resource_automations/f2_rsc_jenkinsJobs.rb +58 -0
  227. data/modules/jira/automations/add_comment.rb +4 -0
  228. data/modules/jira/automations/add_comment.txt +23 -0
  229. data/modules/jira/automations/create_release.rb +4 -0
  230. data/modules/jira/automations/create_release.txt +23 -0
  231. data/modules/jira/automations/delete_release.rb +4 -0
  232. data/modules/jira/automations/delete_release.txt +23 -0
  233. data/modules/jira/automations/transition_issue.rb +4 -0
  234. data/modules/jira/automations/transition_issue.txt +23 -0
  235. data/modules/jira/automations/transition_issues_for_request.rb +29 -0
  236. data/modules/jira/automations/transition_issues_for_request.txt +20 -0
  237. data/modules/jira/automations/transition_issues_for_run.rb +26 -0
  238. data/modules/jira/automations/transition_issues_for_run.txt +20 -0
  239. data/modules/jira/automations/update_release.rb +4 -0
  240. data/modules/jira/automations/update_release.txt +26 -0
  241. data/modules/jira/config.yml +7 -0
  242. data/modules/jira/lib/jira_rest_client.rb +185 -0
  243. data/modules/jira/tests/create_read_update_delete_release_spec.rb +39 -0
  244. data/modules/jira/tests/spec_helper.rb +39 -0
  245. data/modules/jira/tests/transition_issue_spec.rb +32 -0
  246. data/modules/patch_process_management/automations/execute_job/script.rb +105 -0
  247. data/modules/patch_process_management/automations/execute_job/wrapper.txt +39 -0
  248. data/modules/patch_process_management/automations/patch_analysis/script.rb +107 -0
  249. data/modules/patch_process_management/automations/patch_analysis/wrapper.txt +33 -0
  250. data/modules/patch_process_management/automations/patch_readiness/script.rb +89 -0
  251. data/modules/patch_process_management/automations/patch_readiness/wrapper.txt +33 -0
  252. data/modules/patch_process_management/automations/patch_remediation/script.rb +217 -0
  253. data/modules/patch_process_management/automations/patch_remediation/wrapper.txt +40 -0
  254. data/modules/patch_process_management/config.yml +10 -0
  255. data/modules/teamcity/automations/trigger_build.rb +4 -0
  256. data/modules/teamcity/automations/trigger_build.txt +14 -0
  257. data/modules/teamcity/config.yml +7 -0
  258. data/modules/teamcity/lib/teamcity_rest_client.rb +17 -0
  259. data/modules/teamcity/tests/spec_helper.rb +34 -0
  260. data/modules/teamcity/tests/trigger_build_spec.rb +27 -0
  261. data/modules/windows/automations/deploy_directory_over_windows_shares/script.rb +87 -0
  262. data/modules/windows/automations/deploy_directory_over_windows_shares/wrapper.txt +29 -0
  263. data/modules/windows/automations/deploy_file_over_windows_shares/script.rb +31 -0
  264. data/modules/windows/automations/deploy_file_over_windows_shares/wrapper.txt +24 -0
  265. data/modules/windows/config.yml +6 -0
  266. data/modules/windows/lib/samba.rb +29 -0
  267. metadata +397 -0
@@ -0,0 +1,33 @@
1
+ ###
2
+ # job_status:
3
+ # name: Job Status
4
+ # type: out-text
5
+ # position: A1:C1
6
+ # results_summary:
7
+ # name: Summary
8
+ # type: out-text
9
+ # position: A2:E2
10
+ # results:
11
+ # name: Checks
12
+ # type: out-table
13
+ # position: A3:E3
14
+ # results_link:
15
+ # name: Link
16
+ # type: out-file
17
+ # position: A4:E4
18
+ ###
19
+
20
+ #=== BMC Application Automation Integration Server: BladeLogic on C4 ===#
21
+ # [integration_id=6]
22
+ #=== End ===#
23
+
24
+ require "#{params["SS_script_support_path"]}/git_repos/brpm_content/modules/framework/brpm_script_executor.rb"
25
+
26
+ params["direct_execute"] = true
27
+
28
+ params["SS_integration_dns"] = SS_integration_dns
29
+ params["SS_integration_username"] = SS_integration_username
30
+ params["SS_integration_password_enc"] = SS_integration_password_enc
31
+ params["SS_integration_details"] = YAML.load(SS_integration_details)
32
+
33
+ BrpmScriptExecutor.execute_automation_script("patch_process_management", "patch_readiness", params)
@@ -0,0 +1,217 @@
1
+ require 'yaml'
2
+ require 'uri'
3
+ require 'base64'
4
+ require 'csv'
5
+ require 'date'
6
+
7
+ def retrieve_results(job, results_full_path, session_id, params)
8
+ BrpmAuto.log("Removing trailing csv files in case this is a re-run...")
9
+ `rm -f #{params["SS_output_dir"]}/*_result.csv`
10
+
11
+ BrpmAuto.log("Retrieving the job run id from the job run key...")
12
+ job_run_id = JobRun.get_deploy_job_max_run_id(session_id, {:db_key_of_deploy_job => job["db_key"]})
13
+
14
+ BrpmAuto.log("Retrieving the results from the job run id...")
15
+ return_data = Utility.export_deploy_script_run(session_id, {
16
+ :job_group_name => job["group_name"],
17
+ :job_name => job["name"],
18
+ :run_id => job_run_id,
19
+ :export_file_name => results_full_path})
20
+ results_content = Base64.decode64(return_data)
21
+
22
+ File.open(results_full_path, "w") do |f|
23
+ f.puts(results_content)
24
+ end
25
+
26
+ BrpmAuto.log("Parsing the results...")
27
+ # As this export contains "embedded" double quotes it is not possible to parse it with the CSV library
28
+ log_lines = results_content.split("\n")[6..-1]
29
+ log_lines.select! { |log| !log.start_with?("run level log,") }
30
+
31
+ logs = log_lines.map do |log_line|
32
+ log_items = log_line.split(",",7)
33
+
34
+ # 0: server
35
+ # 1: phase
36
+ # 2: attempt
37
+ # 3: date part 1
38
+ # 4: date part 2
39
+ # 5: Info - Warning - Error
40
+ # 6: message
41
+
42
+ if log_items.count < 7 # Some lines are broken in two because of end-of-lines appearing in the message field...
43
+ nil
44
+ else
45
+ log_items[6] = log_items[6].tr(",,","")
46
+ log_items[3] = DateTime.parse("#{log_items[3]},#{log_items[4]}")
47
+
48
+ log_items
49
+ end
50
+ end
51
+
52
+ logs.compact # removing the possible nils from the array
53
+ end
54
+
55
+ brpm_rest_client = BrpmRestClient.new
56
+ params = BrpmAuto.params
57
+ request_params = BrpmAuto.request_params
58
+
59
+ raise "No job key found for a Patch Analysis job. A Patch Analysis job must be executed before a Patch Remediation job." if !request_params.has_key?("patch_analysis_job_run_key") or request_params["patch_analysis_job_run_key"].nil?
60
+
61
+ bsa_base_url = params["SS_integration_dns"]
62
+ bsa_username = params["SS_integration_username"]
63
+ bsa_password = decrypt_string_with_prefix(params["SS_integration_password_enc"])
64
+ bsa_role = params["SS_integration_details"]["role"]
65
+
66
+ phase = params["phase_list"].index(params["phase"].strip)
67
+
68
+ patch_remediation_depot_group = "/#{params["application"].downcase}/remediation"
69
+
70
+ patch_remediation_job_root_path = "/#{params["application"].downcase}/remediation"
71
+ patch_remediation_job_runs_path = "#{patch_remediation_job_root_path}/runs"
72
+ patch_remediation_job_group = "#{phase}-job-#{params["request_id"]}-#{Time.now.strftime("%Y%m%d%H%M%S")}"
73
+ patch_remediation_job_name = "#{phase}-job"
74
+ patch_remediation_job_run_path = "#{patch_remediation_job_runs_path}/#{patch_remediation_job_group}"
75
+
76
+ patch_remediation_job_template_group = patch_remediation_job_root_path
77
+ patch_remediation_job_template_name = "#{phase}-job-template"
78
+
79
+ BrpmAuto.log("Logging on to Bladelogic instance #{BsaSoapClient.get_url} with user #{BsaSoapClient.get_username} and role #{BsaSoapClient.get_role}...")
80
+ session_id = BsaSoapClient.login
81
+
82
+ BrpmAuto.log("Retrieving the job key of the Patch Remediation #{phase} job template...")
83
+ job_template_db_key = DeployJob.get_dbkey_by_group_and_name(session_id, {:group_name => patch_remediation_job_template_group, :job_name => patch_remediation_job_template_name})
84
+
85
+ BrpmAuto.log("Creating a new folder for the Patch Remediation #{phase} job...")
86
+ JobGroup.create_group_with_parent_name(session_id, {:group_name => patch_remediation_job_group, :parent_group_name => patch_remediation_job_runs_path})
87
+
88
+ unless phase == "commit"
89
+ wait_time = 30
90
+ start_time = Time.now + wait_time
91
+ BrpmAuto.log("Scheduling the #{phase} phase of the Patch Remediation #{phase} job template to start in #{wait_time} seconds (at #{start_time.strftime("%Y-%m-%d %H:%M:%S")})...")
92
+ DeployJob.set_phase_schedule_by_dbkey(session_id, {
93
+ :job_run_key => job_template_db_key,
94
+ :simulate_type => "AtTime",
95
+ :simulate_date => start_time.strftime("%Y-%m-%d %H:%M:%S"),
96
+ :stage_type => "AfterPreviousPhase",
97
+ :stage_date => "",
98
+ :commit_type => phase == "commit" ? "AfterPreviousPhase" : "NotScheduled",
99
+ :commit_date => ""})
100
+ end
101
+
102
+ BrpmAuto.log("Creating the Patch Remediation job #{patch_remediation_job_runs_path}/#{patch_remediation_job_group}/#{patch_remediation_job_name} for Patch Analysis job run key #{request_params["patch_analysis_job_run_key"]}...")
103
+ job_db_key = PatchRemediationJob.create_remediation_job_with_deploy_opts(session_id, {
104
+ :remediation_name => patch_remediation_job_name,
105
+ :job_group_name => patch_remediation_job_run_path,
106
+ :pa_job_run_key => request_params["patch_analysis_job_run_key"],
107
+ :pck_prefix => patch_remediation_job_name,
108
+ :depot_group_name => patch_remediation_depot_group,
109
+ :dep_job_group_name => patch_remediation_job_run_path,
110
+ :deploy_job_key => job_template_db_key})
111
+
112
+ BrpmAuto.log("Executing the Patch Remediation job...")
113
+ job_run_key = PatchRemediationJob.execute_job_and_wait(session_id, {:job_key => job_db_key})
114
+
115
+ unless phase =="commit"
116
+ BrpmAuto.log("Polling the Patch Remediation job until it is finished...")
117
+ begin
118
+ sleep(wait_time)
119
+ is_still_running = JobRun.get_job_run_is_running_by_run_key(session_id, {:job_run_key => job_run_key})
120
+ end while is_still_running
121
+ BrpmAuto.log("The Patch Remediation job has finished.")
122
+ end
123
+
124
+ BrpmAuto.log("Checking if the Patch Remediation job finished successfully...")
125
+ had_errors = JobRun.get_job_run_had_errors(session_id, {:job_run_key => job_run_key})
126
+
127
+ had_errors ? BrpmAuto.log("WARNING: The Patch Remediation job had errors!") : BrpmAuto.log("The Patch Remediation job had no errors.")
128
+ pack_response "job_status", had_errors ? "The job had errors" : "The job ran successfully"
129
+
130
+ raise "The Patch Remediation job had errors!" if had_errors
131
+
132
+ BrpmAuto.log("Retrieving all the generated jobs from group #{patch_remediation_job_run_path}...")
133
+ jobs = Job.list_all_by_group(session_id, {:group_name => patch_remediation_job_run_path})
134
+
135
+ job_names = jobs.split("\n")
136
+ job_names = job_names.reject{|job| job == patch_remediation_job_name or job.include?(" batch deploy ")}.sort
137
+
138
+ BrpmAuto.log("Retrieving the job run keys of the generated jobs...")
139
+ jobs = {}
140
+ job_names.each do |job_name|
141
+ jobs[job_name] = {}
142
+ jobs[job_name]["name"] = job_name
143
+ jobs[job_name]["group_name"] = patch_remediation_job_run_path
144
+
145
+ BrpmAuto.log("Retrieving the job run key of job #{job_name}...")
146
+ jobs[job_name]["db_key"] = DeployJob.get_dbkey_by_group_and_name(session_id, {:group_name => patch_remediation_job_run_path, :job_name => job_name})
147
+ jobs[job_name]["run_key"] = JobRun.find_last_run_key_by_job_key(session_id, {:job_key => jobs[job_name]["db_key"]})
148
+ end
149
+
150
+ BrpmAuto.log("Polling the generated jobs until they are finished...")
151
+ running_jobs = jobs
152
+ begin
153
+ finished_jobs = {}
154
+ running_jobs.each do |key, job|
155
+ is_still_running = JobRun.get_job_run_is_running_by_run_key(session_id, {:job_run_key => job["run_key"]})
156
+
157
+ unless is_still_running
158
+ BrpmAuto.log("The job with run key #{job["run_key"]} has finished, retrieving its results...")
159
+ job["results"] = retrieve_results(job, "#{params["SS_output_dir"]}/#{job["name"]}_result.csv", session_id, params)
160
+
161
+ finished_jobs[key] = job
162
+ end
163
+ end
164
+
165
+ running_jobs = running_jobs.reject { |key, job| finished_jobs.has_key?(key) }
166
+
167
+ sleep(10) if running_jobs.count > 0
168
+ end while running_jobs.count > 0
169
+
170
+ BrpmAuto.log("Processing the job results into one view...")
171
+ logs = jobs.values.reduce([]){ |results,job| results + job["results"] }
172
+
173
+ logs = logs.sort_by { |log| [log[0], log[1], log[3]] }
174
+
175
+ servers_with_logs = logs.group_by { |log| log[0] }
176
+
177
+ failed_servers_with_logs = servers_with_logs.select { |key, value| value.select{|log| log[5] == "Error" }.count > 0}
178
+
179
+ pack_response "results_summary", "#{servers_with_logs.count - failed_servers_with_logs.count}/#{servers_with_logs.count} servers were successful"
180
+
181
+ table_data = [[' ', 'Server', 'Simulate', 'Stage', 'Commit']]
182
+ counter = 0
183
+ servers_with_logs.each do |key, logs|
184
+ server = key
185
+
186
+ phase_with_logs = logs.group_by { |log| log[1] }
187
+
188
+ if phase_with_logs.has_key?("Simulate")
189
+ simulate = phase_with_logs["Simulate"].any? { |log| log[5] == "Error" } ? "Error" : "Succeeded"
190
+ else
191
+ simulate = ""
192
+ end
193
+ if phase_with_logs.has_key?("Stage")
194
+ stage = phase_with_logs["Stage"].any? { |log| log[5] == "Error" } ? "Error" : "Succeeded"
195
+ else
196
+ stage = ""
197
+ end
198
+ if phase_with_logs.has_key?("Commit")
199
+ commit = phase_with_logs["Commit"].any? { |log| log[5] == "Error" } ? "Error" : "Succeeded"
200
+ else
201
+ commit = ""
202
+ end
203
+
204
+ counter += 1
205
+ table_data << [counter, server, simulate, stage, commit]
206
+ end
207
+
208
+ pack_response "results", { :perPage => 10, :totalItems => table_data.count - 1, :data => table_data }
209
+
210
+ BrpmAuto.log("Concatenating the result files into one file...")
211
+ results_full_path = "#{params["SS_output_dir"]}/all_jobs_result.csv"
212
+
213
+ `cat #{params["SS_output_dir"]}/*_result.csv >> #{results_full_path}`
214
+
215
+ pack_response "results_link", results_full_path
216
+
217
+ raise "The Patch Remediation job had errors!" if had_errors
@@ -0,0 +1,40 @@
1
+ ###
2
+ # phase:
3
+ # name: Phase
4
+ # type: in-list-single
5
+ # list_pairs: stage,Stage|commit,Stage (if necessary) + Commit
6
+ # position: A1:C1
7
+ # job_status:
8
+ # name: Job Status
9
+ # type: out-text
10
+ # position: A1:C1
11
+ # results_summary:
12
+ # name: Summary
13
+ # type: out-text
14
+ # position: A2:E2
15
+ # results:
16
+ # name: Installs
17
+ # type: out-table
18
+ # position: A3:E3
19
+ # results_link:
20
+ # name: Link
21
+ # type: out-file
22
+ # position: A4:E4
23
+ ###
24
+
25
+ #=== BMC Application Automation Integration Server: BladeLogic on C4 ===#
26
+ # [integration_id=6]
27
+ #=== End ===#
28
+
29
+ require "#{params["SS_script_support_path"]}/git_repos/brpm_content/modules/framework/brpm_script_executor.rb"
30
+
31
+ params["direct_execute"] = true
32
+
33
+ params["SS_integration_dns"] = SS_integration_dns
34
+ params["SS_integration_username"] = SS_integration_username
35
+ params["SS_integration_password_enc"] = SS_integration_password_enc
36
+ params["SS_integration_details"] = YAML.load(SS_integration_details)
37
+
38
+ params["phase_list"] = { "stage" => "Stage", "commit" => "Stage (if necessary) + Commit" }
39
+
40
+ BrpmScriptExecutor.execute_automation_script("patch_process_management", "patch_remediation", params)
@@ -0,0 +1,10 @@
1
+ dependencies:
2
+ - brpm
3
+ - bladelogic
4
+ - atrium_orchestrator
5
+
6
+ integration_servers:
7
+ - BladeLogic
8
+ - AtriumOrchestrator
9
+
10
+ version: 1.0.0
@@ -0,0 +1,4 @@
1
+ params = BrpmAuto.params
2
+
3
+ BrpmAuto.log "Triggering a new build..."
4
+ TeamCityRestClient.new.trigger_build(params["application"], params["component"])
@@ -0,0 +1,14 @@
1
+ #=== BMC Application Automation Integration Server: TeamCity ===#
2
+ # [integration_id=xxxxxxxx]
3
+ #=== End ===#
4
+
5
+ require "#{params["SS_script_support_path"]}/git_repos/brpm_content/modules/framework/brpm_script_executor.rb"
6
+
7
+ params["direct_execute"] = "true"
8
+
9
+ params["SS_integration_dns"] = SS_integration_dns
10
+ params["SS_integration_username"] = SS_integration_username
11
+ params["SS_integration_password_enc"] = SS_integration_password_enc
12
+ params["SS_integration_details"] = YAML.load(SS_integration_details)
13
+
14
+ BrpmScriptExecutor.execute_automation_script("teamcity", "trigger_build", params)
@@ -0,0 +1,7 @@
1
+ dependencies:
2
+ - brpm
3
+
4
+ integration_servers:
5
+ - TeamCity
6
+
7
+ version: 1.0.0
@@ -0,0 +1,17 @@
1
+ require 'json'
2
+ require 'uri'
3
+
4
+ class TeamcityRestClient
5
+ def initialize(integration_settings = BrpmAuto.integration_settings)
6
+ @url = integration_settings.dns
7
+ @username = integration_settings.username
8
+ @password = integration_settings.password
9
+
10
+ @api_url = "#{@url}/rest/api"
11
+ end
12
+
13
+ def trigger_build(application, component)
14
+ data = {:application => application, :component => component}
15
+ Rest.post("#{@api_url}/build", data)["response"]
16
+ end
17
+ end
@@ -0,0 +1,34 @@
1
+ require 'fileutils'
2
+ require_relative "../../framework/brpm_script_executor"
3
+
4
+ def setup_brpm_auto
5
+ FileUtils.mkdir_p "/tmp/brpm_content"
6
+
7
+ BrpmAuto.setup( { "output_dir" => "/tmp/brpm_content" }.merge!(get_integration_params_for_jira) )
8
+
9
+ BrpmAuto.require_module "brpm"
10
+ BrpmAuto.require_module "teamcity"
11
+
12
+ @teamcity_rest_client = TeamcityRestClient.new
13
+ end
14
+
15
+ def get_default_params
16
+ params = {}
17
+ params['also_log_to_console'] = 'true'
18
+
19
+ params['brpm_url'] = 'http://brpm-content.pulsar-it.be:8088/brpm'
20
+ params['brpm_api_token'] = ENV["BRPM_API_TOKEN"]
21
+
22
+ params['output_dir'] = "/tmp/brpm_content"
23
+
24
+ params
25
+ end
26
+
27
+ def get_integration_params_for_teamcity
28
+ params = {}
29
+ params["SS_integration_dns"] = 'http://brpm.pulsar-it.be:6060'
30
+ params["SS_integration_username"] = 'brpm'
31
+ params["SS_integration_password"] = ENV["TEAMCITY_PASSWORD"]
32
+
33
+ params
34
+ end
@@ -0,0 +1,27 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe 'trigger build' do
4
+ before(:all) do
5
+ setup_brpm_auto
6
+ end
7
+
8
+ before(:each) do
9
+ #cleanup_release('TeamCity tests - release 1')
10
+ end
11
+
12
+ describe '' do
13
+ it 'should trigger a build in TeamCity' do
14
+ params = get_default_params
15
+ params = params.merge(get_integration_params_for_teamcity)
16
+
17
+ params["application"] = 'E-Finance'
18
+ params["application"] = 'EF - java calculation engine'
19
+ BrpmScriptExecutor.execute_automation_script("teamcity", "trigger_build", params)
20
+
21
+ #verify the tests: check if the build was triggered succesfully
22
+ #build = @teamcity_rest_client.get_build(...)
23
+ #expect(build).not_to be_nil
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,87 @@
1
+ require "windows/lib/samba"
2
+ require 'fileutils'
3
+
4
+ params = BrpmAuto.params
5
+
6
+ raise "Repo directory is not provided" if params["repo_directory"].empty?
7
+ repo_directory = BrpmAuto.substitute_tokens(params["repo_directory"])
8
+
9
+ raise "Repo directory is not provided" if params["repo_directory"].empty?
10
+ target_server_directory = BrpmAuto.substitute_tokens(params["target_server_directory"])
11
+
12
+ temp_directory = "#{params["SS_output_dir"]}/package"
13
+
14
+ FileUtils.rm_rf(temp_directory) if File.exists?(temp_directory)
15
+ Dir.mkdir(temp_directory)
16
+
17
+ if params["SS_integration_dns"].nil?
18
+ repo_server_name = params["repo_server_name"]
19
+ repo_server_share = params["repo_server_share"]
20
+ repo_server_username = params["repo_server_username"]
21
+ repo_server_password = params["repo_server_password"]
22
+ else
23
+ repo_server_name = params["SS_integration_dns"]
24
+ repo_server_share = params["SS_integration_details"]["share"]
25
+ repo_server_username = params["SS_integration_username"]
26
+ repo_server_password = decrypt_string_with_prefix(params["SS_integration_password_enc"]) unless params["SS_integration_password_enc"].empty?
27
+ end
28
+
29
+ BrpmAuto.log("Getting directory #{repo_directory} from the repo...")
30
+ smbclient_get_directory(
31
+ repo_server_name,
32
+ repo_server_share,
33
+ repo_server_username,
34
+ repo_server_password,
35
+ repo_directory,
36
+ temp_directory
37
+ )
38
+
39
+ unless params["param_substitution_file_list"].empty?
40
+ BrpmAuto.log("Substituting params in the indicated files...")
41
+ file_paths = params["param_substitution_file_list"].split(";")
42
+ file_paths.each do|file_path|
43
+ file_absolute_path = "#{temp_directory}/#{file_path}"
44
+ unless File.exists?(file_absolute_path)
45
+ BrpmAuto.log("File #{file_absolute_path} doesn't exist, continuing...")
46
+ next
47
+ end
48
+
49
+ BrpmAuto.log("Substituting params in file #{file_path}...")
50
+ file_content = File.read(file_absolute_path)
51
+ substituted_file_content = BrpmAuto.substitute_tokens(file_content)
52
+ File.open(file_absolute_path, "w") {|file| file.puts substituted_file_content}
53
+ end
54
+ end
55
+
56
+ unless params["exclude_file_list"].empty?
57
+ BrpmAuto.log("Excluding the indicated files...")
58
+ file_paths = params["exclude_file_list"].split(";")
59
+ file_paths.each do|file_path|
60
+ file_absolute_path = "#{temp_directory}/#{file_path}"
61
+ if File.exists?(file_absolute_path)
62
+ BrpmAuto.log("Deleting file #{file_path}...")
63
+ file_content = File.delete(file_absolute_path)
64
+ else
65
+ BrpmAuto.log("File #{file_absolute_path} doesn't exist, continuing...")
66
+ next
67
+ end
68
+ end
69
+ end
70
+
71
+ BrpmAuto.log("Getting the list of target servers...")
72
+ BrpmAuto.log("Found #{BrpmAuto.params.servers.count} servers.")
73
+
74
+ BrpmAuto.params.servers.each do |server|
75
+ BrpmAuto.log("Putting directory #{repo_directory} onto server #{server[0]} (//#{server[1]["ip_address"]}/#{server[1]["deploy_share_name"]})...")
76
+ smbclient_put_directory(
77
+ server[1]["ip_address"],
78
+ server[1]["deploy_share_name"],
79
+ server[1]["deploy_share_username"],
80
+ server[1]["deploy_share_password"],
81
+ target_server_directory,
82
+ temp_directory
83
+ )
84
+ end
85
+
86
+ BrpmAuto.log("Cleaning up the directory locally...")
87
+ FileUtils.rm_rf(temp_directory)