brpm_content_framework 0.2.32 → 0.2.33

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzQxZGE2NGI0ZGQ4YzgxZGY1YzQyYjBiZGIzOTE2YzQ2Y2RhZTdhYg==
4
+ ZGE3ODVjYmZiOTE3MzYwNTE0MjIwZWUzN2NkNDk5MGZlN2IwODE5YQ==
5
5
  data.tar.gz: !binary |-
6
- NDkxOWQ3ZTk0OTQ0ZDkyMTZlOWYxMTgzZWRjYjY2ZDQyMTJmZTMyMg==
6
+ MDYzNWYwZjQyNjAzYzNhMDgxNmQ3ZDdmYzg3Y2Y3MzcwYjUwZTc5ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODEzYWRlZjg4YWQ3ZDkwZTk3ODJjNjIwOGY0YzAwOGFmOWZmYjdhYTdjOTg2
10
- OWZjMzdkZjMyZDcyZWQ5MzI0M2RiYmFmZDM0YzFhMjVhNTNmNTU3YzE2NzM5
11
- ZjBiNGM2YzM1OTUyNjA2Y2RkOGI5YTY0NTJmM2FmZGViODhjYWE=
9
+ MzkxMDAyMDA4NGNmNTE0ZGY2ZjgyNTE5NDc3YjBjMDlkYmJiYzFhZWE3YjY5
10
+ ZTRkOGFhMjc1OGVlYzQ1ZWM5NDUyZTY0NzZiN2JmNjhiZmI1MjNhYWRkNWQ4
11
+ YWZkZDIyYzg2Mjg1YTU0NjYwZDRmZTBmNmNiZjIwMjNhYmRlNWQ=
12
12
  data.tar.gz: !binary |-
13
- OTI2MWQ0N2U4NDgwMzM2OThhMGE2NGE0MDQ2ODRlMzdiZmI0NzJhMWEwYTFi
14
- MzQxYjkzZDMyOTUwM2U5OGUxMmZjN2JjNTJjOTA1NWRjMTRkMjgzM2NlNzhk
15
- YjEzZmExMTUzZGM4ZGZhY2VkMGRhYWZhZDRkODAzOGUzNjk2YmY=
13
+ OTRlZDMyNzk0Yjk0OTFmNzc0ZjhmOTk3M2Q1NmQwYzJiYWRjNGU2Y2NiYzc2
14
+ MmE4Njk4ZmM1ZDc3NTU3ZDg1M2VmYTdmMmY2YTMyMDE2NWJhNzI3Mzc1YzRl
15
+ NTliNWMwZDQyOWVjOGRkYTI1MzBmNDFiMWE0NDQyMmY5NmIxMzk=
data/config.yml CHANGED
@@ -1,4 +1,4 @@
1
- version: 0.2.32
1
+ version: 0.2.33
2
2
 
3
3
  author: Niek Bartholomeus
4
4
  email: niek.bartholomeus@gmail.com
@@ -11,4 +11,5 @@ RUN gem install brpm_content_framework --ignore-dependencies -v "$BRPM_CONTENT_F
11
11
  ADD . /
12
12
 
13
13
  VOLUME [ "/workdir" ]
14
- VOLUME [ "/automation_results" ]
14
+ VOLUME [ "/automation_results" ]
15
+ VOLUME [ "/script_support" ]
@@ -2,7 +2,6 @@
2
2
  USAGE="publish_module_version.sh <module name>"
3
3
 
4
4
  MODULE_NAME=$1
5
- MODULE_VERSION=$2
6
5
 
7
6
  if [ -z "$MODULE_NAME" ]; then
8
7
  echo "Module name is not specified. Aborting."
@@ -12,23 +11,29 @@ fi
12
11
 
13
12
  cd $(dirname $0)/../../../$MODULE_NAME
14
13
 
14
+ echo ""
15
15
  echo ">>> Publishing the module as a gem to rubygems.org..."
16
16
  rake release
17
- if [ -f "Dockerfile" ]; then
17
+ if [ -f "docker/Dockerfile" ]; then
18
18
  MODULE_VERSION=$(eval "sed -n \"s=version: \(.*\)=\1=p\" config.yml")
