brpm_content 0.1.16 → 0.1.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/modules/brpm/lib/brpm_rest_client.rb +105 -1
- data/modules/framework/bin/brpm_install +9 -92
- data/modules/framework/brpm_auto.rb +13 -3
- data/modules/framework/brpm_script_executor.rb +3 -3
- data/modules/framework/config.yml +1 -1
- data/modules/framework/lib/brpm_installer.rb +244 -0
- data/modules/framework/lib/params/params.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTAxMmNkNjk4YmQ3MTE4NDhlODQ2MTAxM2ExMTMxNTA0MzE0ZDg2MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YWYwYjZmODUxYWMyMmMxZDI4NWVlYWU4MDIzZjQ2NzE2ZTk4Y2NjZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTczNDIwZjkyY2FlZDdlZTBmZjRmZjEzYzQwMzc0ZDQzNjhmZmY5MTBiZDcy
|
10
|
+
YzA2NmM1Yjc2YWYxMDkzZjc3YmEyZjYxMDAwNGRiYWIyYWRkNzc3MGQyNzM4
|
11
|
+
YTNjODliOTJjNDNiN2NmMzA5YWUwZDY5MTBlMDNlYzJiZDY0NzY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjI4YzhiMzUyMzQ0MmYxOTQ3YjZhYTU2MTFhZTRhZGUxYTBkMmZjNGQ3YTg2
|
14
|
+
OGE3NTY4YmY4ZjU5ZTRmN2FmMGZjMzc5NWJkYWM1ZTljMGI1NTlmZGEwZWZm
|
15
|
+
NDAyZWQwYjU4ZjM0YzQ3MWIwNzVhMTQ1MGQ4MGQ3MjUyNmE1MDg=
|
@@ -1387,7 +1387,6 @@ class BrpmRestClient
|
|
1387
1387
|
sync_attribute "first received", now, ticket["extended_attributes_attributes"] unless ticket_already_exists
|
1388
1388
|
sync_attribute "last updated", now, ticket["extended_attributes_attributes"]
|
1389
1389
|
|
1390
|
-
# Create/update the ticket
|
1391
1390
|
data = {}
|
1392
1391
|
data["ticket"] = ticket
|
1393
1392
|
|
@@ -1402,6 +1401,111 @@ class BrpmRestClient
|
|
1402
1401
|
end
|
1403
1402
|
end
|
1404
1403
|
|
1404
|
+
def get_project_servers
|
1405
|
+
result = brpm_get "v1/project_servers"
|
1406
|
+
|
1407
|
+
if result["status"] == "success"
|
1408
|
+
result_hash = result["response"]
|
1409
|
+
else
|
1410
|
+
if result["code"] == 404
|
1411
|
+
result_hash = {}
|
1412
|
+
else
|
1413
|
+
raise "Error getting project servers: #{result["error_message"]}"
|
1414
|
+
end
|
1415
|
+
end
|
1416
|
+
|
1417
|
+
result_hash
|
1418
|
+
end
|
1419
|
+
|
1420
|
+
def get_id_for_project_server_type(integration_server_type)
|
1421
|
+
case integration_server_type.downcase
|
1422
|
+
when "Jira".downcase
|
1423
|
+
return 2
|
1424
|
+
when "Hudson/Jenkins".downcase, "Jenkins".downcase
|
1425
|
+
return 5
|
1426
|
+
when "Remedy via AO".downcase, "AO".downcase, "AtriumOrchestrator".downcase
|
1427
|
+
return 8
|
1428
|
+
when "BMC Application Automation".downcase, "Bladelogic".downcase
|
1429
|
+
return 9
|
1430
|
+
when "RLM Deployment Engine".downcase, "BRPD".downcase
|
1431
|
+
return 10
|
1432
|
+
else
|
1433
|
+
return nil
|
1434
|
+
end
|
1435
|
+
end
|
1436
|
+
|
1437
|
+
def get_scripts_by(filter)
|
1438
|
+
filter_string = "?"
|
1439
|
+
filter.each do |key, value|
|
1440
|
+
filter_string += "filters[#{key}]=#{value}&"
|
1441
|
+
end
|
1442
|
+
filter_string = filter_string[0..-1]
|
1443
|
+
|
1444
|
+
result = brpm_get "v1/scripts#{filter_string}"
|
1445
|
+
|
1446
|
+
if result["status"] == "success"
|
1447
|
+
result_hash = result["response"]
|
1448
|
+
else
|
1449
|
+
if result["code"] == 404
|
1450
|
+
result_hash = {}
|
1451
|
+
else
|
1452
|
+
raise "Error searching for scripts by #{filter_string}: #{result["error_message"]}"
|
1453
|
+
end
|
1454
|
+
end
|
1455
|
+
|
1456
|
+
result_hash
|
1457
|
+
end
|
1458
|
+
|
1459
|
+
def create_script_from_hash(script)
|
1460
|
+
result = brpm_post "v1/scripts", { :script => script }
|
1461
|
+
|
1462
|
+
unless result["status"] == "success"
|
1463
|
+
raise "Could not create the script: #{result["error_message"]}"
|
1464
|
+
end
|
1465
|
+
|
1466
|
+
result["response"]
|
1467
|
+
end
|
1468
|
+
|
1469
|
+
def update_script_from_hash(script)
|
1470
|
+
result = brpm_put "v1/scripts/#{script["id"]}", { :script => script }
|
1471
|
+
|
1472
|
+
unless result["status"] == "success"
|
1473
|
+
raise "Could not update the script: #{result["error_message"]}"
|
1474
|
+
end
|
1475
|
+
|
1476
|
+
result["response"]
|
1477
|
+
end
|
1478
|
+
|
1479
|
+
def create_or_update_script(script)
|
1480
|
+
BrpmAuto.log "Checking if the corresponding script already exists ..."
|
1481
|
+
existing_script = get_script_by_name script["name"]
|
1482
|
+
|
1483
|
+
if existing_script.nil?
|
1484
|
+
BrpmAuto.log "Script doesn't exist yet."
|
1485
|
+
script_already_exists=false
|
1486
|
+
else
|
1487
|
+
BrpmAuto.log "Script already exists."
|
1488
|
+
script_already_exists=true
|
1489
|
+
|
1490
|
+
script["id"] = existing_script["id"].to_s
|
1491
|
+
end
|
1492
|
+
|
1493
|
+
data = {}
|
1494
|
+
data["script"] = script
|
1495
|
+
|
1496
|
+
if script_already_exists
|
1497
|
+
BrpmAuto.log "Updating the script..."
|
1498
|
+
script = update_script_from_hash(script)
|
1499
|
+
BrpmAuto.log "Script is updated."
|
1500
|
+
else
|
1501
|
+
BrpmAuto.log "Creating the script..."
|
1502
|
+
script = create_script_from_hash(script)
|
1503
|
+
BrpmAuto.log "Script is created."
|
1504
|
+
end
|
1505
|
+
|
1506
|
+
script
|
1507
|
+
end
|
1508
|
+
|
1405
1509
|
def sync_attributes(existing_attributes, updated_attributes)
|
1406
1510
|
existing_attributes ||= []
|
1407
1511
|
updated_attributes ||= []
|
@@ -1,67 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require "rubygems"
|
3
3
|
require "bundler"
|
4
|
-
require "brpm_auto"
|
5
4
|
require "yaml"
|
6
5
|
|
7
|
-
|
8
|
-
if module_version
|
9
|
-
BrpmAuto.log "Executing command 'gem install #{module_name} -v #{module_version}'..."
|
10
|
-
specs = Gem.install(module_name, module_version)
|
11
|
-
else
|
12
|
-
BrpmAuto.log "Executing command 'gem install #{module_name}'..."
|
13
|
-
specs = Gem.install(module_name)
|
14
|
-
end
|
15
|
-
BrpmAuto.log "Installed gems:"
|
16
|
-
BrpmAuto.log specs.inspect
|
17
|
-
specs
|
18
|
-
end
|
19
|
-
|
20
|
-
def install_bundle_if_necessary(spec)
|
21
|
-
gemfile = File.join(spec.gem_dir, "Gemfile")
|
22
|
-
gemfile_lock = File.join(spec.gem_dir, "Gemfile.lock")
|
23
|
-
|
24
|
-
if File.exists?(gemfile) && File.exists?(gemfile_lock)
|
25
|
-
BrpmAuto.log "Found a Gemfile.lock so executing command 'bundle install --gemfile #{gemfile}'..."
|
26
|
-
# %x(bundle install --gemfile #{gemfile})
|
27
|
-
result = BrpmAuto.execute_shell("bundle install --gemfile #{gemfile}")
|
28
|
-
BrpmAuto.log result["stdout"] if result["stdout"] and ! result["stdout"].empty?
|
29
|
-
unless result["status"] == 0
|
30
|
-
raise result["stderr"]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def update_symlink_to_brpm_content(brpm_content_spec)
|
36
|
-
if brpm_content_spec.version > Gem::Version.new(BrpmAuto.version)
|
37
|
-
new_version_path = brpm_content_spec.gem_dir
|
38
|
-
symlink_path = "#{ENV["GEM_HOME"]}/gems/brpm_content-latest"
|
39
|
-
|
40
|
-
BrpmAuto.log "A newer version of brpm_content was installed so updating symlink #{symlink_path} to #{new_version_path}..."
|
41
|
-
result = BrpmAuto.execute_shell("ln -sfn #{new_version_path} #{symlink_path}")
|
42
|
-
BrpmAuto.log result["stdout"] if result["stdout"] and ! result["stdout"].empty?
|
43
|
-
unless result["status"] == 0
|
44
|
-
raise result["stderr"]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def install_auto_script_wrappers(spec, brpm_url, brpm_api_token)
|
50
|
-
brpm_rest_client = BrpmRestClient.new(brpm_url, brpm_api_token)
|
51
|
-
|
52
|
-
integration_servers = brpm_rest_client.get_integration_servers
|
53
|
-
|
54
|
-
Dir.glob("#{spec.gem_dir}/{automations, resource_automations}/*.rb").each do |auto_script|
|
55
|
-
#TODO: open txt file
|
56
|
-
#TODO: add wrapper code
|
57
|
-
#TODO: set integration server id if necessary
|
58
|
-
|
59
|
-
script = {}
|
60
|
-
brpm_rest_client.create_or_update_script(script)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
6
|
+
require "brpm_auto"
|
64
7
|
|
8
|
+
params = {}
|
9
|
+
params["log_file"] = "/tmp/brpm_install.log"
|
10
|
+
params["also_log_to_console"] = "true"
|
11
|
+
params["unit_test"] = "true" if ENV["UNIT_TEST"] == "1"
|
12
|
+
BrpmAuto.setup(params)
|
65
13
|
|
66
14
|
if ARGV.size < 1
|
67
15
|
BrpmAuto.log "Missing arguments."
|
@@ -69,38 +17,7 @@ if ARGV.size < 1
|
|
69
17
|
end
|
70
18
|
|
71
19
|
module_name = ARGV[0]
|
72
|
-
module_version = ARGV[1]
|
73
|
-
|
74
|
-
params = {}
|
75
|
-
params["log_file"] = "/tmp/brpm_install.log"
|
76
|
-
params["also_log_to_console"] = "true"
|
77
|
-
BrpmAuto.setup(params)
|
78
|
-
|
79
|
-
BrpmAuto.log "Installing module #{module_name} #{module_version.nil? ? "" : module_version}..."
|
80
|
-
|
81
|
-
specs = install_gem(module_name, module_version)
|
82
|
-
module_spec = specs.last
|
83
|
-
|
84
|
-
install_bundle_if_necessary(module_spec)
|
85
|
-
|
86
|
-
if ENV["BRPM_HOME"] and ! ENV["BRPM_HOME"].empty?
|
87
|
-
brpm_content_spec = specs.find { |spec| spec.name == "brpm_content" }
|
88
|
-
update_symlink_to_brpm_content(brpm_content_spec) if brpm_content_spec
|
89
|
-
|
90
|
-
if File.exists?("~/.brpm")
|
91
|
-
config = YAML.load_file("~/.brpm")
|
92
|
-
|
93
|
-
if config["brpm_url"] and config["brpm_api_token"]
|
94
|
-
install_auto_script_wrappers(spec, brpm_url, brpm_api_token)
|
95
|
-
else
|
96
|
-
BrpmAuto.log "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."
|
97
|
-
end
|
98
|
-
else
|
99
|
-
BrpmAuto.log "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."
|
100
|
-
end
|
101
|
-
|
102
|
-
if module_name == "brpm_content"
|
103
|
-
#TODO: cp $CONTENT_REPO_PATH/modules/framework/log.html $BRPM_HOME/automation_results
|
20
|
+
module_version = ARGV[1] # optional
|
104
21
|
|
105
|
-
|
106
|
-
|
22
|
+
brpm_installer = BrpmInstaller.new
|
23
|
+
brpm_installer.install_module(module_name, module_version)
|
@@ -113,13 +113,12 @@ class BrpmAuto
|
|
113
113
|
|
114
114
|
def require_module_from_gem(module_name, module_version = nil)
|
115
115
|
module_version ||= get_latest_installed_version(module_name)
|
116
|
-
|
117
116
|
module_gem_path = get_module_gem_path(module_name, module_version)
|
118
117
|
|
119
118
|
if File.exists?(module_gem_path)
|
120
119
|
BrpmAuto.log "Found the module in gem path #{module_gem_path}."
|
121
120
|
else
|
122
|
-
raise "Module #{module_name} version #{module_version} is not installed. Expected it on path #{module_gem_path}."
|
121
|
+
raise GemNotFoundException, "Module #{module_name} version #{module_version} is not installed. Expected it on path #{module_gem_path}."
|
123
122
|
end
|
124
123
|
|
125
124
|
gemfile_lock_path = "#{module_gem_path}/Gemfile.lock"
|
@@ -191,6 +190,10 @@ class BrpmAuto
|
|
191
190
|
@logger = SimpleLogger.new(log_file, also_log_to_console)
|
192
191
|
end
|
193
192
|
|
193
|
+
def run_from_brpm
|
194
|
+
@params.run_from_brpm
|
195
|
+
end
|
196
|
+
|
194
197
|
def log(message)
|
195
198
|
@logger.log(message)
|
196
199
|
end
|
@@ -221,8 +224,10 @@ class BrpmAuto
|
|
221
224
|
module_path = get_module_gem_path(module_name, module_version)
|
222
225
|
|
223
226
|
module_config_file_path = "#{module_path}/config.yml"
|
227
|
+
|
224
228
|
if File.exist?(module_config_file_path)
|
225
229
|
module_config = YAML.load_file(module_config_file_path)
|
230
|
+
|
226
231
|
if module_config["dependencies"]
|
227
232
|
BrpmAuto.log "Loading the dependent modules..."
|
228
233
|
module_config["dependencies"].each do |dependency|
|
@@ -289,7 +294,7 @@ class BrpmAuto
|
|
289
294
|
all_version_search = get_module_gem_path(module_name, "*")
|
290
295
|
version_paths = Dir.glob(all_version_search)
|
291
296
|
|
292
|
-
raise "Could not find any installed version of module #{module_name}. Expected them in #{get_module_gem_path(module_name, "*")}" if version_paths.empty?
|
297
|
+
raise GemNoVersionsInstalledError, "Could not find any installed version of module #{module_name}. Expected them in #{get_module_gem_path(module_name, "*")}" if version_paths.empty?
|
293
298
|
|
294
299
|
versions = version_paths.map { |path| File.basename(path).sub("#{module_name}-", "") }
|
295
300
|
|
@@ -305,3 +310,8 @@ class BrpmAuto
|
|
305
310
|
self.init
|
306
311
|
end
|
307
312
|
|
313
|
+
class GemNoVersionsInstalledError < Gem::GemNotFoundException
|
314
|
+
end
|
315
|
+
|
316
|
+
class GemNotInstalledError < Gem::GemNotFoundException
|
317
|
+
end
|
@@ -81,7 +81,7 @@ class BrpmScriptExecutor
|
|
81
81
|
start_time = Time.now
|
82
82
|
|
83
83
|
BrpmAuto.log "Loading the module and its dependencies..."
|
84
|
-
module_path = BrpmAuto.require_module_from_gem(modul)
|
84
|
+
module_path = BrpmAuto.require_module_from_gem(modul, params["module_version"])
|
85
85
|
BrpmAuto.log "Finished loading the module."
|
86
86
|
|
87
87
|
automation_script_path = "#{module_path}/automations/#{name}.rb"
|
@@ -115,13 +115,13 @@ class BrpmScriptExecutor
|
|
115
115
|
start_time = Time.now
|
116
116
|
|
117
117
|
BrpmAuto.log "Loading the module and its dependencies..."
|
118
|
-
module_path = BrpmAuto.require_module_from_gem(modul)
|
118
|
+
module_path = BrpmAuto.require_module_from_gem(modul) #TODO: from where should we get the module version of the script?
|
119
119
|
BrpmAuto.log "Finished loading the module."
|
120
120
|
|
121
121
|
automation_script_path = "#{module_path}/resource_automations/#{name}.rb"
|
122
122
|
|
123
123
|
BrpmAuto.log "Loading the resource automation script #{automation_script_path}..."
|
124
|
-
|
124
|
+
load automation_script_path
|
125
125
|
|
126
126
|
BrpmAuto.log "Calling execute_resource_automation_script(params, parent_id, offset, max_records)..."
|
127
127
|
execute_script(params, parent_id, offset, max_records)
|
@@ -0,0 +1,244 @@
|
|
1
|
+
class BrpmInstaller
|
2
|
+
def install_module(module_name, module_version)
|
3
|
+
BrpmAuto.log "Installing module #{module_name} #{module_version.nil? ? "" : module_version}..."
|
4
|
+
|
5
|
+
specs = install_gem(module_name, module_version)
|
6
|
+
module_spec = specs.last
|
7
|
+
|
8
|
+
install_bundle_if_necessary(module_spec)
|
9
|
+
|
10
|
+
if brpm_installed_locally?
|
11
|
+
BrpmAuto.log "A BRPM instance is installed locally"
|
12
|
+
|
13
|
+
brpm_content_spec = specs.find { |spec| spec.name == "brpm_content" }
|
14
|
+
if brpm_content_spec and brpm_content_spec.version > Gem::Version.new(BrpmAuto.version)
|
15
|
+
BrpmAuto.log "WARNING - A newer version of brpm_content was installed."
|
16
|
+
|
17
|
+
BrpmAuto.log "Checking if the symlink to brpm_content-latest should be updated..."
|
18
|
+
update_symlink_to_brpm_content_if_necessary(brpm_content_spec)
|
19
|
+
|
20
|
+
BrpmAuto.log "Copying the log.html file to te automation_results directory..."
|
21
|
+
File.cp("#{brpm_content_spec.gem_dir}/modules/framework/log.html", "#{Env["BRPM_HOME"]}/automation_results")
|
22
|
+
end
|
23
|
+
|
24
|
+
BrpmAuto.log "Installing the automation script wrappers in the local BRPM instance..."
|
25
|
+
install_auto_script_wrappers(module_spec.gem_dir, module_spec.name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def install_gem(module_name, module_version)
|
30
|
+
if BrpmAuto.run_from_brpm or BrpmAuto.params.unit_test
|
31
|
+
# we need to override the GEM_HOME env var, otherwise the gems will be installed in BRPM's own gemset
|
32
|
+
ENV["GEM_HOME"] = ENV["BRPM_CONTENT_HOME"] || "#{ENV["BRPM_HOME"]}/modules"
|
33
|
+
Gem.paths = ENV
|
34
|
+
end
|
35
|
+
|
36
|
+
if module_version
|
37
|
+
BrpmAuto.log "Executing command 'gem install #{module_name} -v #{module_version}'..."
|
38
|
+
specs = Gem.install(module_name, module_version)
|
39
|
+
else
|
40
|
+
BrpmAuto.log "Executing command 'gem install #{module_name}'..."
|
41
|
+
specs = Gem.install(module_name)
|
42
|
+
end
|
43
|
+
BrpmAuto.log "Installed gems:"
|
44
|
+
specs.each do |spec|
|
45
|
+
BrpmAuto.log " - #{spec.name} #{spec.version}"
|
46
|
+
end
|
47
|
+
specs
|
48
|
+
end
|
49
|
+
|
50
|
+
def install_bundle_if_necessary(spec)
|
51
|
+
gemfile = File.join(spec.gem_dir, "Gemfile")
|
52
|
+
gemfile_lock = File.join(spec.gem_dir, "Gemfile.lock")
|
53
|
+
|
54
|
+
if File.exists?(gemfile) && File.exists?(gemfile_lock)
|
55
|
+
BrpmAuto.log "Found a Gemfile.lock so executing command 'bundle install --gemfile #{gemfile}'..."
|
56
|
+
# %x(bundle install --gemfile #{gemfile})
|
57
|
+
result = BrpmAuto.execute_shell("bundle install --gemfile #{gemfile}") #TODO: check if we must set GEM_HOME (when run from BRPM)
|
58
|
+
BrpmAuto.log result["stdout"] if result["stdout"] and !result["stdout"].empty?
|
59
|
+
unless result["status"] == 0
|
60
|
+
raise result["stderr"]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def update_symlink_to_brpm_content_if_necessary(brpm_content_spec)
|
66
|
+
new_version_path = brpm_content_spec.gem_dir
|
67
|
+
symlink_path = "#{ENV["GEM_HOME"]}/gems/brpm_content-latest"
|
68
|
+
|
69
|
+
BrpmAuto.log "A newer version of brpm_content was installed so updating symlink #{symlink_path} to #{new_version_path}..."
|
70
|
+
result = BrpmAuto.execute_shell("ln -sfn #{new_version_path} #{symlink_path}")
|
71
|
+
BrpmAuto.log result["stdout"] if result["stdout"] and !result["stdout"].empty?
|
72
|
+
unless result["status"] == 0
|
73
|
+
raise result["stderr"]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def brpm_installed_locally?
|
78
|
+
ENV["BRPM_HOME"] and !ENV["BRPM_HOME"].empty?
|
79
|
+
end
|
80
|
+
|
81
|
+
def install_auto_script_wrappers(module_path, module_name)
|
82
|
+
brpm_file = File.expand_path("~/.brpm")
|
83
|
+
if File.exists?(brpm_file)
|
84
|
+
config = YAML.load_file(brpm_file)
|
85
|
+
end
|
86
|
+
|
87
|
+
if config
|
88
|
+
unless config["brpm_url"] and config["brpm_api_token"]
|
89
|
+
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."
|
90
|
+
return false
|
91
|
+
end
|
92
|
+
else
|
93
|
+
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."
|
94
|
+
return false
|
95
|
+
end
|
96
|
+
|
97
|
+
begin
|
98
|
+
BrpmAuto.require_module_from_gem "brpm_module_brpm"
|
99
|
+
rescue Gem::GemNotFoundException
|
100
|
+
BrpmAuto.log "WARNING - Module brpm_module_brpm is not installed so not installing the automation script wrappers in BRPM."
|
101
|
+
return false
|
102
|
+
end
|
103
|
+
|
104
|
+
brpm_rest_client = BrpmRestClient.new(config["brpm_url"], config["brpm_api_token"])
|
105
|
+
|
106
|
+
BrpmAuto.log "Retrieving the integration servers..."
|
107
|
+
integration_servers = brpm_rest_client.get_project_servers
|
108
|
+
|
109
|
+
# For resource automations
|
110
|
+
resource_automation_dir = "#{module_path}/resource_automations"
|
111
|
+
resource_automation_script_paths = Dir.glob("#{resource_automation_dir}/*.rb")
|
112
|
+
|
113
|
+
if resource_automation_script_paths.size > 0
|
114
|
+
BrpmAuto.log "Installing the wrapper scripts for the resource automations..."
|
115
|
+
|
116
|
+
resource_automation_script_paths.each do |auto_script_path|
|
117
|
+
install_auto_script_wrapper(auto_script_path, "ResourceAutomation", module_name, integration_servers, brpm_rest_client)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# For automations
|
122
|
+
automation_dir = "#{module_path}/automations"
|
123
|
+
automation_script_paths = Dir.glob("#{automation_dir}/*.rb")
|
124
|
+
|
125
|
+
if automation_script_paths.size > 0
|
126
|
+
BrpmAuto.log "Installing the wrapper scripts for the automations..."
|
127
|
+
|
128
|
+
automation_script_paths.each do |auto_script_path|
|
129
|
+
install_auto_script_wrapper(auto_script_path, "Automation", module_name, integration_servers, brpm_rest_client)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def install_auto_script_wrapper(auto_script_path, automation_type, module_name, integration_servers, brpm_rest_client)
|
135
|
+
auto_script_name = File.basename(auto_script_path, ".rb")
|
136
|
+
BrpmAuto.log "Installing the wrapper script for resource automation #{auto_script_name}..."
|
137
|
+
|
138
|
+
auto_script_config_path = "#{File.dirname(auto_script_path)}/#{auto_script_name}.txt"
|
139
|
+
|
140
|
+
auto_script_config_content = File.exists?(auto_script_config_path) ? File.read(auto_script_config_path) : ""
|
141
|
+
match = auto_script_config_content.match(/###\n(.*)\n###/m)
|
142
|
+
input_params_content = match ? match[1] : ""
|
143
|
+
|
144
|
+
input_params_content += <<EOR
|
145
|
+
|
146
|
+
# framework_version:
|
147
|
+
# name: Framework version
|
148
|
+
# required: no
|
149
|
+
# module_version:
|
150
|
+
# name: Module version
|
151
|
+
# required: no
|
152
|
+
EOR
|
153
|
+
|
154
|
+
wrapper_script_content = "###\n#{input_params_content}###"
|
155
|
+
|
156
|
+
auto_script_config = YAML.load(auto_script_config_content) || {}
|
157
|
+
|
158
|
+
integration_server = nil
|
159
|
+
if auto_script_config["integration_server_type"]
|
160
|
+
server_type_id = brpm_rest_client.get_id_for_project_server_type(auto_script_config["integration_server_type"])
|
161
|
+
if server_type_id
|
162
|
+
integration_server = integration_servers.find { |integration_server| integration_server["server_name_id"] == server_type_id } #TODO: support multiple integration servers of same type (user should pick one)
|
163
|
+
|
164
|
+
if integration_server
|
165
|
+
wrapper_script_content += <<EOR
|
166
|
+
|
167
|
+
#=== #{auto_script_config["integration_server_type"]} Integration Server: #{integration_server["name"]} ===#
|
168
|
+
# [integration_id=#{integration_server["id"]}]
|
169
|
+
#=== End ===#
|
170
|
+
|
171
|
+
params["SS_integration_dns"] = SS_integration_dns
|
172
|
+
params["SS_integration_username"] = SS_integration_username
|
173
|
+
params["SS_integration_password_enc"] = SS_integration_password_enc
|
174
|
+
params["SS_integration_details"] = YAML.load(SS_integration_details)
|
175
|
+
EOR
|
176
|
+
else
|
177
|
+
BrpmAuto.log "WARNING - An integration server of type #{auto_script_config["integration_server_type"]} doesn't exist so not setting the integration server in the wrapper script."
|
178
|
+
end
|
179
|
+
else
|
180
|
+
BrpmAuto.log "WARNING - Integration server type '#{auto_script_config["integration_server_type"]}' is not supported so not setting the integration server in the wrapper script."
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
wrapper_script_content += <<EOR
|
185
|
+
|
186
|
+
params["direct_execute"] = "true"
|
187
|
+
|
188
|
+
params["framework_version"] = nil if params["framework_version"].empty?
|
189
|
+
params["module_version"] = nil if params["module_version"].empty?
|
190
|
+
|
191
|
+
require "\#{ENV["BRPM_CONTENT_HOME"] || "\#{ENV["BRPM_HOME"]}/modules"}/gems/brpm_content-\#{params["framework_version"] || "latest"}/modules/framework/brpm_script_executor.rb"
|
192
|
+
EOR
|
193
|
+
|
194
|
+
if automation_type == "Automation"
|
195
|
+
|
196
|
+
wrapper_script_content += <<EOR
|
197
|
+
|
198
|
+
BrpmScriptExecutor.execute_automation_script_from_gem("#{module_name}", "#{auto_script_name}", params)
|
199
|
+
EOR
|
200
|
+
|
201
|
+
elsif automation_type == "ResourceAutomation"
|
202
|
+
|
203
|
+
wrapper_script_content += <<EOR
|
204
|
+
|
205
|
+
def execute(script_params, parent_id, offset, max_records)
|
206
|
+
BrpmScriptExecutor.execute_resource_automation_script_from_gem("#{module_name}", "#{auto_script_name}", script_params, parent_id, offset, max_records)
|
207
|
+
end
|
208
|
+
EOR
|
209
|
+
end
|
210
|
+
|
211
|
+
auto_script_friendly_name = auto_script_config["friendly_name"] || "#{module_name.sub("brpm_module_", "").capitalize} - #{auto_script_name.gsub("_", " ").capitalize}"
|
212
|
+
automation_category = auto_script_config["automation_category"] || "#{module_name.sub("brpm_module_", "").capitalize}"
|
213
|
+
|
214
|
+
script = {}
|
215
|
+
script["name"] = auto_script_friendly_name
|
216
|
+
script["description"] = auto_script_friendly_name
|
217
|
+
script["automation_type"] = automation_type
|
218
|
+
script["automation_category"] = automation_category
|
219
|
+
script["content"] = wrapper_script_content
|
220
|
+
script["integration_id"] = integration_server["id"] if auto_script_config["integration_server_type"] and integration_server
|
221
|
+
if automation_type == "ResourceAutomation"
|
222
|
+
script["resource_id"] = auto_script_config["resource_id"] if auto_script_config["resource_id"]
|
223
|
+
script["render_as"] = auto_script_config["render_as"] if auto_script_config["render_as"]
|
224
|
+
end
|
225
|
+
|
226
|
+
script = brpm_rest_client.create_or_update_script(script)
|
227
|
+
|
228
|
+
if script["aasm_state"] == "draft"
|
229
|
+
BrpmAuto.log "Updating the aasm_state of the script to 'pending'..."
|
230
|
+
script_to_update = {}
|
231
|
+
script_to_update["id"] = script["id"]
|
232
|
+
script_to_update["aasm_state"] = "pending"
|
233
|
+
script = brpm_rest_client.update_script_from_hash(script_to_update)
|
234
|
+
end
|
235
|
+
|
236
|
+
if script["aasm_state"] == "pending"
|
237
|
+
BrpmAuto.log "Updating the aasm_state of the script to 'released'..."
|
238
|
+
script_to_update = {}
|
239
|
+
script_to_update["id"] = script["id"]
|
240
|
+
script_to_update["aasm_state"] = "released"
|
241
|
+
script = brpm_rest_client.update_script_from_hash(script_to_update)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
@@ -47,6 +47,7 @@ class Params < ParamsBase
|
|
47
47
|
attr_reader :brpm_api_token
|
48
48
|
|
49
49
|
attr_reader :run_from_brpm
|
50
|
+
attr_reader :unit_test
|
50
51
|
attr_reader :also_log_to_console
|
51
52
|
|
52
53
|
attr_reader :private_params
|
@@ -106,6 +107,7 @@ class Params < ParamsBase
|
|
106
107
|
@brpm_api_token = params["SS_api_token"] || params["brpm_api_token"]
|
107
108
|
|
108
109
|
@run_from_brpm = (@run_key != nil)
|
110
|
+
@unit_test = (params["unit_test"] == "true" || params["unit_test"] == 'true')
|
109
111
|
@also_log_to_console = (params["also_log_to_console"] == "true" || params["also_log_to_console"] == 'true')
|
110
112
|
|
111
113
|
@private_params = {}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brpm_content
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Niek Bartholomeus
|
8
8
|
autorequire:
|
9
9
|
bindir: modules/framework/bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -291,6 +291,7 @@ files:
|
|
291
291
|
- modules/framework/config/customer_include.rb
|
292
292
|
- modules/framework/config/server.yml
|
293
293
|
- modules/framework/customer_include_default.rb
|
294
|
+
- modules/framework/lib/brpm_installer.rb
|
294
295
|
- modules/framework/lib/logging/brpm_logger.rb
|
295
296
|
- modules/framework/lib/logging/logger_base.rb
|
296
297
|
- modules/framework/lib/logging/simple_logger.rb
|