brpm_content 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +38 -0
- data/.travis.yml +14 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +308 -0
- data/Rakefile +24 -0
- data/TO_BE_MIGRATED.txt +8 -0
- data/architecture.png +0 -0
- data/brpm_content.gemspec +31 -0
- data/customers/demo/integrations/brpm/process_event_handler_event.rb +183 -0
- data/customers/demo/integrations/jenkins/spec/api/applications_spec.rb +89 -0
- data/customers/demo/integrations/jenkins/spec/api/plans_spec.rb +69 -0
- data/customers/demo/integrations/jenkins/spec/api/requests_spec.rb +57 -0
- data/customers/demo/integrations/jenkins/spec/spec_helper.rb +33 -0
- data/customers/demo/integrations/jira/process_webhook_event.rb +33 -0
- data/customers/demo/jira_mappings.rb +29 -0
- data/infrastructure/integrations/event_handler.rb +62 -0
- data/infrastructure/integrations/webhook_receiver.rb +49 -0
- data/infrastructure/shell_scripts/backup_database.sh +19 -0
- data/infrastructure/shell_scripts/create_bl_package.sh +34 -0
- data/infrastructure/shell_scripts/create_release_request.sh +34 -0
- data/infrastructure/shell_scripts/ddns.sh +10 -0
- data/infrastructure/shell_scripts/install_brpm.sh +63 -0
- data/infrastructure/shell_scripts/install_content_module.sh +66 -0
- data/infrastructure/shell_scripts/install_content_repo.sh +60 -0
- data/infrastructure/shell_scripts/install_module_from_gem.sh +80 -0
- data/infrastructure/shell_scripts/maintenance.sh +4 -0
- data/infrastructure/shell_scripts/patch_brpm.sh +90 -0
- data/infrastructure/shell_scripts/restore_database.sh +33 -0
- data/infrastructure/shell_scripts/run_event_handler.cmd +16 -0
- data/infrastructure/shell_scripts/run_event_handler.sh +20 -0
- data/infrastructure/shell_scripts/run_webhook_receiver.cmd +14 -0
- data/infrastructure/shell_scripts/run_webhook_receiver.sh +15 -0
- data/infrastructure/shell_scripts/update_content_repo.sh +21 -0
- data/infrastructure/silent_install_options_4.6.txt +93 -0
- data/infrastructure/silent_install_options_upgrade_4.6.txt +92 -0
- data/infrastructure/smtp_settings.rb +42 -0
- data/infrastructure/ssh_script_header_additions.rb +21 -0
- data/modules/ansible/automations/execute_role.rb +3 -0
- data/modules/ansible/automations/execute_role.txt +12 -0
- data/modules/ansible/config.yml +5 -0
- data/modules/ansible/lib/ansible.rb +41 -0
- data/modules/atrium_orchestrator/automations/execute_workflow.rb +12 -0
- data/modules/atrium_orchestrator/automations/execute_workflow.txt +25 -0
- data/modules/atrium_orchestrator/automations/reserve_ip_address.rb +22 -0
- data/modules/atrium_orchestrator/automations/reserve_ip_address.txt +21 -0
- data/modules/atrium_orchestrator/config.yml +7 -0
- data/modules/atrium_orchestrator/lib/ao_soap_client.rb +94 -0
- data/modules/bladelogic/automations/create_package.rb +29 -0
- data/modules/bladelogic/automations/create_package.txt +26 -0
- data/modules/bladelogic/automations/deploy_package.rb +137 -0
- data/modules/bladelogic/automations/deploy_package.txt +53 -0
- data/modules/bladelogic/config.yml +7 -0
- data/modules/bladelogic/lib/bl_rest/bsa_rest_client.rb +65 -0
- data/modules/bladelogic/lib/bl_soap/blpackage.rb +43 -0
- data/modules/bladelogic/lib/bl_soap/bsa_soap_base.rb +118 -0
- data/modules/bladelogic/lib/bl_soap/bsa_soap_client.rb +34 -0
- data/modules/bladelogic/lib/bl_soap/compliance_job.rb +155 -0
- data/modules/bladelogic/lib/bl_soap/deploy_job.rb +48 -0
- data/modules/bladelogic/lib/bl_soap/depot_group.rb +47 -0
- data/modules/bladelogic/lib/bl_soap/job.rb +376 -0
- data/modules/bladelogic/lib/bl_soap/job_group.rb +72 -0
- data/modules/bladelogic/lib/bl_soap/job_management.rb +22 -0
- data/modules/bladelogic/lib/bl_soap/job_result.rb +12 -0
- data/modules/bladelogic/lib/bl_soap/job_run.rb +271 -0
- data/modules/bladelogic/lib/bl_soap/login.rb +47 -0
- data/modules/bladelogic/lib/bl_soap/nsh_script_job.rb +14 -0
- data/modules/bladelogic/lib/bl_soap/patch_catalog.rb +178 -0
- data/modules/bladelogic/lib/bl_soap/patch_remediation_job.rb +137 -0
- data/modules/bladelogic/lib/bl_soap/patching_job.rb +250 -0
- data/modules/bladelogic/lib/bl_soap/server.rb +12 -0
- data/modules/bladelogic/lib/bl_soap/template.rb +13 -0
- data/modules/bladelogic/lib/bl_soap/utility.rb +99 -0
- data/modules/bladelogic/resource_automations/select_job.rb +33 -0
- data/modules/bladelogic/resource_automations/select_job.txt +15 -0
- data/modules/bladelogic/tests/create_package_spec.rb +28 -0
- data/modules/bladelogic/tests/deploy_package_spec.rb +23 -0
- data/modules/bladelogic/tests/spec_helper.rb +82 -0
- data/modules/brpm/automations/create_release_from_excel.rb +34 -0
- data/modules/brpm/automations/create_release_from_excel.txt +5 -0
- data/modules/brpm/automations/create_release_request.rb +100 -0
- data/modules/brpm/automations/create_release_request.txt +5 -0
- data/modules/brpm/automations/create_request.rb +73 -0
- data/modules/brpm/automations/create_request.txt +23 -0
- data/modules/brpm/automations/promote_request.rb +197 -0
- data/modules/brpm/automations/promote_request.txt +24 -0
- data/modules/brpm/automations/select_application_version.rb +22 -0
- data/modules/brpm/automations/select_application_version.txt +17 -0
- data/modules/brpm/automations/select_component_version.rb +12 -0
- data/modules/brpm/automations/select_component_version.txt +5 -0
- data/modules/brpm/automations/select_request_template.rb +6 -0
- data/modules/brpm/automations/select_request_template.txt +13 -0
- data/modules/brpm/automations/wait_for_step_in_other_request.rb +11 -0
- data/modules/brpm/automations/wait_for_step_in_other_request.txt +13 -0
- data/modules/brpm/automations/wait_till_promoted_request_is_completed.rb +9 -0
- data/modules/brpm/automations/wait_till_promoted_request_is_completed.txt +5 -0
- data/modules/brpm/config.yml +6 -0
- data/modules/brpm/lib/brpm_request.rb +207 -0
- data/modules/brpm/lib/brpm_rest.rb +312 -0
- data/modules/brpm/lib/brpm_rest_client.rb +1501 -0
- data/modules/brpm/resource_automations/select_application.rb +16 -0
- data/modules/brpm/resource_automations/select_application.txt +5 -0
- data/modules/brpm/resource_automations/select_environment.rb +14 -0
- data/modules/brpm/resource_automations/select_environment.txt +5 -0
- data/modules/brpm/resource_automations/select_request_template.rb +16 -0
- data/modules/brpm/resource_automations/select_request_template.txt +5 -0
- data/modules/brpm/resource_automations/select_step_in_request.rb +33 -0
- data/modules/brpm/resource_automations/select_step_in_request.txt +5 -0
- data/modules/brpm/sample_applications/e-finance.json +0 -0
- data/modules/brpm/tests/create_release_request_spec.rb +66 -0
- data/modules/brpm/tests/create_request_spec.rb +84 -0
- data/modules/brpm/tests/select_application_version_spec.rb +47 -0
- data/modules/brpm/tests/spec_helper.rb +63 -0
- data/modules/docker_brpm/automations/create_brpm_instance_input_params.rb +10 -0
- data/modules/docker_brpm/automations/create_brpm_instance_input_params.txt +17 -0
- data/modules/docker_brpm/automations/create_brpm_instance_one_shot.rb +60 -0
- data/modules/docker_brpm/automations/create_brpm_instance_one_shot.txt +14 -0
- data/modules/docker_brpm/automations/create_brpm_instance_show_results.rb +23 -0
- data/modules/docker_brpm/automations/create_brpm_instance_show_results.txt +13 -0
- data/modules/docker_brpm/automations/create_database.rb +24 -0
- data/modules/docker_brpm/automations/create_database.txt +3 -0
- data/modules/docker_brpm/automations/create_environment.rb +14 -0
- data/modules/docker_brpm/automations/create_environment.txt +3 -0
- data/modules/docker_brpm/automations/create_image_for_application.rb +23 -0
- data/modules/docker_brpm/automations/create_image_for_application.txt +6 -0
- data/modules/docker_brpm/automations/create_image_for_brpm_application_input_params.rb +7 -0
- data/modules/docker_brpm/automations/create_image_for_brpm_application_input_params.txt +8 -0
- data/modules/docker_brpm/automations/create_image_for_brpm_database_creator_input_params.rb +7 -0
- data/modules/docker_brpm/automations/create_image_for_brpm_database_creator_input_params.txt +8 -0
- data/modules/docker_brpm/automations/create_image_for_database_creator.rb +21 -0
- data/modules/docker_brpm/automations/create_image_for_database_creator.txt +6 -0
- data/modules/docker_brpm/automations/create_installed_component_for_application.rb +11 -0
- data/modules/docker_brpm/automations/create_installed_component_for_application.txt +3 -0
- data/modules/docker_brpm/automations/create_installed_component_for_database.rb +7 -0
- data/modules/docker_brpm/automations/create_installed_component_for_database.txt +3 -0
- data/modules/docker_brpm/automations/create_installed_component_for_database_creator.rb +8 -0
- data/modules/docker_brpm/automations/create_installed_component_for_database_creator.txt +3 -0
- data/modules/docker_brpm/automations/create_installed_component_for_utilities.rb +7 -0
- data/modules/docker_brpm/automations/create_installed_component_for_utilities.txt +3 -0
- data/modules/docker_brpm/automations/create_version_tags_for_component_in_all_envs.rb +13 -0
- data/modules/docker_brpm/automations/create_version_tags_for_component_in_all_envs.txt +6 -0
- data/modules/docker_brpm/automations/delete_brpm_instance.rb +38 -0
- data/modules/docker_brpm/automations/delete_brpm_instance.txt +8 -0
- data/modules/docker_brpm/automations/execute_test_run_in_jenkins.rb +43 -0
- data/modules/docker_brpm/automations/execute_test_run_in_jenkins.txt +13 -0
- data/modules/docker_brpm/automations/execute_test_run_in_jenkins_show_results.rb +5 -0
- data/modules/docker_brpm/automations/execute_test_run_in_jenkins_show_results.txt +9 -0
- data/modules/docker_brpm/automations/launch_create_image_for_brpm_application_request.rb +27 -0
- data/modules/docker_brpm/automations/launch_create_image_for_brpm_application_request.txt +3 -0
- data/modules/docker_brpm/automations/launch_test_run_request.rb +30 -0
- data/modules/docker_brpm/automations/launch_test_run_request.txt +14 -0
- data/modules/docker_brpm/automations/release_brpm_input_params.rb +7 -0
- data/modules/docker_brpm/automations/release_brpm_input_params.txt +8 -0
- data/modules/docker_brpm/automations/run_application_container.rb +27 -0
- data/modules/docker_brpm/automations/run_application_container.txt +3 -0
- data/modules/docker_brpm/automations/run_database_container.rb +14 -0
- data/modules/docker_brpm/automations/run_database_container.txt +3 -0
- data/modules/docker_brpm/automations/stop_application_container.rb +11 -0
- data/modules/docker_brpm/automations/stop_application_container.txt +3 -0
- data/modules/docker_brpm/automations/stop_database_container.rb +11 -0
- data/modules/docker_brpm/automations/stop_database_container.txt +3 -0
- data/modules/docker_brpm/automations/test_rest_api.rb +18 -0
- data/modules/docker_brpm/automations/test_rest_api.txt +3 -0
- data/modules/docker_brpm/automations/upgrade_database.rb +19 -0
- data/modules/docker_brpm/automations/upgrade_database.txt +8 -0
- data/modules/docker_brpm/config.yml +8 -0
- data/modules/docker_brpm/lib/docker.rb +39 -0
- data/modules/docker_brpm/lib/git.rb +16 -0
- data/modules/docker_brpm/sample_applications/dockerizedbrpm.json +0 -0
- data/modules/email/automations/send_notification.rb +48 -0
- data/modules/email/automations/send_notification.txt +27 -0
- data/modules/email/config.yml +6 -0
- data/modules/framework/automations/direct_execute.rb +10 -0
- data/modules/framework/automations/direct_execute.txt +16 -0
- data/modules/framework/automations/install_module.rb +13 -0
- data/modules/framework/automations/install_module.txt +16 -0
- data/modules/framework/bin/brpm_install +106 -0
- data/modules/framework/bin/event_handler +63 -0
- data/modules/framework/bin/webhook_receiver +49 -0
- data/modules/framework/brpm_auto.rb +307 -0
- data/modules/framework/brpm_framework.rb +88 -0
- data/modules/framework/brpm_script_executor.rb +146 -0
- data/modules/framework/config.yml +7 -0
- data/modules/framework/config/customer_include.rb +26 -0
- data/modules/framework/config/server.yml +3 -0
- data/modules/framework/customer_include_default.rb +25 -0
- data/modules/framework/lib/logging/brpm_logger.rb +39 -0
- data/modules/framework/lib/logging/logger_base.rb +36 -0
- data/modules/framework/lib/logging/simple_logger.rb +27 -0
- data/modules/framework/lib/params/all_params.rb +80 -0
- data/modules/framework/lib/params/integration_settings.rb +27 -0
- data/modules/framework/lib/params/params.rb +172 -0
- data/modules/framework/lib/params/params_base.rb +81 -0
- data/modules/framework/lib/params/request_params.rb +38 -0
- data/modules/framework/lib/resource_framework.rb +211 -0
- data/modules/framework/lib/rest_api.rb +155 -0
- data/modules/framework/lib/semaphore.rb +79 -0
- data/modules/framework/lib/utilities.rb +317 -0
- data/modules/framework/lib/version_control/git.rb +192 -0
- data/modules/framework/lib/version_control/svn.rb +221 -0
- data/modules/framework/log.html +39 -0
- data/modules/framework/tests/all_params_spec.rb +116 -0
- data/modules/framework/tests/brpm_auto_spec.rb +84 -0
- data/modules/framework/tests/customer_include/config/customer_include.rb +10 -0
- data/modules/framework/tests/customer_include/config/server.yml +3 -0
- data/modules/framework/tests/customer_include_spec.rb +29 -0
- data/modules/framework/tests/local_jirb.rb +15 -0
- data/modules/framework/tests/params_spec.rb +172 -0
- data/modules/framework/tests/request_params_spec.rb +86 -0
- data/modules/framework/tests/server_yaml_spec.rb +19 -0
- data/modules/framework/tests/spec_helper.rb +42 -0
- data/modules/framework/transport/dispatch_baa.rb +355 -0
- data/modules/framework/transport/dispatch_base.rb +345 -0
- data/modules/framework/transport/dispatch_nsh.rb +248 -0
- data/modules/framework/transport/dispatch_ssh.rb +154 -0
- data/modules/framework/transport/transport_baa.rb +1095 -0
- data/modules/framework/transport/transport_nsh.rb +359 -0
- data/modules/framework/transport/transport_ssh.rb +220 -0
- data/modules/framework/write_to.rb +1 -0
- data/modules/jenkins/automations/create_release.rb +4 -0
- data/modules/jenkins/automations/create_release.txt +23 -0
- data/modules/jenkins/automations/f2_downloadJenkinsArtifact.rb +126 -0
- data/modules/jenkins/config.yml +7 -0
- data/modules/jenkins/lib/jenkins.rb +300 -0
- data/modules/jenkins/resource_automations/f2_rsc_jenkinsJobs.rb +58 -0
- data/modules/jira/automations/add_comment.rb +4 -0
- data/modules/jira/automations/add_comment.txt +23 -0
- data/modules/jira/automations/create_release.rb +4 -0
- data/modules/jira/automations/create_release.txt +23 -0
- data/modules/jira/automations/delete_release.rb +4 -0
- data/modules/jira/automations/delete_release.txt +23 -0
- data/modules/jira/automations/transition_issue.rb +4 -0
- data/modules/jira/automations/transition_issue.txt +23 -0
- data/modules/jira/automations/transition_issues_for_request.rb +29 -0
- data/modules/jira/automations/transition_issues_for_request.txt +20 -0
- data/modules/jira/automations/transition_issues_for_run.rb +26 -0
- data/modules/jira/automations/transition_issues_for_run.txt +20 -0
- data/modules/jira/automations/update_release.rb +4 -0
- data/modules/jira/automations/update_release.txt +26 -0
- data/modules/jira/config.yml +7 -0
- data/modules/jira/lib/jira_rest_client.rb +185 -0
- data/modules/jira/tests/create_read_update_delete_release_spec.rb +39 -0
- data/modules/jira/tests/spec_helper.rb +39 -0
- data/modules/jira/tests/transition_issue_spec.rb +32 -0
- data/modules/patch_process_management/automations/execute_job/script.rb +105 -0
- data/modules/patch_process_management/automations/execute_job/wrapper.txt +39 -0
- data/modules/patch_process_management/automations/patch_analysis/script.rb +107 -0
- data/modules/patch_process_management/automations/patch_analysis/wrapper.txt +33 -0
- data/modules/patch_process_management/automations/patch_readiness/script.rb +89 -0
- data/modules/patch_process_management/automations/patch_readiness/wrapper.txt +33 -0
- data/modules/patch_process_management/automations/patch_remediation/script.rb +217 -0
- data/modules/patch_process_management/automations/patch_remediation/wrapper.txt +40 -0
- data/modules/patch_process_management/config.yml +10 -0
- data/modules/teamcity/automations/trigger_build.rb +4 -0
- data/modules/teamcity/automations/trigger_build.txt +14 -0
- data/modules/teamcity/config.yml +7 -0
- data/modules/teamcity/lib/teamcity_rest_client.rb +17 -0
- data/modules/teamcity/tests/spec_helper.rb +34 -0
- data/modules/teamcity/tests/trigger_build_spec.rb +27 -0
- data/modules/windows/automations/deploy_directory_over_windows_shares/script.rb +87 -0
- data/modules/windows/automations/deploy_directory_over_windows_shares/wrapper.txt +29 -0
- data/modules/windows/automations/deploy_file_over_windows_shares/script.rb +31 -0
- data/modules/windows/automations/deploy_file_over_windows_shares/wrapper.txt +24 -0
- data/modules/windows/config.yml +6 -0
- data/modules/windows/lib/samba.rb +29 -0
- metadata +397 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
describe 'Customer include' do
|
4
|
+
before(:each) do
|
5
|
+
cleanup_request_params
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should get the parameters' do
|
9
|
+
input_params = get_default_params
|
10
|
+
input_params["home_dir"] = "#{File.dirname(__FILE__)}/customer_include"
|
11
|
+
|
12
|
+
BrpmAuto.setup(input_params)
|
13
|
+
|
14
|
+
params = BrpmAuto.params
|
15
|
+
|
16
|
+
expect(params).to have_key("key1")
|
17
|
+
expect(params["key1"]).to eql("value1")
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should execute a custom method' do
|
21
|
+
input_params = get_default_params
|
22
|
+
input_params["home_dir"] = "#{File.dirname(__FILE__)}/customer_include"
|
23
|
+
|
24
|
+
BrpmAuto.setup(input_params)
|
25
|
+
|
26
|
+
expect(defined?(my_custom_method)).to eql("method")
|
27
|
+
expect(my_custom_method("a", "b")).to eql("ab")
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
rlm_base_path = "/Users/brady/Documents/dev_rpm/brpm_brady/brpm/branches/rpm-sustaining/Portal"
|
3
|
+
#rlm_base_path = "/opt/bmc/rlm4"
|
4
|
+
script_support = "#{rlm_base_path}/lib/script_support"
|
5
|
+
persist = "/Users/brady/Documents/dev_rpm/brpm_content/modules/framework"
|
6
|
+
FileUtils.cd script_support, :verbose => true
|
7
|
+
require "#{script_support}/ssh_script_header"
|
8
|
+
|
9
|
+
input_file = "#{rlm_base_path}/public/automation_results/request/Sales-Billing/1304/step_3722/sshinput_6_1433379304.txt"
|
10
|
+
|
11
|
+
script_params = params = load_input_params(input_file)
|
12
|
+
Token = "a56d64cbcffcce91d306670489fa4cf51b53316c"
|
13
|
+
|
14
|
+
require "#{persist}/brpm_framework.rb"
|
15
|
+
@rest = BrpmRest.new(@rpm.params.brpm_url)
|
@@ -0,0 +1,172 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
describe 'Params' do
|
4
|
+
before(:each) do
|
5
|
+
cleanup_request_params
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should get a param' do
|
9
|
+
input_params = get_default_params
|
10
|
+
input_params["key1"] = "value1"
|
11
|
+
|
12
|
+
BrpmAuto.setup(input_params)
|
13
|
+
params = BrpmAuto.params
|
14
|
+
|
15
|
+
expect(params).to have_key("key1")
|
16
|
+
expect(params["key1"]).to eql("value1")
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should resolve a tokenized param' do
|
20
|
+
input_params = get_default_params
|
21
|
+
input_params["key1"] = "value1"
|
22
|
+
input_params["tokenized_key"] = "The value is rpm{key1}!"
|
23
|
+
|
24
|
+
BrpmAuto.setup(input_params)
|
25
|
+
params = BrpmAuto.params
|
26
|
+
|
27
|
+
expect(params).to have_key("tokenized_key")
|
28
|
+
expect(params["tokenized_key"]).to eql("The value is value1!")
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should get a param via its dedicated method' do
|
32
|
+
input_params = get_default_params
|
33
|
+
input_params["request_id"] = "123456"
|
34
|
+
|
35
|
+
BrpmAuto.setup(input_params)
|
36
|
+
params = BrpmAuto.params
|
37
|
+
|
38
|
+
expect(params.request_id).to eql("123456")
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should get the servers' do
|
42
|
+
input_params = get_default_params
|
43
|
+
|
44
|
+
input_params["server1000_name"] = "server1"
|
45
|
+
input_params["server1001_dns"] = "server1.com"
|
46
|
+
input_params["server1002_ip_address"] = "192.168.1.1"
|
47
|
+
input_params["server1003_os_platform"] = "linux"
|
48
|
+
|
49
|
+
input_params["server2000_name"] = "server2"
|
50
|
+
input_params["server2001_dns"] = "server2.com"
|
51
|
+
input_params["server2002_ip_address"] = "192.168.1.2"
|
52
|
+
input_params["server2003_os_platform"] = "linux"
|
53
|
+
|
54
|
+
BrpmAuto.setup(input_params)
|
55
|
+
params = BrpmAuto.params
|
56
|
+
|
57
|
+
expect(params.servers.count).to eql(2)
|
58
|
+
|
59
|
+
expect(params.servers).to have_key("server1")
|
60
|
+
|
61
|
+
expect(params.servers["server1"]).to have_key("dns")
|
62
|
+
expect(params.servers["server1"]["dns"]).to eql("server1.com")
|
63
|
+
expect(params.servers["server1"]).to have_key("ip_address")
|
64
|
+
expect(params.servers["server1"]["ip_address"]).to eql("192.168.1.1")
|
65
|
+
expect(params.servers["server1"]).to have_key("os_platform")
|
66
|
+
expect(params.servers["server1"]["os_platform"]).to eql("linux")
|
67
|
+
|
68
|
+
expect(params.servers).to have_key("server2")
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should get the servers by os platform' do
|
72
|
+
input_params = get_default_params
|
73
|
+
|
74
|
+
input_params["server1000_name"] = "server1"
|
75
|
+
input_params["server1003_os_platform"] = "linux"
|
76
|
+
|
77
|
+
input_params["server2000_name"] = "server2"
|
78
|
+
input_params["server2003_os_platform"] = "linux"
|
79
|
+
|
80
|
+
input_params["server3000_name"] = "server3"
|
81
|
+
input_params["server3003_os_platform"] = "windows"
|
82
|
+
|
83
|
+
BrpmAuto.setup(input_params)
|
84
|
+
params = BrpmAuto.params
|
85
|
+
|
86
|
+
linux_servers = params.get_servers_by_os_platform("linux")
|
87
|
+
expect(linux_servers.count).to eql(2)
|
88
|
+
|
89
|
+
windows_servers = params.get_servers_by_os_platform("windows")
|
90
|
+
expect(windows_servers.count).to eql(1)
|
91
|
+
|
92
|
+
windows_servers = params.get_servers_by_os_platform("xxx")
|
93
|
+
expect(windows_servers.count).to eql(0)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should get a server property' do
|
97
|
+
input_params = get_default_params
|
98
|
+
|
99
|
+
input_params["server1000_name"] = "server1"
|
100
|
+
input_params["server1003_property1"] = "value1"
|
101
|
+
|
102
|
+
BrpmAuto.setup(input_params)
|
103
|
+
params = BrpmAuto.params
|
104
|
+
|
105
|
+
expect(params.get_server_property("server1", "property1")).to eql("value1")
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'should get an encrypted param' do
|
109
|
+
input_params = get_default_params
|
110
|
+
|
111
|
+
#trick it into thinking that it is run from BRPM
|
112
|
+
input_params["run_key"] = "123"
|
113
|
+
input_params["automation_results_dir"] = input_params["output_dir"]
|
114
|
+
input_params["request_id"] = "123"
|
115
|
+
input_params["step_id"] = "123"
|
116
|
+
|
117
|
+
input_params["key1_encrypt"] = "brpm_encrypted"
|
118
|
+
input_params["key2_enc"] = "brpm_encrypted"
|
119
|
+
|
120
|
+
BrpmAuto.setup(input_params)
|
121
|
+
params = BrpmAuto.params
|
122
|
+
|
123
|
+
expect(params["key1"]).to eql("brpm")
|
124
|
+
expect(params["key2"]).to eql("brpm")
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should get a param by the get method' do
|
128
|
+
input_params = get_default_params
|
129
|
+
input_params["key1"] = "value1"
|
130
|
+
|
131
|
+
BrpmAuto.setup(input_params)
|
132
|
+
params = BrpmAuto.params
|
133
|
+
|
134
|
+
expect(params.get("key1")).to eql("value1")
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'should add a param by the add method' do
|
138
|
+
BrpmAuto.setup(get_default_params)
|
139
|
+
params = BrpmAuto.params
|
140
|
+
|
141
|
+
params.add("key1", "value1")
|
142
|
+
|
143
|
+
expect(params["key1"]).to eql("value1")
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'should find or add a param' do
|
147
|
+
input_params = get_default_params
|
148
|
+
input_params["key1"] = "value1"
|
149
|
+
|
150
|
+
BrpmAuto.setup(input_params)
|
151
|
+
params = BrpmAuto.params
|
152
|
+
|
153
|
+
expect(params.find_or_add("key1", "value1-bis")).to eql("value1")
|
154
|
+
expect(params.count).to eql(input_params.count)
|
155
|
+
|
156
|
+
expect(params.find_or_add("key2", "value2")).to eql("value2")
|
157
|
+
expect(params.count).to eql(input_params.count + 1)
|
158
|
+
expect(params["key2"]).to eql("value2")
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'should calculate the REST request id' do
|
162
|
+
input_params = get_default_params
|
163
|
+
input_params["request_id"] = "1234"
|
164
|
+
|
165
|
+
BrpmAuto.setup(input_params)
|
166
|
+
params = BrpmAuto.params
|
167
|
+
|
168
|
+
expect(params.rest_request_id).to eql("234")
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
describe 'Request params' do
|
4
|
+
before(:each) do
|
5
|
+
cleanup_request_params
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should get a param' do
|
9
|
+
input_request_params = {}
|
10
|
+
input_request_params["key1"] = "value1"
|
11
|
+
set_request_params(input_request_params)
|
12
|
+
|
13
|
+
BrpmAuto.setup(get_default_params)
|
14
|
+
request_params = BrpmAuto.request_params
|
15
|
+
|
16
|
+
expect(request_params).to have_key("key1")
|
17
|
+
expect(request_params["key1"]).to eql("value1")
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should resolve a tokenized param' do
|
21
|
+
input_request_params = {}
|
22
|
+
input_request_params["key1"] = "value1"
|
23
|
+
input_request_params["tokenized_key"] = "The value is rpm{key1}!"
|
24
|
+
set_request_params(input_request_params)
|
25
|
+
|
26
|
+
BrpmAuto.setup(get_default_params)
|
27
|
+
request_params = BrpmAuto.request_params
|
28
|
+
|
29
|
+
expect(request_params).to have_key("tokenized_key")
|
30
|
+
expect(request_params["tokenized_key"]).to eql("The value is value1!")
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should get a param by the get method' do
|
34
|
+
input_request_params = {}
|
35
|
+
input_request_params["key1"] = "value1"
|
36
|
+
set_request_params(input_request_params)
|
37
|
+
|
38
|
+
BrpmAuto.setup(get_default_params)
|
39
|
+
request_params = BrpmAuto.request_params
|
40
|
+
|
41
|
+
expect(request_params).to have_key("key1")
|
42
|
+
expect(request_params.get("key1")).to eql("value1")
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should add a param using []=' do
|
46
|
+
BrpmAuto.setup(get_default_params)
|
47
|
+
request_params = BrpmAuto.request_params
|
48
|
+
|
49
|
+
request_params["key1"] = "value1"
|
50
|
+
|
51
|
+
output_request_params = get_request_params
|
52
|
+
|
53
|
+
expect(output_request_params).to have_key("key1")
|
54
|
+
expect(output_request_params["key1"]).to eql("value1")
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should add a param by the add method' do
|
58
|
+
BrpmAuto.setup(get_default_params)
|
59
|
+
request_params = BrpmAuto.request_params
|
60
|
+
|
61
|
+
request_params.add("key1", "value1")
|
62
|
+
|
63
|
+
output_request_params = get_request_params
|
64
|
+
|
65
|
+
expect(output_request_params).to have_key("key1")
|
66
|
+
expect(output_request_params["key1"]).to eql("value1")
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should find or add a param' do
|
70
|
+
input_request_params = {}
|
71
|
+
input_request_params["key1"] = "value1"
|
72
|
+
set_request_params(input_request_params)
|
73
|
+
|
74
|
+
BrpmAuto.setup(get_default_params)
|
75
|
+
request_params = BrpmAuto.request_params
|
76
|
+
|
77
|
+
expect(request_params.find_or_add("key1", "value1-bis")).to eql("value1")
|
78
|
+
expect(request_params.count).to eql(1)
|
79
|
+
|
80
|
+
expect(request_params.find_or_add("key2", "value2")).to eql("value2")
|
81
|
+
expect(request_params.count).to eql(2)
|
82
|
+
expect(request_params["key2"]).to eql("value2")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
describe 'Server yaml' do
|
4
|
+
before(:each) do
|
5
|
+
cleanup_request_params
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should get the parameters' do
|
9
|
+
input_params = get_default_params
|
10
|
+
input_params["home_dir"] = "#{File.dirname(__FILE__)}/customer_include"
|
11
|
+
|
12
|
+
BrpmAuto.setup(input_params)
|
13
|
+
|
14
|
+
params = BrpmAuto.params
|
15
|
+
|
16
|
+
expect(params).to have_key("key2")
|
17
|
+
expect(params["key2"]).to eql("value2")
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require_relative "../brpm_auto"
|
3
|
+
|
4
|
+
FileUtils.mkdir_p "/tmp/brpm_content"
|
5
|
+
|
6
|
+
def setup_brpm_auto
|
7
|
+
BrpmAuto.setup(get_default_params)
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_default_params
|
11
|
+
params = {}
|
12
|
+
params['also_log_to_console'] = 'true'
|
13
|
+
params['output_dir'] = "/tmp/brpm_content"
|
14
|
+
|
15
|
+
params
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_request_params(request_params)
|
19
|
+
File.open("/tmp/brpm_content/request_data.json", "w") do |file|
|
20
|
+
file.puts(request_params.to_json)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_request_params
|
25
|
+
if File.exist?("/tmp/brpm_content/request_data.json")
|
26
|
+
json = File.read("/tmp/brpm_content/request_data.json")
|
27
|
+
JSON.parse(json)
|
28
|
+
else
|
29
|
+
{}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def cleanup_request_params
|
34
|
+
request_params_file = "/tmp/brpm_content/request_data.json"
|
35
|
+
File.delete(request_params_file) if File.exist?(request_params_file)
|
36
|
+
end
|
37
|
+
|
38
|
+
def decrypt_string_with_prefix(input) # mocked method
|
39
|
+
return nil if input.nil? || !input.kind_of?(String)
|
40
|
+
|
41
|
+
input.gsub("_encrypted", "")
|
42
|
+
end
|
@@ -0,0 +1,355 @@
|
|
1
|
+
# dispatch_srun.rb
|
2
|
+
# Module for action dispatch with nsh protocol
|
3
|
+
libDir = File.expand_path(File.dirname(__FILE__))
|
4
|
+
require "#{libDir}/dispatch_base"
|
5
|
+
|
6
|
+
|
7
|
+
class DispatchBAA < DispatchBase
|
8
|
+
# Initialize the class
|
9
|
+
#
|
10
|
+
# ==== Attributes
|
11
|
+
#
|
12
|
+
# * +baa_object+ - handle to an BAA object
|
13
|
+
# * +options+ - hash of options to use, send "output_file" to point to the logging file
|
14
|
+
# * +test_mode+ - true/false to simulate commands instead of running them
|
15
|
+
#
|
16
|
+
def initialize(baa_object, options = {}, compat_options = {})
|
17
|
+
self.extend Utilities
|
18
|
+
if options.has_key?("SS_output_dir")
|
19
|
+
BrpmAuto.log "Load for this class has changed, no longer necessary to send params as 2nd argument"
|
20
|
+
options = compat_options
|
21
|
+
end
|
22
|
+
@baa = baa_object
|
23
|
+
@verbose = get_option(options, "verbose", false)
|
24
|
+
@output_dir = get_param("SS_output_dir")
|
25
|
+
end
|
26
|
+
|
27
|
+
# Packages passed references in BAA using a component template
|
28
|
+
# --- note: artifacts all need to reside on the same server
|
29
|
+
# --- note: end a directory path with a / or it will be treated as a file
|
30
|
+
|
31
|
+
# ==== Attributes
|
32
|
+
#
|
33
|
+
# * +artifact_list+ - array of file/nsh paths
|
34
|
+
# * +group_path+ - path in Blade to store package
|
35
|
+
# * +artifacts+ - array of file/nsh paths
|
36
|
+
# * +options+ - hash of options, includes:
|
37
|
+
# package_name - to override default package name (component_request_id_version),
|
38
|
+
# group_path - to override default group_path (app/version/component),
|
39
|
+
# transfer_properties - hash of properties to transfer
|
40
|
+
# version - to override use of component version
|
41
|
+
#
|
42
|
+
# ==== Returns
|
43
|
+
#
|
44
|
+
# * hash - {package_id, status, template_db_key, stagin_server}
|
45
|
+
def package_artifacts(artifact_list, options = {})
|
46
|
+
version = get_option(options,"version", get_param("step_version"))
|
47
|
+
package_name = get_option(options, "package_name", default_item_name(version))
|
48
|
+
group_path = get_option(options, "group_path", default_group_path(version))
|
49
|
+
transfer_properties = get_option(options, "transfer_properties", {})
|
50
|
+
path_property_name = get_option(options, "BAA_PATH_PROPERTY", "BAA_BASE_PATH")
|
51
|
+
path_property_value = get_option(transfer_properties, path_property_name, nil)
|
52
|
+
path_property = "#{path_property_name}=#{path_property_value}"
|
53
|
+
message_box "Packaging Files via BAA"
|
54
|
+
log "\t StagingPath: #{group_path}"
|
55
|
+
result = {"status" => "ERROR", "group_path" => group_path, "package_name" => package_name}
|
56
|
+
artifact_hash = {}
|
57
|
+
artifact_list.each{|l| artifact_hash[l] = l.end_with?("/") ? "directory" : "file" }
|
58
|
+
pair = split_nsh_path(artifact_hash.keys.first)
|
59
|
+
raise "Command_Failed: no staging server in artifacts" if pair[0].length < 2
|
60
|
+
staging_server = pair[0]
|
61
|
+
result["staging_server"] = staging_server
|
62
|
+
group_id = @baa.ensure_group_path(group_path, "Template")
|
63
|
+
templates_in_path = @baa.get_group_items(group_path, "Template", true, options)
|
64
|
+
cur_templates = templates_in_path.map{|l| l["name"] }
|
65
|
+
if cur_templates.include?(package_name)
|
66
|
+
log "#=> Component Template exists: #{package_name}"
|
67
|
+
template_id = templates_in_path[cur_templates.index(package_name)]["dbKey"]
|
68
|
+
else # Create a new one
|
69
|
+
log "#=> Create Component Template: #{package_name}"
|
70
|
+
template_id = @baa.create_empty_template(package_name, group_id)
|
71
|
+
log "\tApplying properties...to template with id #{template_id}" if transfer_properties.size > 0
|
72
|
+
template_id = @baa.set_template_properties(package_name, group_path, transfer_properties) if transfer_properties.size > 0
|
73
|
+
end
|
74
|
+
log "\tAdd content to template #{template_id}\nPath property: #{path_property}"
|
75
|
+
template_options = {}
|
76
|
+
template_options["path_property"] = path_property unless path_property_value.nil?
|
77
|
+
template_id = @baa.add_template_content(template_id, artifact_hash, template_options)
|
78
|
+
result["template_db_key"] = template_id
|
79
|
+
raise "Command_Failed: #{template_id}" if template_id.start_with?("ERROR")
|
80
|
+
log "#=> Create component package: #{staging_server}\n"
|
81
|
+
depot_group_id = @baa.ensure_group_path(group_path, "BlPackage")
|
82
|
+
package_id = @baa.create_component_package(package_name, depot_group_id, template_id, staging_server)
|
83
|
+
raise "Command_Failed: #{package_id}" if package_id.start_with?("ERROR")
|
84
|
+
result["status"] = "SUCCESS"
|
85
|
+
result["path_property"] = path_property unless path_property_value.nil?
|
86
|
+
result["package_id"] = package_id
|
87
|
+
result["instance_path"] = "#{group_path}/#{package_name}"
|
88
|
+
result["md5"] = "000"
|
89
|
+
result
|
90
|
+
end
|
91
|
+
|
92
|
+
# Deploys an existing Package in BAA to target servers
|
93
|
+
#
|
94
|
+
# ==== Attributes
|
95
|
+
#
|
96
|
+
# * +package_id+ - id of existing package
|
97
|
+
# * +options+ - hash of options, includes:
|
98
|
+
# job_name - to override the default job name,
|
99
|
+
# group_path - to override the default group path,
|
100
|
+
# execute_now - (true/false to execute the job immediately default - true),
|
101
|
+
# transfer_properties (hash of name/values to set),
|
102
|
+
# version - to override use of component version
|
103
|
+
#
|
104
|
+
# ==== Returns
|
105
|
+
#
|
106
|
+
# * hash of job results, includes - job_run_id, job_status
|
107
|
+
def deploy_package_instance(package_info, options = {})
|
108
|
+
package_id = package_info["package_id"]
|
109
|
+
path_property = get_option(package_info,"path_property", nil)
|
110
|
+
version = get_option(options,"version", get_param("SS_component_version"))
|
111
|
+
execute_now = get_option(options,"execute_now", true)
|
112
|
+
job_base_name = get_option(options, "job_name", default_item_name(version))
|
113
|
+
group_path = get_option(options, "group_path", default_group_path(version, true))
|
114
|
+
transfer_properties = get_option(options, "transfer_properties", {})
|
115
|
+
unless path_property.nil?
|
116
|
+
package_property = path_property.split("=")[0]
|
117
|
+
deploy_property = "#{package_property}_DEPLOY"
|
118
|
+
log "\t No corresponding deploy property for #{package_property} (should be #{deploy_property})", "WARN" if !transfer_properties.has_key?(deploy_property)
|
119
|
+
transfer_properties[package_property] = transfer_properties[deploy_property] if transfer_properties.has_key?(deploy_property)
|
120
|
+
end
|
121
|
+
message_box "Packaging Files via BAA"
|
122
|
+
log "\t StagingPath: #{group_path}"
|
123
|
+
result = {"status" => "ERROR", "results" => "", "group_path" => group_path, "job_names" => []}
|
124
|
+
raise "ERROR: No servers found" if get_server_list.empty?
|
125
|
+
log "\tBuilding group path..."
|
126
|
+
job_group_id = @baa.ensure_group_path(group_path, "Jobs")
|
127
|
+
# Loop through the platforms
|
128
|
+
OS_PLATFORMS.each do |os, os_details|
|
129
|
+
servers = BrpmAuto.params.get_servers_by_os_platform(os)
|
130
|
+
message_box "OS Platform: #{os_details["name"]}"
|
131
|
+
log "No servers selected for: #{os_details["name"]}" if servers.size == 0
|
132
|
+
next if servers.size == 0
|
133
|
+
job_name = "#{job_base_name}_#{os}"
|
134
|
+
result["job_names"] << job_name
|
135
|
+
log "#=> Building Job from Package:\n\tGroup: #{group_path}\n\tPackage: #{package_id}"
|
136
|
+
log "# #{os_details["name"]} - Targets: #{servers.inspect}"
|
137
|
+
targets = @baa.baa_soap_map_server_names_to_rest_uri(server_dns_names(servers))
|
138
|
+
log "\tCreating package job..."
|
139
|
+
cur_jobs = @baa.execute_cli_command("Job","listAllByGroup",[group_path])
|
140
|
+
if cur_jobs.split("\n").include?(job_name)
|
141
|
+
log "\tJob Exists: deleting..."
|
142
|
+
ans = @baa.execute_cli_command("DeployJob","deleteJobByGroupAndName",[group_path, job_name])
|
143
|
+
end
|
144
|
+
job_db_key = @baa.create_package_job(job_name, job_group_id, package_id, server_dns_names(servers))
|
145
|
+
if job_db_key.start_with?("ERROR")
|
146
|
+
log job_db_key
|
147
|
+
raise "Command_Failed: job creation failed"
|
148
|
+
end
|
149
|
+
result["job_db_key"] = job_db_key
|
150
|
+
result["status"] = "JOB_CREATED_SUCCESSFULLY"
|
151
|
+
log "\tApplying properties..."
|
152
|
+
prop_results = @baa.set_job_properties(job_name, group_path, transfer_properties)
|
153
|
+
result["property_results"] = prop_results
|
154
|
+
if execute_now
|
155
|
+
log "#=> Executing Job"
|
156
|
+
execute_results = @baa.execute_job_with_results(job_db_key, result)
|
157
|
+
result["results"] += "#{os} - #{execute_results}"
|
158
|
+
execute_results.each{|k,v| log("#{k}: #{v}")}
|
159
|
+
end
|
160
|
+
end
|
161
|
+
result
|
162
|
+
end
|
163
|
+
|
164
|
+
# Creates an NSH Script Job in BAA to target servers
|
165
|
+
#
|
166
|
+
# ==== Attributes
|
167
|
+
#
|
168
|
+
# * +script_name+ - name of nsh script
|
169
|
+
# * +script_group+ - path in depot to script
|
170
|
+
# * +job_params+ - array of params (in order) for script job
|
171
|
+
# * +options+ - hash of options, includes: execute_now,
|
172
|
+
# num_par_proces (max parallel processes),
|
173
|
+
# target_type (servers/groups),
|
174
|
+
# job_name - to override the default job name,
|
175
|
+
# group_path - to override the default group path,
|
176
|
+
# version - to override use of component version
|
177
|
+
#
|
178
|
+
# ==== Returns
|
179
|
+
#
|
180
|
+
# * hash of job results, includes - job_run_id, job_status
|
181
|
+
def create_nsh_script_job(script_name, script_group, job_params, options = {})
|
182
|
+
result = {"status" => "ERROR"}
|
183
|
+
job_type = "NSHScriptJob"
|
184
|
+
version = get_option(options,"version", get_param("SS_component_version"))
|
185
|
+
targets = get_option(options, "servers")
|
186
|
+
if targets == ""
|
187
|
+
servers = get_server_list
|
188
|
+
targets = server_dns_names(servers)
|
189
|
+
end
|
190
|
+
script_group = "/#{script_group}" unless script_group.start_with?("/")
|
191
|
+
num_par_procs = get_option(options,"num_par_procs", 50)
|
192
|
+
execute_now = get_option(options,"execute_now", false)
|
193
|
+
target_type = get_option(options,"target_type", "servers")
|
194
|
+
job_name = get_option(options, "job_name", default_item_name)
|
195
|
+
group_path = get_option(options, "group_path", default_group_path(version, true))
|
196
|
+
log "\tBuilding group path..."
|
197
|
+
job_group_id = @baa.ensure_group_path(group_path, "Jobs")
|
198
|
+
args = [
|
199
|
+
group_path, #jobGroup
|
200
|
+
job_name, #jobName
|
201
|
+
"Script job from automation", #description
|
202
|
+
script_group,
|
203
|
+
script_name,
|
204
|
+
num_par_procs # number of parallel processes
|
205
|
+
]
|
206
|
+
ss_job_key = @baa.execute_cli_command(job_type,"createNSHScriptJob",args)
|
207
|
+
raise "Command_Failed: cannot create job: #{ss_job_key}" if ss_job_key.include?("ERROR")
|
208
|
+
log "Created: #{job_name} in group: #{group_path}"
|
209
|
+
#targets.collect!{|k| k.gsub(/^\//,"/Servers/") unless k.start_with?("/Servers") }
|
210
|
+
#c. Make the call to addTargetGroup (should be a new method)
|
211
|
+
if targets.is_a?(String) || targets.size < 2
|
212
|
+
method_call = target_type == "servers" ? "addTargetServer" : "addTargetGroup"
|
213
|
+
servers = targets.first if targets.is_a?(Array)
|
214
|
+
else
|
215
|
+
method_call = target_type == "servers" ? "addTargetServers" : "addTargetGroups"
|
216
|
+
servers = targets.join(",")
|
217
|
+
end
|
218
|
+
ss_job_key = @baa.execute_cli_command("Job", method_call,
|
219
|
+
[
|
220
|
+
ss_job_key, #jobName
|
221
|
+
servers #comma separated list of groups
|
222
|
+
])
|
223
|
+
raise "Command_Failed: cannot add targets: #{ss_job_key}" if ss_job_key.include?("ERROR")
|
224
|
+
if execute_now
|
225
|
+
param_result = @baa.set_nsh_script_params(job_name, group_path, job_params, false)
|
226
|
+
raise "Command_Failed: cannot set job parameters: #{param_result}" if param_result.include?("ERROR")
|
227
|
+
execute_result = @baa.execute_job_with_results(param_result["job_db_key"], result)
|
228
|
+
raise "Command_Failed: cannot execute job: #{execute_result.inspect}" if execute_result["status"].include?("ERROR")
|
229
|
+
end
|
230
|
+
result["job_db_key"] = ss_job_key
|
231
|
+
result["status"] = "SUCCESS"
|
232
|
+
result
|
233
|
+
end
|
234
|
+
|
235
|
+
# Wrapper to run a shell action
|
236
|
+
# opens passed script path, or executes passed text
|
237
|
+
# processes the script in erb first to allow param substitution
|
238
|
+
# note script may have keyword directives (see additional docs)
|
239
|
+
# uses BAA_FRAMEWORK_NSH_SCRIPT to locate the nsh_script
|
240
|
+
# ==== Attributes
|
241
|
+
#
|
242
|
+
# * +script_file+ - the path to the script or the text of the script
|
243
|
+
# * +options+ - hash of options, includes:
|
244
|
+
# servers - to override step servers
|
245
|
+
# version - to override use of component version
|
246
|
+
# nsh_script_name - name of nsh_script to call
|
247
|
+
# nsh_script_group - group path of nsh script
|
248
|
+
# ==== Returns
|
249
|
+
#
|
250
|
+
# action output
|
251
|
+
#
|
252
|
+
def execute_script(script_file, options = {})
|
253
|
+
# get the body of the action
|
254
|
+
content = File.open(script_file).read
|
255
|
+
seed_servers = get_option(options, "servers")
|
256
|
+
transfer_properties = get_option(options, "transfer_properties",{})
|
257
|
+
nsh_script_group = get_option(options, "nsh_script_group")
|
258
|
+
nsh_script_name = get_option(options, "nsh_script_name")
|
259
|
+
version = get_option(options,"version", get_param("SS_component_version"))
|
260
|
+
group_path = get_option(options, "group_path", default_group_path(version, true))
|
261
|
+
job_name = get_option(options, "job_name", default_item_name)
|
262
|
+
if nsh_script_name == "" && defined?(BAA_FRAMEWORK_NSH_SCRIPT)
|
263
|
+
log "Using BAA_FRAMEWORK_NSH_SCRIPT defined in customer_include"
|
264
|
+
nsh_script_group = File.dirname(BAA_FRAMEWORK_NSH_SCRIPT)
|
265
|
+
nsh_script_name = File.basename(BAA_FRAMEWORK_NSH_SCRIPT)
|
266
|
+
else
|
267
|
+
raise "Command_Failed: BAA_FRAMEWORK_NSH_SCRIPT must be defined in customer_include.rb"
|
268
|
+
end
|
269
|
+
keyword_items = get_keyword_items(content)
|
270
|
+
log "\tBuilding group path..."
|
271
|
+
job_group_id = @baa.ensure_group_path(group_path, "Jobs")
|
272
|
+
params_filter = keyword_items.has_key?("RPM_PARAMS_FILTER") ? keyword_items["RPM_PARAMS_FILTER"] : DEFAULT_PARAMS_FILTER
|
273
|
+
transfer_properties.merge!(get_transfer_properties(params_filter, strip_prefix = true))
|
274
|
+
log "#----------- Executing Script on Remote Hosts -----------------#"
|
275
|
+
log "# Script: #{script_file}"
|
276
|
+
result = "No servers to execute on"
|
277
|
+
# Loop through the platforms
|
278
|
+
OS_PLATFORMS.each do |os, os_details|
|
279
|
+
servers = BrpmAuto.params.get_servers_by_os_platform(os) if seed_servers == ""
|
280
|
+
servers = BrpmAuto.params.get_servers_by_os_platform(os, seed_servers) if seed_servers != ""
|
281
|
+
message_box "OS Platform: #{os_details["name"]}"
|
282
|
+
log "No servers selected for: #{os_details["name"]}" if servers.size == 0
|
283
|
+
next if servers.size == 0
|
284
|
+
log "# #{os_details["name"]} - Targets: #{servers.inspect}"
|
285
|
+
log "# Setting Properties:"
|
286
|
+
add_channel_properties(transfer_properties, servers, os)
|
287
|
+
brpd_compatibility(transfer_properties)
|
288
|
+
transfer_properties.each{|k,v| log "\t#{k} => #{v}" }
|
289
|
+
shebang = read_shebang(os, content)
|
290
|
+
log "Shebang: #{shebang.inspect}"
|
291
|
+
wrapper_path = build_wrapper_script(os, shebang, transfer_properties, {"script_target" => File.basename(script_file)})
|
292
|
+
log "# Wrapper: #{wrapper_path}"
|
293
|
+
target_path = @baa.nsh_path(transfer_properties["RPM_CHANNEL_ROOT"])
|
294
|
+
log "# Copying script to target: "
|
295
|
+
clean_line_breaks(os, script_file, content)
|
296
|
+
files_to_deploy = ["//#{BAA_RPM_HOSTNAME}#{script_file}", "//#{BAA_RPM_HOSTNAME}#{wrapper_path}"]
|
297
|
+
result = @baa.create_file_deploy_job(job_name, group_path, files_to_deploy, target_path, server_dns_names(servers), {"execute_now" => true})
|
298
|
+
result.each{|k,v| log("#{k}: #{v}") }
|
299
|
+
log "# Executing script on target via wrapper:"
|
300
|
+
job_params = [@params["SS_application"],
|
301
|
+
@params["SS_component"],
|
302
|
+
@params["SS_environment"],
|
303
|
+
@params["SS_component_version"],
|
304
|
+
@params["request_id"],
|
305
|
+
target_path,
|
306
|
+
File.basename(wrapper_path)
|
307
|
+
]
|
308
|
+
result = create_nsh_script_job(nsh_script_name, nsh_script_group, job_params, {"servers" => server_dns_names(servers), "execute_now" => true})
|
309
|
+
result.each{|k,v| log("#{k}: #{v}") }
|
310
|
+
end
|
311
|
+
result
|
312
|
+
end
|
313
|
+
|
314
|
+
# Creates a group path for BAA storage
|
315
|
+
# optionally uses BAA_BASE_GROUP from customer_include, otherwise "BRPM"
|
316
|
+
#
|
317
|
+
# ==== Attributes
|
318
|
+
#
|
319
|
+
# * +version+ - version name
|
320
|
+
# * +deploy+ - true if path is for deploy and hence needs environment tag
|
321
|
+
#
|
322
|
+
# ==== Returns
|
323
|
+
#
|
324
|
+
# * group_path string
|
325
|
+
def default_group_path(version = nil, deploy = false)
|
326
|
+
base_grp = defined?(BAA_BASE_GROUP) ? BAA_BASE_GROUP : "BRPM"
|
327
|
+
version = precision_timestamp if version.nil? || version == ""
|
328
|
+
result = "/#{base_grp}/#{get_param("SS_application")}/#{version}/#{get_param("SS_component")}"
|
329
|
+
result.gsub!(version,"#{version}/#{get_param("SS_environment")}") if deploy
|
330
|
+
result
|
331
|
+
end
|
332
|
+
|
333
|
+
# Creates a unique item name for BAA storage
|
334
|
+
#
|
335
|
+
# ==== Attributes
|
336
|
+
#
|
337
|
+
# * +version+ - version name
|
338
|
+
#
|
339
|
+
# ==== Returns
|
340
|
+
#
|
341
|
+
# * item name string
|
342
|
+
def default_item_name(version = nil)
|
343
|
+
version = precision_timestamp if version.nil? || version == ""
|
344
|
+
"#{get_param("SS_component")}_nsh_#{get_param("request_id")}_#{version}"
|
345
|
+
end
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
require "#{@params["SS_script_support_path"]}/baa_utilities"
|
350
|
+
@rpm.log "Initializing BAA transport"
|
351
|
+
baa_path = defined?(BAA_BASE_PATH) ? BAA_BASE_PATH : "/opt/bmc/bladelogic"
|
352
|
+
baa_url = defined?(SS_integration_dns) ? SS_integration_dns : "http://unknownBladelogicServerSetIntegration"
|
353
|
+
@baa = TransportBAA.new(baa_url)
|
354
|
+
@rpm.log "Path to BAA: #{BAA_BASE_PATH}"
|
355
|
+
@transport = DispatchBAA.new(@baa)
|