19
19
 
20
+ cd docker
21
+
20
22
  OLD_MODULE_VERSION=$(eval "sed -n \"s=ENV VERSION \(.*\)=\1=p\" Dockerfile")
21
23
  sed -i "" s/$OLD_MODULE_VERSION/$MODULE_VERSION/ Dockerfile
22
24
 
25
+ echo ""
23
26
  echo ">>> Building the docker image..."
24
- docker build -t bmcrlm/$MODULE_NAME:$MODULE_VERSION .
27
+ docker build -t bmcrlm/$MODULE_NAME:$MODULE_VERSION . || { echo 'Aborting' ; exit 1; }
28
+
29
+ sed -i "" s/$MODULE_VERSION/$OLD_MODULE_VERSION/ Dockerfile
25
30
 
31
+ echo ""
26
32
  echo ">>> Publishing the docker image to the docker hub..."
27
- docker push bmcrlm/$MODULE_NAME:$MODULE_VERSION
33
+ docker push bmcrlm/$MODULE_NAME:$MODULE_VERSION || { echo 'Aborting' ; exit 1; }
28
34
 
35
+ echo ""
29
36
  echo ">>> Tagging the module version as 'latest'..."
30
- docker tag -f bmcrlm/$MODULE_NAME:$MODULE_VERSION bmcrlm/$MODULE_NAME:latest
31
- docker push bmcrlm/$MODULE_NAME:latest
32
-
33
- sed -i "" s/$MODULE_VERSION/$OLD_MODULE_VERSION/ Dockerfile
37
+ docker tag -f bmcrlm/$MODULE_NAME:$MODULE_VERSION bmcrlm/$MODULE_NAME:latest || { echo 'Aborting' ; exit 1; }
38
+ docker push bmcrlm/$MODULE_NAME:latest || { echo 'Aborting' ; exit 1; }
34
39
  fi
@@ -25,6 +25,7 @@ class BrpmAuto
25
25
  attr_reader :request_params
26
26
  attr_reader :all_params
27
27
  attr_reader :integration_settings
28
+ attr_reader :global_params
28
29
 
29
30
  attr_reader :framework_root_path
30
31
 
@@ -42,8 +43,8 @@ class BrpmAuto
42
43
  def setup(params = {})
43
44
  @params = Params.new(params)
44
45
 
45
- load_server_params
46
- load_customer_include_file
46
+ @global_params = get_global_params
47
+ @global_params.merge!(load_customer_include_file)
47
48
 
48
49
  if @params.run_from_brpm
49
50
  @logger = BrpmLogger.new
@@ -78,27 +79,26 @@ class BrpmAuto
78
79
  @params
79
80
  end
80
81
 
81
- def load_server_params
82
+ def get_global_params
82
83
  server_config_file_path = "#{self.params.config_dir}/server.yml"
83
84
  if File.exists?(server_config_file_path)
84
- server_config = YAML.load_file(server_config_file_path)
85
- server_config.each do |key, value|
86
- @params[key] = value unless @params.has_key?(key)
87
- end
85
+ YAML.load_file(server_config_file_path) || {}
86
+ else
87
+ {}
88
88
  end
89
89
  end
90
90
 
91
91
  def load_customer_include_file
92
92
  customer_include_file_path = "#{self.params.config_dir}/customer_include.rb"
93
+ params = {}
93
94
  if File.exists?(customer_include_file_path)
94
95
  load customer_include_file_path # use load instead of require to avoid having to restart BRPM after modifying the customer include file in a resource automation scenario
95
96
  if defined?(get_customer_include_params)
96
- customer_include_params = get_customer_include_params
97
- customer_include_params.each do |key, value|
98
- @params[key] = value
99
- end
97
+ params = get_customer_include_params || {}
100
98
  end
101
99
  end
100
+
101
+ params
102
102
  end
103
103
 
104
104
  def initialize_logger(log_file, also_log_to_console = false)
@@ -15,112 +15,117 @@ class BrpmScriptExecutor
15
15
  end
16
16
 
17
17
  def execute_automation_script_in_separate_process_internal(modul, name, params, automation_type, parent_id = nil, offset = nil, max_records = nil)
