brpm_content 0.1.43 → 0.1.45
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.travis.yml +5 -0
- data/config.yml +1 -1
- data/infrastructure/integrations/event_handler.rb +2 -2
- data/infrastructure/integrations/webhook_receiver.rb +2 -2
- data/modules/framework/bin/brpm_install +19 -13
- data/modules/framework/bin/brpm_uninstall +29 -0
- data/modules/framework/bin/event_handler +2 -2
- data/modules/framework/bin/webhook_receiver +2 -2
- data/modules/framework/brpm_auto.rb +1 -1
- data/modules/framework/brpm_script_executor.rb +4 -4
- data/modules/framework/lib/module_installer.rb +168 -59
- data/modules/framework/tests/module_installer_spec.rb +42 -0
- data/modules/framework/tests/spec_helper.rb +20 -0
- metadata +5 -3
- data/modules/framework/config.yml +0 -7
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWM5Yjc2NzlmMDcyMTQ1YmIwMDIxODI4OWNiNTZmNDAyMGRlYWI1ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YWJhNjJiZGUzYTgyNmI4MjZkMTk2MjYwNjU1M2MyZDExZTI0NDJiMQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTU4NDAyZGE3NzdmYzIyOGYxMTdjYTIxMGNiMDZiZjdhYzU4OTIzYjU4Njgw
|
10
|
+
OWQ5OTkxMTgwNDYwNGI5NTcyZGNjNTY0MWRhMTdmMGM0YjYyMTY0Yjc4ZDE1
|
11
|
+
YjNkN2NhOTVkMjIxMWUxMmYwZDA2NmIwZDlkOWNiMGY0ZjU1MDY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzdkMWU0M2IwMjE2MDcxZjFkYTJkODVmMzk3ZTgwMWJmZjI1YWVhNmJhZTc3
|
14
|
+
ZTU0NzE4ZjdkYmU2ZjliZDY0NzRkNzhjNzE2NTJlMWM2YWU1MjhmZTU5MmY1
|
15
|
+
MTQ4Y2UwNWZjNGUwNzEzYjRmZGZmNWIxNjI3YjBkNzBhYTM5MTk=
|
data/.travis.yml
CHANGED
data/config.yml
CHANGED
@@ -42,7 +42,7 @@ class MessagingProcessor < TorqueBox::Messaging::MessageProcessor
|
|
42
42
|
|
43
43
|
rescue Exception => e
|
44
44
|
BrpmAuto.log_error(e)
|
45
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
45
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -56,7 +56,7 @@ begin
|
|
56
56
|
|
57
57
|
rescue Exception => e
|
58
58
|
BrpmAuto.log_error(e)
|
59
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
59
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
60
60
|
|
61
61
|
raise e
|
62
62
|
end
|
@@ -26,7 +26,7 @@ class EventProcessor < WEBrick::HTTPServlet::AbstractServlet
|
|
26
26
|
response.body = "OK"
|
27
27
|
rescue Exception => e
|
28
28
|
BrpmAuto.log_error(e)
|
29
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
29
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -43,7 +43,7 @@ begin
|
|
43
43
|
server.start
|
44
44
|
rescue Exception => e
|
45
45
|
BrpmAuto.log_error(e)
|
46
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
46
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
47
47
|
|
48
48
|
raise e
|
49
49
|
end
|
@@ -1,23 +1,29 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require "rubygems"
|
3
|
-
require "bundler"
|
4
2
|
require "yaml"
|
5
|
-
|
6
3
|
require "brpm_auto"
|
7
4
|
|
8
5
|
params = {}
|
9
6
|
params["log_file"] = "/tmp/brpm_install.log"
|
10
7
|
params["also_log_to_console"] = "true"
|
11
|
-
params["unit_test"] = "true" if ENV["UNIT_TEST"] == "1"
|
12
|
-
BrpmAuto.setup(params)
|
13
8
|
|
14
|
-
|
15
|
-
BrpmAuto.
|
16
|
-
|
17
|
-
|
9
|
+
begin
|
10
|
+
BrpmAuto.setup(params)
|
11
|
+
|
12
|
+
if ARGV.size < 1
|
13
|
+
BrpmAuto.log "Missing arguments."
|
14
|
+
BrpmAuto.log "Usage: \n brpm_install <module name> [<module version>]\n brpm_install <path to module>"
|
15
|
+
end
|
16
|
+
|
17
|
+
module_name_or_path = ARGV[0]
|
18
|
+
module_version = ARGV[1] # optional
|
19
|
+
|
20
|
+
BrpmAuto.log "Installing module #{module_name_or_path}#{module_version.nil? ? "" : " " + module_version}..."
|
21
|
+
module_installer = ModuleInstaller.new
|
22
|
+
module_installer.install_module(module_name_or_path, module_version)
|
18
23
|
|
19
|
-
|
20
|
-
|
24
|
+
rescue Exception => e
|
25
|
+
BrpmAuto.log_error "#{e}"
|
26
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
21
27
|
|
22
|
-
|
23
|
-
|
28
|
+
raise e
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "yaml"
|
3
|
+
require "brpm_auto"
|
4
|
+
|
5
|
+
params = {}
|
6
|
+
params["log_file"] = "/tmp/brpm_install.log"
|
7
|
+
params["also_log_to_console"] = "true"
|
8
|
+
|
9
|
+
begin
|
10
|
+
BrpmAuto.setup(params)
|
11
|
+
|
12
|
+
if ARGV.size < 2
|
13
|
+
BrpmAuto.log "Missing arguments."
|
14
|
+
BrpmAuto.log "Usage: \n brpm_uninstall <module name> <module version>"
|
15
|
+
end
|
16
|
+
|
17
|
+
module_name = ARGV[0]
|
18
|
+
module_version = ARGV[1] # optional
|
19
|
+
|
20
|
+
BrpmAuto.log "Uninstalling module #{module_name} #{module_version}..."
|
21
|
+
module_installer = ModuleInstaller.new
|
22
|
+
module_installer.uninstall_module(module_name, module_version)
|
23
|
+
|
24
|
+
rescue Exception => e
|
25
|
+
BrpmAuto.log_error "#{e}"
|
26
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
27
|
+
|
28
|
+
raise e
|
29
|
+
end
|
@@ -43,7 +43,7 @@ class MessagingProcessor < TorqueBox::Messaging::MessageProcessor
|
|
43
43
|
|
44
44
|
rescue Exception => e
|
45
45
|
BrpmAuto.log_error(e)
|
46
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
46
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -57,7 +57,7 @@ begin
|
|
57
57
|
|
58
58
|
rescue Exception => e
|
59
59
|
BrpmAuto.log_error(e)
|
60
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
60
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
61
61
|
|
62
62
|
raise e
|
63
63
|
end
|
@@ -26,7 +26,7 @@ class EventProcessor < WEBrick::HTTPServlet::AbstractServlet
|
|
26
26
|
response.body = "OK"
|
27
27
|
rescue Exception => e
|
28
28
|
BrpmAuto.log_error(e)
|
29
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
29
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -43,7 +43,7 @@ begin
|
|
43
43
|
server.start
|
44
44
|
rescue Exception => e
|
45
45
|
BrpmAuto.log_error(e)
|
46
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
46
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
47
47
|
|
48
48
|
raise e
|
49
49
|
end
|
@@ -220,7 +220,7 @@ class BrpmAuto
|
|
220
220
|
@integration_settings = IntegrationSettings.new(dns, username, password, details)
|
221
221
|
end
|
222
222
|
|
223
|
-
def
|
223
|
+
def get_gems_root_path
|
224
224
|
if ENV["BRPM_CONTENT_HOME"]
|
225
225
|
ENV["BRPM_CONTENT_HOME"] # gemset location is overridden
|
226
226
|
elsif ENV["BRPM_HOME"]
|
@@ -21,7 +21,7 @@ class BrpmScriptExecutor
|
|
21
21
|
|
22
22
|
rescue Exception => e
|
23
23
|
BrpmAuto.log_error "#{e}"
|
24
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
24
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
25
25
|
|
26
26
|
raise e
|
27
27
|
ensure
|
@@ -58,7 +58,7 @@ class BrpmScriptExecutor
|
|
58
58
|
|
59
59
|
rescue Exception => e
|
60
60
|
BrpmAuto.log_error "#{e}"
|
61
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
61
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
62
62
|
|
63
63
|
raise e
|
64
64
|
ensure
|
@@ -91,7 +91,7 @@ class BrpmScriptExecutor
|
|
91
91
|
|
92
92
|
rescue Exception => e
|
93
93
|
BrpmAuto.log_error "#{e}"
|
94
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
94
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
95
95
|
|
96
96
|
raise e
|
97
97
|
ensure
|
@@ -128,7 +128,7 @@ class BrpmScriptExecutor
|
|
128
128
|
|
129
129
|
rescue Exception => e
|
130
130
|
BrpmAuto.log_error "#{e}"
|
131
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
131
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
132
132
|
|
133
133
|
raise e
|
134
134
|
ensure
|
@@ -1,21 +1,30 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require 'rubygems/package'
|
3
|
+
require 'rubygems/installer'
|
4
|
+
require "bundler"
|
5
|
+
|
1
6
|
class ModuleInstaller
|
2
|
-
def
|
3
|
-
|
7
|
+
def initialize
|
8
|
+
set_gem_home
|
9
|
+
end
|
10
|
+
|
11
|
+
def install_module(module_name_or_path, module_version = nil)
|
12
|
+
brpm_content_spec = nil
|
4
13
|
|
5
|
-
if true #TODO: support
|
6
|
-
specs = install_gem(
|
7
|
-
|
14
|
+
if true #TODO: support no-gem-install mode
|
15
|
+
module_spec, specs = install_gem(module_name_or_path, module_version)
|
16
|
+
|
17
|
+
brpm_content_spec = specs.find { |spec| spec.name == "brpm_content" } if specs
|
8
18
|
|
9
19
|
install_bundle_if_necessary(module_spec)
|
10
20
|
else
|
11
|
-
|
12
|
-
module_spec =
|
21
|
+
module_name = module_name_or_path
|
22
|
+
module_spec = Gem::Specification.find_by_name(module_name)
|
13
23
|
end
|
14
24
|
|
15
25
|
if brpm_installed_locally?
|
16
26
|
BrpmAuto.log "A BRPM instance is installed locally"
|
17
27
|
|
18
|
-
brpm_content_spec = specs.find { |spec| spec.name == "brpm_content" }
|
19
28
|
if brpm_content_spec
|
20
29
|
if brpm_content_spec.version > Gem::Version.new(BrpmAuto.version) or ! File.exist?(get_symlink_path)
|
21
30
|
BrpmAuto.log "Updating the symlink to brpm_content-latest..."
|
@@ -37,12 +46,63 @@ class ModuleInstaller
|
|
37
46
|
BrpmAuto.log "Creating an automation category for #{module_friendly_name} if one doesn't exist yet..."
|
38
47
|
create_automation_category_if_not_exists(module_friendly_name)
|
39
48
|
|
49
|
+
BrpmAuto.log "Retrieving the integration servers..."
|
50
|
+
integration_servers = @brpm_rest_client.get_project_servers
|
51
|
+
|
40
52
|
BrpmAuto.log "Installing the automation script wrappers in the local BRPM instance..."
|
41
|
-
|
53
|
+
failed_scripts = each_auto_script_wrapper(module_spec.gem_dir) do |auto_script_path, automation_type|
|
54
|
+
BrpmAuto.log "Installing automation script wrapper for script #{auto_script_path}..."
|
55
|
+
install_auto_script_wrapper(auto_script_path, automation_type, module_spec.name, module_friendly_name, integration_servers)
|
56
|
+
end
|
57
|
+
|
58
|
+
if failed_scripts.size > 0
|
59
|
+
return false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def uninstall_module(module_name, module_version)
|
66
|
+
if brpm_installed_locally?
|
67
|
+
BrpmAuto.log "A BRPM instance is installed locally"
|
68
|
+
|
69
|
+
BrpmAuto.log "Preparing the connectivity to BRPM..."
|
70
|
+
if prepare_brpm_connection
|
71
|
+
version_req = Gem::Requirement.create(Gem::Version.new(module_version))
|
72
|
+
module_spec = Gem::Specification.find_by_name(module_name, version_req)
|
73
|
+
|
74
|
+
module_friendly_name = get_module_friendly_name(module_spec)
|
75
|
+
|
76
|
+
BrpmAuto.log "Uninstalling the automation script wrappers in the local BRPM instance..."
|
77
|
+
failed_scripts = each_auto_script_wrapper(module_spec.gem_dir) do |auto_script_path, automation_type|
|
78
|
+
BrpmAuto.log "Uninstalling automation script wrapper for script #{auto_script_path}..."
|
79
|
+
uninstall_auto_script_wrapper(auto_script_path, automation_type, module_friendly_name)
|
80
|
+
end
|
81
|
+
|
82
|
+
if failed_scripts.size > 0
|
83
|
+
BrpmAuto.log "Aborting the uninstall."
|
84
|
+
return false
|
85
|
+
end
|
86
|
+
|
87
|
+
BrpmAuto.log "Deleting the automation category for #{module_friendly_name}..."
|
88
|
+
delete_automation_category(module_friendly_name)
|
42
89
|
end
|
43
90
|
end
|
91
|
+
|
92
|
+
BrpmAuto.log "Uninstalling module #{module_name}#{module_version.nil? ? "" : " " + module_version}..."
|
93
|
+
`gem uninstall #{module_name}#{module_version.nil? ? "" : " -v " + module_version}`
|
94
|
+
|
95
|
+
return true
|
44
96
|
end
|
45
97
|
|
98
|
+
def module_installed?(module_name)
|
99
|
+
set_gem_home
|
100
|
+
|
101
|
+
Gem::Specification.find_all_by_name(module_name).size > 0
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
46
106
|
def prepare_brpm_connection
|
47
107
|
brpm_file = File.expand_path("~/.brpm")
|
48
108
|
|
@@ -73,25 +133,39 @@ class ModuleInstaller
|
|
73
133
|
true
|
74
134
|
end
|
75
135
|
|
76
|
-
def install_gem(
|
136
|
+
def install_gem(module_name_or_path, module_version)
|
137
|
+
if module_name_or_path =~ /\.gem$/ and File.file? module_name_or_path
|
138
|
+
BrpmAuto.log "Installing gem #{module_name_or_path}#{module_version.nil? ? "" : " " + module_version} from file..."
|
139
|
+
source = Gem::Source::SpecificFile.new module_name_or_path
|
140
|
+
module_spec = source.spec
|
141
|
+
|
142
|
+
gem = source.download module_spec
|
143
|
+
|
144
|
+
inst = Gem::Installer.new gem
|
145
|
+
inst.install
|
146
|
+
BrpmAuto.log "Done."
|
147
|
+
else
|
148
|
+
BrpmAuto.log "Installing gem #{module_name_or_path}#{module_version.nil? ? "" : " " + module_version}..."
|
149
|
+
version_req = module_version ? Gem::Requirement.create(Gem::Version.new(module_version)) : Gem::Requirement.default
|
150
|
+
specs = Gem.install(module_name_or_path, version_req)
|
151
|
+
|
152
|
+
BrpmAuto.log "Installed gems:"
|
153
|
+
specs.each do |spec|
|
154
|
+
BrpmAuto.log " - #{spec.name} #{spec.version}"
|
155
|
+
end
|
156
|
+
|
157
|
+
module_spec = specs.find { |spec| spec.name == module_name_or_path}
|
158
|
+
end
|
159
|
+
|
160
|
+
return module_spec, specs
|
161
|
+
end
|
162
|
+
|
163
|
+
def set_gem_home
|
77
164
|
if BrpmAuto.run_from_brpm or BrpmAuto.params.unit_test
|
78
165
|
# we need to override the GEM_HOME env var, otherwise the gems will be installed in BRPM's own gemset
|
79
166
|
ENV["GEM_HOME"] = BrpmAuto.get_gems_root_path
|
80
167
|
Gem.paths = ENV
|
81
168
|
end
|
82
|
-
|
83
|
-
if module_version
|
84
|
-
BrpmAuto.log "Executing command 'gem install #{module_name} -v #{module_version}'..."
|
85
|
-
specs = Gem.install(module_name, module_version)
|
86
|
-
else
|
87
|
-
BrpmAuto.log "Executing command 'gem install #{module_name}'..."
|
88
|
-
specs = Gem.install(module_name)
|
89
|
-
end
|
90
|
-
BrpmAuto.log "Installed gems:"
|
91
|
-
specs.each do |spec|
|
92
|
-
BrpmAuto.log " - #{spec.name} #{spec.version}"
|
93
|
-
end
|
94
|
-
specs
|
95
169
|
end
|
96
170
|
|
97
171
|
def install_bundle_if_necessary(spec)
|
@@ -141,7 +215,6 @@ class ModuleInstaller
|
|
141
215
|
end
|
142
216
|
|
143
217
|
def create_automation_error_if_not_exists(automation_error)
|
144
|
-
|
145
218
|
list_item = @brpm_rest_client.get_list_item_by_name("AutomationErrors", automation_error)
|
146
219
|
|
147
220
|
unless list_item
|
@@ -165,25 +238,30 @@ class ModuleInstaller
|
|
165
238
|
end
|
166
239
|
end
|
167
240
|
|
168
|
-
def
|
169
|
-
|
170
|
-
|
241
|
+
def delete_automation_category(module_friendly_name)
|
242
|
+
#TODO: first check if there are any manually created automation scripts added to this automation category. If yes then dont delete it
|
243
|
+
list_item = @brpm_rest_client.get_list_item_by_name("AutomationCategory", module_friendly_name)
|
244
|
+
|
245
|
+
if list_item
|
246
|
+
@brpm_rest_client.archive_list_item(list_item["id"])
|
247
|
+
@brpm_rest_client.delete_list_item(list_item["id"])
|
248
|
+
end
|
249
|
+
end
|
171
250
|
|
251
|
+
def each_auto_script_wrapper(module_path)
|
172
252
|
# For resource automations
|
173
253
|
resource_automation_dir = "#{module_path}/resource_automations"
|
174
254
|
resource_automation_script_paths = Dir.glob("#{resource_automation_dir}/*.rb")
|
175
255
|
|
176
256
|
failed_scripts = []
|
177
257
|
if resource_automation_script_paths.size > 0
|
178
|
-
BrpmAuto.log "Installing the wrapper scripts for the resource automations..."
|
179
|
-
|
180
258
|
resource_automation_script_paths.each do |auto_script_path|
|
181
259
|
begin
|
182
|
-
|
260
|
+
yield auto_script_path, "ResourceAutomation"
|
183
261
|
rescue Exception => e
|
184
262
|
failed_scripts << auto_script_path
|
185
263
|
BrpmAuto.log_error(e)
|
186
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
264
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
187
265
|
end
|
188
266
|
end
|
189
267
|
end
|
@@ -193,38 +271,31 @@ class ModuleInstaller
|
|
193
271
|
automation_script_paths = Dir.glob("#{automation_dir}/*.rb")
|
194
272
|
|
195
273
|
if automation_script_paths.size > 0
|
196
|
-
BrpmAuto.log "Installing the wrapper scripts for the automations..."
|
197
|
-
|
198
274
|
automation_script_paths.each do |auto_script_path|
|
199
275
|
begin
|
200
|
-
|
276
|
+
yield auto_script_path, "Automation"
|
201
277
|
rescue Exception => e
|
202
278
|
failed_scripts << auto_script_path
|
203
279
|
BrpmAuto.log_error(e)
|
204
|
-
BrpmAuto.log e.backtrace.join("\n\t")
|
280
|
+
BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
|
205
281
|
end
|
206
282
|
end
|
207
283
|
end
|
208
284
|
|
209
285
|
if failed_scripts.size > 0
|
210
|
-
BrpmAuto.log "The following wrapper scripts generated errors
|
286
|
+
BrpmAuto.log "The following wrapper scripts generated errors:"
|
211
287
|
failed_scripts.each do |failed_script|
|
212
288
|
BrpmAuto.log " - #{failed_script}"
|
213
289
|
end
|
214
|
-
else
|
215
|
-
BrpmAuto.log "All wrapper scripts were installed successfully."
|
216
290
|
end
|
291
|
+
|
292
|
+
failed_scripts
|
217
293
|
end
|
218
294
|
|
219
295
|
def install_auto_script_wrapper(auto_script_path, automation_type, module_name, module_friendly_name, integration_servers)
|
220
|
-
|
221
|
-
BrpmAuto.log "Installing the wrapper script for resource automation #{auto_script_name}..."
|
222
|
-
|
223
|
-
auto_script_config_path = "#{File.dirname(auto_script_path)}/#{auto_script_name}.meta"
|
296
|
+
auto_script_config = get_auto_script_config(auto_script_path, module_friendly_name)
|
224
297
|
|
225
|
-
|
226
|
-
auto_script_config = YAML.load(auto_script_config_content) || {}
|
227
|
-
auto_script_config["params"] = {} unless auto_script_config["params"]
|
298
|
+
BrpmAuto.log "Installing the wrapper script for automation script #{auto_script_config["name"]} (friendly name: #{auto_script_config["friendly_name"]}, automation type: #{automation_type})..."
|
228
299
|
|
229
300
|
if automation_type == "Automation"
|
230
301
|
add_version_params(auto_script_config["params"])
|
@@ -256,33 +327,24 @@ class ModuleInstaller
|
|
256
327
|
end
|
257
328
|
|
258
329
|
wrapper_script_content += "\n"
|
259
|
-
wrapper_script_content += get_script_executor_template(automation_type, module_name,
|
260
|
-
|
261
|
-
if auto_script_config["automation_category"]
|
262
|
-
automation_category = auto_script_config["automation_category"]
|
263
|
-
create_automation_category_if_not_exists(automation_category)
|
264
|
-
|
265
|
-
module_friendly_name = automation_category
|
266
|
-
end
|
267
|
-
|
268
|
-
auto_script_friendly_name = auto_script_config["friendly_name"] || "#{module_friendly_name} - #{auto_script_name.gsub("_", " ").capitalize}"
|
330
|
+
wrapper_script_content += get_script_executor_template(automation_type, module_name, auto_script_config["name"])
|
269
331
|
|
270
332
|
script = {}
|
271
|
-
script["name"] =
|
333
|
+
script["name"] = auto_script_config["friendly_name"]
|
272
334
|
script["description"] = auto_script_config["description"] || ""
|
273
335
|
script["automation_type"] = automation_type
|
274
336
|
script["automation_category"] = module_friendly_name
|
275
337
|
script["content"] = wrapper_script_content
|
276
338
|
script["integration_id"] = integration_server["id"] if auto_script_config["integration_server_type"] and integration_server
|
277
339
|
if automation_type == "ResourceAutomation"
|
278
|
-
script["unique_identifier"] = auto_script_config["resource_id"] ||
|
340
|
+
script["unique_identifier"] = auto_script_config["resource_id"] || auto_script_config["name"]
|
279
341
|
script["render_as"] = auto_script_config["render_as"] || "List"
|
280
342
|
end
|
281
343
|
|
282
344
|
script = @brpm_rest_client.create_or_update_script(script)
|
283
345
|
|
284
346
|
if script["aasm_state"] == "draft"
|
285
|
-
BrpmAuto.log "Updating the aasm_state of the script to 'pending'..."
|
347
|
+
BrpmAuto.log "Updating the aasm_state of the wrapper script to 'pending'..."
|
286
348
|
script_to_update = {}
|
287
349
|
script_to_update["id"] = script["id"]
|
288
350
|
script_to_update["aasm_state"] = "pending"
|
@@ -290,7 +352,7 @@ class ModuleInstaller
|
|
290
352
|
end
|
291
353
|
|
292
354
|
if script["aasm_state"] == "pending"
|
293
|
-
BrpmAuto.log "Updating the aasm_state of the script to 'released'..."
|
355
|
+
BrpmAuto.log "Updating the aasm_state of the wrapper script to 'released'..."
|
294
356
|
script_to_update = {}
|
295
357
|
script_to_update["id"] = script["id"]
|
296
358
|
script_to_update["aasm_state"] = "released"
|
@@ -298,6 +360,53 @@ class ModuleInstaller
|
|
298
360
|
end
|
299
361
|
end
|
300
362
|
|
363
|
+
def uninstall_auto_script_wrapper(auto_script_path, automation_type, module_friendly_name)
|
364
|
+
auto_script_config = get_auto_script_config(auto_script_path, module_friendly_name)
|
365
|
+
|
366
|
+
script = @brpm_rest_client.get_script_by_name(auto_script_config["friendly_name"])
|
367
|
+
|
368
|
+
unless script
|
369
|
+
BrpmAuto.log "Script #{auto_script_config["friendly_name"]} was not found, probably already deleted. Continuing."
|
370
|
+
return
|
371
|
+
end
|
372
|
+
|
373
|
+
if script["aasm_state"] == "released"
|
374
|
+
BrpmAuto.log "Updating the aasm_state of the wrapper script to 'retired'..."
|
375
|
+
script_to_update = {}
|
376
|
+
script_to_update["id"] = script["id"]
|
377
|
+
script_to_update["aasm_state"] = "retired"
|
378
|
+
script = @brpm_rest_client.update_script_from_hash(script_to_update)
|
379
|
+
end
|
380
|
+
|
381
|
+
if script["aasm_state"] == "retired"
|
382
|
+
BrpmAuto.log "Updating the aasm_state of the wrapper script to 'archived'..."
|
383
|
+
script_to_update = {}
|
384
|
+
script_to_update["id"] = script["id"]
|
385
|
+
script_to_update["aasm_state"] = "archived"
|
386
|
+
script = @brpm_rest_client.update_script_from_hash(script_to_update)
|
387
|
+
end
|
388
|
+
|
389
|
+
if script["aasm_state"] == "archived_state"
|
390
|
+
BrpmAuto.log "Deleting the wrapper script..."
|
391
|
+
@brpm_rest_client.delete_script(script["id"])
|
392
|
+
else
|
393
|
+
raise "Script #{auto_script_config["friendly_name"]} is not in aasm_state 'archived' so unable to delete it."
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
397
|
+
def get_auto_script_config(auto_script_path, module_friendly_name)
|
398
|
+
auto_script_name = File.basename(auto_script_path, ".rb")
|
399
|
+
auto_script_config_path = "#{File.dirname(auto_script_path)}/#{auto_script_name}.meta"
|
400
|
+
|
401
|
+
auto_script_config_content = File.exists?(auto_script_config_path) ? File.read(auto_script_config_path) : ""
|
402
|
+
auto_script_config = YAML.load(auto_script_config_content) || {}
|
403
|
+
auto_script_config["params"] = auto_script_config["params"] || {}
|
404
|
+
auto_script_config["name"] = File.basename(auto_script_path, ".rb")
|
405
|
+
auto_script_config["friendly_name"] = auto_script_config["friendly_name"] || "#{module_friendly_name} - #{auto_script_config["name"].gsub("_", " ").capitalize}"
|
406
|
+
|
407
|
+
auto_script_config
|
408
|
+
end
|
409
|
+
|
301
410
|
def add_version_params(auto_script_params)
|
302
411
|
include_position_attribute = false
|
303
412
|
if auto_script_params.find { |_, param| param.has_key?("position") }
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
describe 'Module installer' do
|
4
|
+
before(:all) do
|
5
|
+
create_brpm_file
|
6
|
+
setup_brpm_auto
|
7
|
+
end
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
module_installer = ModuleInstaller.new
|
11
|
+
|
12
|
+
brpm_specs = Gem::Specification.find_all_by_name("brpm_module_brpm")
|
13
|
+
|
14
|
+
brpm_specs.each do |brpm_spec|
|
15
|
+
BrpmAuto.log "Module brpm_module_brpm (#{brpm_spec.version.to_s}) is already installed, uninstalling it..."
|
16
|
+
module_installer.uninstall_module("brpm_module_brpm", brpm_spec.version.to_s)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should install the BRPM module from rubygems.org' do
|
21
|
+
module_installer = ModuleInstaller.new
|
22
|
+
module_installer.install_module("brpm_module_brpm")
|
23
|
+
|
24
|
+
expect{Gem::Specification.find_by_name("brpm_module_brpm")}.not_to raise_error #(Gem::LoadError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should install a specific version of the BRPM module from rubygems.org' do
|
28
|
+
module_installer = ModuleInstaller.new
|
29
|
+
module_installer.install_module("brpm_module_brpm", "0.1.29")
|
30
|
+
|
31
|
+
expect{Gem::Specification.find_by_name("brpm_module_brpm", Gem::Requirement.create(Gem::Version.new("0.1.29")))}.not_to raise_error #(Gem::LoadError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should install a BRPM module from a local gem file' do
|
35
|
+
`wget https://rubygems.org/downloads/brpm_module_brpm-0.1.29.gem` unless File.exists?("./brpm_module_brpm-0.1.29.gem")
|
36
|
+
|
37
|
+
module_installer = ModuleInstaller.new
|
38
|
+
module_installer.install_module("./brpm_module_brpm-0.1.29.gem")
|
39
|
+
|
40
|
+
expect{Gem::Specification.find_by_name("brpm_module_brpm", Gem::Requirement.create(Gem::Version.new("0.1.29")))}.not_to raise_error #(Gem::LoadError)
|
41
|
+
end
|
42
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'yaml'
|
2
3
|
require_relative "../brpm_auto"
|
3
4
|
|
5
|
+
FileUtils.mkdir_p "#{ENV["BRPM_HOME"]}/modules" if ENV["BRPM_HOME"]
|
4
6
|
FileUtils.mkdir_p "/tmp/brpm_content"
|
5
7
|
|
6
8
|
def setup_brpm_auto
|
@@ -9,7 +11,12 @@ end
|
|
9
11
|
|
10
12
|
def get_default_params
|
11
13
|
params = {}
|
14
|
+
params['unit_test'] = 'true'
|
12
15
|
params['also_log_to_console'] = 'true'
|
16
|
+
|
17
|
+
params['brpm_url'] = 'http://brpm-content.pulsar-it.be:8088/brpm'
|
18
|
+
params['brpm_api_token'] = ENV["BRPM_API_TOKEN"]
|
19
|
+
|
13
20
|
params['output_dir'] = "/tmp/brpm_content"
|
14
21
|
|
15
22
|
params
|
@@ -40,3 +47,16 @@ def decrypt_string_with_prefix(input) # mocked method
|
|
40
47
|
|
41
48
|
input.gsub("_encrypted", "")
|
42
49
|
end
|
50
|
+
|
51
|
+
def create_brpm_file
|
52
|
+
unless File.exists?("~/.brpm")
|
53
|
+
params = get_default_params
|
54
|
+
brpm_params = {}
|
55
|
+
brpm_params["brpm_url"] = params["brpm_url"]
|
56
|
+
brpm_params["brpm_api_token"] = params["brpm_api_token"]
|
57
|
+
|
58
|
+
File.open(File.expand_path("~/.brpm"), "w") do |file|
|
59
|
+
file.puts(brpm_params.to_yaml)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
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.45
|
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-08-
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -100,6 +100,7 @@ description: The BRPM Content Framework is a lightweight framework that allows t
|
|
100
100
|
email: niek.bartholomeus@gmail.com
|
101
101
|
executables:
|
102
102
|
- brpm_install
|
103
|
+
- brpm_uninstall
|
103
104
|
- event_handler
|
104
105
|
- webhook_receiver
|
105
106
|
extensions: []
|
@@ -283,12 +284,12 @@ files:
|
|
283
284
|
- modules/framework/automations/install_module.meta
|
284
285
|
- modules/framework/automations/install_module.rb
|
285
286
|
- modules/framework/bin/brpm_install
|
287
|
+
- modules/framework/bin/brpm_uninstall
|
286
288
|
- modules/framework/bin/event_handler
|
287
289
|
- modules/framework/bin/webhook_receiver
|
288
290
|
- modules/framework/brpm_auto.rb
|
289
291
|
- modules/framework/brpm_framework.rb
|
290
292
|
- modules/framework/brpm_script_executor.rb
|
291
|
-
- modules/framework/config.yml
|
292
293
|
- modules/framework/config/customer_include.rb
|
293
294
|
- modules/framework/config/server.yml
|
294
295
|
- modules/framework/customer_include_default.rb
|
@@ -314,6 +315,7 @@ files:
|
|
314
315
|
- modules/framework/tests/customer_include/config/server.yml
|
315
316
|
- modules/framework/tests/customer_include_spec.rb
|
316
317
|
- modules/framework/tests/local_jirb.rb
|
318
|
+
- modules/framework/tests/module_installer_spec.rb
|
317
319
|
- modules/framework/tests/params_spec.rb
|
318
320
|
- modules/framework/tests/request_params_spec.rb
|
319
321
|
- modules/framework/tests/server_yaml_spec.rb
|
@@ -1,7 +0,0 @@
|
|
1
|
-
version: 0.1.42
|
2
|
-
|
3
|
-
author: Niek Bartholomeus
|
4
|
-
email: niek.bartholomeus@gmail.com
|
5
|
-
homepage: https://github.com/BMC-RLM/brpm_content
|
6
|
-
summary: BRPM Content Framework
|
7
|
-
description: The BRPM Content Framework is a lightweight framework that allows to run automation logic on top of BRPM in a modular, re-usable, testable and developer-friendly way
|