18
- BrpmAuto.setup(params)
19
- BrpmAuto.log ""
20
- BrpmAuto.log "Executing #{automation_type} '#{name}' from module '#{modul}' in a separate process..."
21
-
22
- BrpmAuto.log "Finding the module's version..."
23
- case automation_type
24
- when "automation"
25
- module_version = params["module_version"] || get_latest_installed_version(modul)
26
- when "resource_automation"
27
- module_version = get_latest_installed_version(modul) #TODO: get the module version of the calling script
28
- else
29
- raise "Automation type #{automation_type} is not supported."
30
- end
18
+ begin
19
+ BrpmAuto.setup(params)
20
+ BrpmAuto.log ""
21
+ BrpmAuto.log "Executing #{automation_type} '#{name}' from module '#{modul}' in a separate process..."
22
+
23
+ BrpmAuto.log "Finding the module's version..."
24
+ case automation_type
25
+ when "automation"
26
+ module_version = params["module_version"] || get_latest_installed_version(modul)
27
+ when "resource_automation"
28
+ module_version = get_latest_installed_version(modul) #TODO: get the module version of the calling script
29
+ else
30
+ raise "Automation type #{automation_type} is not supported."
31
+ end
31
32
 
32
- case BrpmAuto.params["execute_automation_scripts_in_docker"]
33
- when "always"
34
- use_docker = true
35
- when "if_docker_image_exists"
36
- BrpmAuto.log "Checking if a docker image exists for bmcrlm/#{modul}:#{module_version}..."
37
- output = `docker history -q bmcrlm/#{modul}:#{module_version} 2>&1 >/dev/null`
38
- if output.empty?
33
+ case BrpmAuto.global_params["execute_automation_scripts_in_docker"] || params["execute_automation_scripts_in_docker"]
34
+ when "always"
39
35
  use_docker = true
36
+ when "if_docker_image_exists"
37
+ BrpmAuto.log "Checking if a docker image exists for bmcrlm/#{modul}:#{module_version}..."
38
+ output = `docker history -q bmcrlm/#{modul}:#{module_version} 2>&1 >/dev/null`
39
+ use_docker = output.empty?
40
40
  else
41
- BrpmAuto.log "The image doesn't exist locally, checking if we can pull it from the Docker Hub..."
42
- output = `docker pull bmcrlm/#{modul}:#{module_version}`
43
- use_docker = (output =~ /Image is up to date for/)
41
+ use_docker = false
44
42
  end
45
- else
46
- use_docker = false
47
- end
48
- BrpmAuto.log "The automation script will be executed in a docker container." if use_docker
49
-
50
- working_path = File.expand_path(BrpmAuto.params.output_dir)
51
- params_file = "params_#{params["SS_run_key"] || params["run_key"] || "000"}.yml"
52
- params_path = "#{working_path}/#{params_file}"
53
- automation_results_path = params["SS_automation_results_dir"] || working_path
54
-
55
- if use_docker
56
- params["SS_output_dir"] = "/workdir"
57
- params["SS_output_file"].sub!(working_path, "/workdir") if params["SS_output_file"]
58
- params["SS_automation_results_dir"] = "/automation_results"
59
-
60
- params["log_file"].sub!(working_path, "/workdir") if params["log_file"]
61
- end
62
-
63
- BrpmAuto.log "Temporarily storing the params to #{params_path}..."
64
- File.open(params_path, "w") do |file|
65
- file.puts(params.to_yaml)
66
- end
67
-
68
- if use_docker
69
- BrpmAuto.log "Executing the script in a docker container..."
70
- command = "docker run -v #{working_path}:/workdir -v #{automation_results_path}:/automation_results --rm bmcrlm/#{modul}:#{module_version} /docker_execute_automation \"#{name}\" \"/workdir/#{params_file}\" \"#{automation_type}\""
71
- if automation_type == "resource_automation"
72
- command += " \"#{parent_id}\"" if parent_id
73
- command += " \"#{offset}\"" if offset
74
- command += " \"#{max_records}\"" if max_records
43
+ BrpmAuto.log "The automation script will be executed in a docker container." if use_docker
44
+
45
+ working_path = File.expand_path(BrpmAuto.params.output_dir)
46
+ params_file = "params_#{params["SS_run_key"] || params["run_key"] || "000"}.yml"
47
+ params_path = "#{working_path}/#{params_file}"
48
+ automation_results_path = params["SS_automation_results_dir"] || working_path
49
+ script_support_path = params["SS_script_support_path"] || working_path
50
+
51
+ if use_docker
52
+ params = params.clone # we don't want to modify the current session's params
53
+ params["SS_output_dir"] = "/workdir"
54
+ params["SS_output_file"].sub!(working_path, "/workdir") if params["SS_output_file"]
55
+ params["SS_automation_results_dir"] = "/automation_results"
56
+ params["SS_script_support_path"] = "/script_support"
57
+
58
+ params["log_file"].sub!(working_path, "/workdir") if params["log_file"]
75
59
  end
76
- BrpmAuto.log command
77
- return_value = system(command)
78
- else
79
- env_vars = {}
80
- env_vars["GEM_HOME"] = ENV["BRPM_CONTENT_HOME"] || "#{ENV["BRPM_HOME"]}/modules"
81
60
 
82
- module_path = get_module_gem_path(modul, module_version)
61
+ BrpmAuto.log "Temporarily storing the params to #{params_path}..."
62
+ File.open(params_path, "w") do |file|
63
+ file.puts(params.to_yaml)
64
+ end
83
65
 
84
- if File.exists?(module_path)
85
- BrpmAuto.log "Found module #{modul} #{module_version || ""} in path #{module_path}."
66
+ if use_docker
67
+ BrpmAuto.log "Executing the script in a docker container..."
68
+ command = "docker run -v #{working_path}:/workdir -v #{automation_results_path}:/automation_results -v #{script_support_path}:/script_support --rm bmcrlm/#{modul}:#{module_version} /docker_execute_automation \"#{name}\" \"/workdir/#{params_file}\" \"#{automation_type}\""
69
+ if automation_type == "resource_automation"
70
+ command += " \"#{parent_id}\"" if parent_id
71
+ command += " \"#{offset}\"" if offset
72
+ command += " \"#{max_records}\"" if max_records
73
+ end
74
+ BrpmAuto.log command
75
+ return_value = system(command)
86
76
  else
87
- raise Gem::GemNotFoundException, "Module #{modul} version #{module_version} is not installed. Expected it on path #{module_path}."
77
+ env_vars = {}
78
+ env_vars["GEM_HOME"] = ENV["BRPM_CONTENT_HOME"] || "#{ENV["BRPM_HOME"]}/modules"
79
+
80
+ module_path = get_module_gem_path(modul, module_version)
81
+
82
+ if File.exists?(module_path)
83
+ BrpmAuto.log "Found module #{modul} #{module_version || ""} in path #{module_path}."
84
+ else
85
+ raise Gem::GemNotFoundException, "Module #{modul} version #{module_version} is not installed. Expected it on path #{module_path}."
86
+ end
87
+
88
+ gemfile_path = "#{module_path}/Gemfile"
89
+ if File.exists?(gemfile_path)
90
+ BrpmAuto.log "Using Gemfile #{gemfile_path}."
91
+ env_vars["BUNDLE_GEMFILE"] = gemfile_path
92
+ require_bundler = "require 'bundler/setup';"
93
+ else
94
+ BrpmAuto.log("This module doesn't have a Gemfile.")
95
+ require_bundler = ""
96
+ end
97
+
98
+ BrpmAuto.log "Executing the script in a separate process..."
99
+ return_value = Bundler.clean_system(env_vars, "ruby", "-e", "#{require_bundler}require 'brpm_script_executor'; BrpmScriptExecutor.execute_automation_script_from_other_process(\"#{modul}\", \"#{name}\", \"#{params_path}\", \"#{automation_type}\", \"#{parent_id}\", \"#{offset}\", \"#{max_records}\")")
88
100
  end
89
101
 
90
- gemfile_path = "#{module_path}/Gemfile"
91
- if File.exists?(gemfile_path)
92
- BrpmAuto.log "Using Gemfile #{gemfile_path}."
93
- env_vars["BUNDLE_GEMFILE"] = gemfile_path
94
- require_bundler = "require 'bundler/setup';"
95
- else
96
- BrpmAuto.log("This module doesn't have a Gemfile.")
97
- require_bundler = ""
102
+ FileUtils.rm(params_path) if File.exists?(params_path)
103
+ if return_value.nil?
104
+ message = "The process that executed the automation script returned with 'Command execution failed'."
105
+ BrpmAuto.log_error message
106
+ raise message
107
+ elsif return_value == false
108
+ message = "The process that executed the automation script returned with non-zero exit code: #{$?.exitstatus}"
109
+ BrpmAuto.log_error message
110
+ raise message
98
111
  end
99
112
 
100
- BrpmAuto.log "Executing the script in a separate process..."
101
- return_value = Bundler.clean_system(env_vars, "ruby", "-e", "#{require_bundler}require 'brpm_script_executor'; BrpmScriptExecutor.execute_automation_script_from_other_process(\"#{modul}\", \"#{name}\", \"#{params_path}\", \"#{automation_type}\", \"#{parent_id}\", \"#{offset}\", \"#{max_records}\")")
102
- end
113
+ if automation_type == "resource_automation"
114
+ result_path = params_path.sub!("params", "result")
115
+ BrpmAuto.log "Loading the result from #{result_path} and cleaning it up..."
116
+ result = YAML.load_file(result_path)
117
+ FileUtils.rm result_path
103
118
 
104
- FileUtils.rm(params_path) if File.exists?(params_path)
105
- if return_value.nil?
106
- message = "The process that executed the automation script returned with 'Command execution failed'."
107
- BrpmAuto.log_error message
108
- raise message
109
- elsif return_value == false
110
- message = "The process that executed the automation script returned with non-zero exit code: #{$?.exitstatus}"
111
- BrpmAuto.log_error message
112
- raise message
113
- end
119
+ result
120
+ else
121
+ return_value
122
+ end
114
123
 
115
- if automation_type == "resource_automation"
116
- result_file = params_file.sub!("params", "result")
117
- BrpmAuto.log "Loading the result from #{result_file} and cleaning it up..."
118
- result = YAML.load_file(result_file)
119
- FileUtils.rm result_file
124
+ rescue Exception => e
125
+ BrpmAuto.log_error "#{e}"
126
+ BrpmAuto.log "\n\t" + e.backtrace.join("\n\t")
120
127
 
121
- result
122
- else
123
- return_value
128
+ raise e
124
129
  end
125
130
  end
126
131
 
@@ -136,8 +141,8 @@ class BrpmScriptExecutor
136
141
  BrpmAuto.log " BRPM Content framework is version #{BrpmAuto.version}."
137
142
 
138
143
  if BrpmAuto.params["SS_run_key"] and BrpmAuto.params["SS_script_support_path"]
139
- BrpmAuto.log " Loading the BRPM core framework's libraries..."
140
- load File.expand_path("#{File.dirname(__FILE__)}/../infrastructure/create_output_file.rb")
144
+ BrpmAuto.log " Setting up the BRPM core framework..."
145
+ load File.expand_path("#{File.dirname(__FILE__)}/../infrastructure/setup_brpm_core_framework.rb")
141
146
  end
142
147
 
143
148
  result = execute_automation_script_internal(modul, name, params, automation_type, parent_id, offset, max_records)
@@ -26,6 +26,8 @@ class BrpmLogger < LoggerBase
26
26
 
27
27
  log_message = "#{prefix}#{message}\n"
28
28
 
29
+ print(log_message) if BrpmAuto.params.also_log_to_console
30
+
29
31
  File.open(@request_log_file_path, "a") do |log_file|
30
32
  log_file.print(log_message)
31
33
  end
@@ -33,7 +35,5 @@ class BrpmLogger < LoggerBase
33
35
  File.open(@step_run_log_file_path, "a") do |log_file|
34
36
  log_file.print(log_message)
35
37
  end
36
-
37
- print(log_message) if BrpmAuto.params.also_log_to_console
38
38
  end
39
39
  end
@@ -13,6 +13,7 @@ class ModuleInstaller
13
13
  brpm_content_spec = specs.find { |spec| spec.name == "brpm_content_framework" } if specs
14
14
 
15
15
  install_bundle(module_spec)
16
+ pull_docker_image(module_spec)
16
17
  else
17
18
  module_name = module_name_or_path
18
19
  module_spec = Gem::Specification.find_by_name(module_name)
@@ -166,6 +167,21 @@ class ModuleInstaller
166
167
  end
167
168
  end
168
169
 
170
+ def pull_docker_image(spec)
171
+ case BrpmAuto.global_params["execute_automation_scripts_in_docker"]
172
+ when "always", "if_docker_image_exists"
173
+ BrpmAuto.log "Pulling the docker image from the Docker Hub..."
174
+ output = `docker pull bmcrlm/#{spec.name}:#{spec.version}`
175
+ unless output =~ /Image is up to date for/
176
+ if BrpmAuto.global_params["execute_automation_scripts_in_docker"] == "always"
177
+ raise "Docker image bmcrlm/#{spec.name}:#{spec.version} doesn't exist."
178
+ elsif BrpmAuto.global_params["execute_automation_scripts_in_docker"] == "if_docker_image_exists"
179
+ BrpmAuto.log "Docker image bmcrlm/#{spec.name}:#{spec.version} doesn't exist."
180
+ end
181
+ end
182
+ end
183
+ end
184
+
169
185
  def get_symlink_path
170
186
  "#{ENV["GEM_HOME"]}/gems/brpm_content_framework-latest"
171
187
  end
@@ -76,7 +76,7 @@ describe 'BRPM Script Executor' do
76
76
  expect(result.count).to eql(3)
77
77
  end
78
78
 
79
- it "should execute a resource automation script in a docker container" do
79
+ xit "should execute a resource automation script in a docker container" do
80
80
  params = get_default_params
81
81
  params['output_dir'] = File.expand_path("~/tmp/brpm_content") # docker volume mappong only works from the current user's home directory on Mac OSX
82
82
  params["execute_automation_scripts_in_docker"] = "always"
@@ -12,7 +12,7 @@ describe 'Customer include' do
12
12
 
13
13
  BrpmAuto.setup(input_params)
14
14
 
15
- params = BrpmAuto.params
15
+ params = BrpmAuto.global_params
16
16
 
17
17
  expect(params).to have_key("key1")
18
18
  expect(params["key1"]).to eql("value1")
@@ -12,7 +12,7 @@ describe 'Server yaml' do
12
12
 
13
13
  BrpmAuto.setup(input_params)
14
14
 
15
- params = BrpmAuto.params
15
+ params = BrpmAuto.global_params
16
16
 
17
17
  expect(params).to have_key("key2")
18
18
  expect(params["key2"]).to eql("value2")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brpm_content_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.32
4
+ version: 0.2.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - Niek Bartholomeus
@@ -179,13 +179,12 @@ files:
179
179
  - bin/event_handler
180
180
  - bin/webhook_receiver
181
181
  - config.yml
182
+ - docker/Dockerfile
183
+ - docker/docker_execute_automation
182
184
  - infrastructure/.bashrc
183
185
  - infrastructure/.brpm
184
186
  - infrastructure/config/customer_include.rb
185
187
  - infrastructure/config/server.yml
186
- - infrastructure/create_output_file.rb
187
- - infrastructure/docker/Dockerfile
188
- - infrastructure/docker/docker_execute_automation
189
188
  - infrastructure/log.html
190
189
  - infrastructure/module_template/Dockerfile
191
190
  - infrastructure/module_template/Gemfile
@@ -211,6 +210,7 @@ files:
211
210
  - infrastructure/scripts/run_event_handler.sh
212
211
  - infrastructure/scripts/run_webhook_receiver.cmd
213
212
  - infrastructure/scripts/run_webhook_receiver.sh
213
+ - infrastructure/setup_brpm_core_framework.rb
214
214
  - infrastructure/silent_install_options_4.6.txt
215
215
  - infrastructure/silent_install_options_upgrade_4.6.txt
216
216
  - infrastructure/smtp_settings.rb