hybrid_platforms_conductor 32.15.0 → 32.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -1
- data/lib/hybrid_platforms_conductor/connector.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +1 -1
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +7 -0
- data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 45e61d4a95176f285aaf24fdd34a78440dd7db0decf1c138a9f42f028afc09b4
|
|
4
|
+
data.tar.gz: fc142e6e71ac4f3240d42cb42079a7b05ae811d4da4f1f0508dd2ac5541285d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ac9b4f7a7aa937fcdd18042880fec76a5ea567d3cdeb15135f8f9cfa12652ca0adfc3dffbc115f59ea793fd6a06f567e8081c10c8a6080d51a8ac58db56708b4
|
|
7
|
+
data.tar.gz: ba302151aca73a94f4492774b6ddf32524b02351c3265591430b689e713e2de39af352fbee8d7f09c4e58667f5a960a8ec8027f583c13e3c929d0e59cd381ca3
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [v32.16.0](https://github.com/sweet-delights/hybrid-platforms-conductor/compare/v32.15.0...v32.16.0) (2021-05-31 17:55:49)
|
|
2
|
+
|
|
3
|
+
## Global changes
|
|
4
|
+
### Patches
|
|
5
|
+
|
|
6
|
+
* [[Feature(cmd_runner)] Add option to force bash usage in run_cmd](https://github.com/sweet-delights/hybrid-platforms-conductor/commit/0711f1f33fc8f282b925726e0631ae78bf1337b5)
|
|
7
|
+
|
|
8
|
+
## Changes for cmd_runner
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* [[Feature(cmd_runner)] Add option to force bash usage in run_cmd](https://github.com/sweet-delights/hybrid-platforms-conductor/commit/0711f1f33fc8f282b925726e0631ae78bf1337b5)
|
|
12
|
+
|
|
1
13
|
# [v32.15.0](https://github.com/sweet-delights/hybrid-platforms-conductor/compare/v32.14.0...v32.15.0) (2021-05-31 14:43:32)
|
|
2
14
|
|
|
3
15
|
## Global changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'logger'
|
|
2
|
+
require 'tempfile'
|
|
2
3
|
require 'tty-command'
|
|
3
4
|
require 'hybrid_platforms_conductor/logger_helpers'
|
|
4
5
|
require 'hybrid_platforms_conductor/io_router'
|
|
@@ -66,6 +67,7 @@ module HybridPlatformsConductor
|
|
|
66
67
|
# * *timeout*: The command ended in timeout
|
|
67
68
|
# * *timeout* (Integer or nil): Timeout to apply for the command to be run, or nil for no timeout [default: nil]
|
|
68
69
|
# * *no_exception* (Boolean): If true, don't throw exception in case of error [default: false]
|
|
70
|
+
# * *force_bash* (Boolean): If true, then make sure command is invoked with bash instead of sh [default: false]
|
|
69
71
|
# Result::
|
|
70
72
|
# * Integer or Symbol: Exit status of the command, or Symbol in case of error. In case of dry-run mode the expected code is returned without executing anything.
|
|
71
73
|
# * String: Standard output of the command
|
|
@@ -78,7 +80,8 @@ module HybridPlatformsConductor
|
|
|
78
80
|
log_stderr_to_io: nil,
|
|
79
81
|
expected_code: 0,
|
|
80
82
|
timeout: nil,
|
|
81
|
-
no_exception: false
|
|
83
|
+
no_exception: false,
|
|
84
|
+
force_bash: false
|
|
82
85
|
)
|
|
83
86
|
expected_code = [expected_code] unless expected_code.is_a?(Array)
|
|
84
87
|
if @dry_run
|
|
@@ -101,6 +104,14 @@ module HybridPlatformsConductor
|
|
|
101
104
|
nil
|
|
102
105
|
end
|
|
103
106
|
start_time = Time.now if log_debug?
|
|
107
|
+
bash_file = nil
|
|
108
|
+
if force_bash
|
|
109
|
+
bash_file = Tempfile.new('hpc_bash')
|
|
110
|
+
bash_file.write(cmd)
|
|
111
|
+
bash_file.chmod 0700
|
|
112
|
+
bash_file.close
|
|
113
|
+
cmd = "/bin/bash -c #{bash_file.path}"
|
|
114
|
+
end
|
|
104
115
|
begin
|
|
105
116
|
# Make sure we keep a trace of stdout and stderr, even if it was not asked, just to use it in case of exceptions raised
|
|
106
117
|
cmd_result_stdout = ''
|
|
@@ -141,6 +152,7 @@ module HybridPlatformsConductor
|
|
|
141
152
|
cmd_stderr = "#{cmd_result_stderr.empty? ? '' : "#{cmd_result_stderr}\n"}#{$!}\n#{$!.backtrace.join("\n")}"
|
|
142
153
|
ensure
|
|
143
154
|
file_output.close unless file_output.nil?
|
|
155
|
+
bash_file.unlink unless bash_file.nil?
|
|
144
156
|
end
|
|
145
157
|
if log_debug?
|
|
146
158
|
elapsed = Time.now - start_time
|
|
@@ -65,17 +65,19 @@ module HybridPlatformsConductor
|
|
|
65
65
|
#
|
|
66
66
|
# Parameters::
|
|
67
67
|
# * *cmd* (String): The command to be run
|
|
68
|
+
# * *force_bash* (Boolean): If true, then make sure command is invoked with bash instead of sh [default: false]
|
|
68
69
|
# Result::
|
|
69
70
|
# * Integer: Exit code
|
|
70
71
|
# * String: Standard output
|
|
71
72
|
# * String: Error output
|
|
72
|
-
def run_cmd(cmd)
|
|
73
|
+
def run_cmd(cmd, force_bash: false)
|
|
73
74
|
@cmd_runner.run_cmd(
|
|
74
75
|
cmd,
|
|
75
76
|
timeout: @timeout,
|
|
76
77
|
log_to_stdout: false,
|
|
77
78
|
log_stdout_to_io: @stdout_io,
|
|
78
|
-
log_stderr_to_io: @stderr_io
|
|
79
|
+
log_stderr_to_io: @stderr_io,
|
|
80
|
+
force_bash: force_bash
|
|
79
81
|
)
|
|
80
82
|
end
|
|
81
83
|
|
|
@@ -37,7 +37,7 @@ module HybridPlatformsConductor
|
|
|
37
37
|
# Parameters::
|
|
38
38
|
# * *bash_cmds* (String): Bash commands to execute
|
|
39
39
|
def remote_bash(bash_cmds)
|
|
40
|
-
run_cmd "cd #{workspace_for(@node)} ; #{bash_cmds}"
|
|
40
|
+
run_cmd "cd #{workspace_for(@node)} ; #{bash_cmds}", force_bash: true
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
# Execute an interactive shell on the remote node
|
|
@@ -13,6 +13,13 @@ describe HybridPlatformsConductor::CmdRunner do
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
it 'runs a simple bash command and forces usage of bash' do
|
|
17
|
+
with_repository do |repository|
|
|
18
|
+
# Use set -o pipefail that does not work in /bin/sh
|
|
19
|
+
expect(test_cmd_runner.run_cmd "set -o pipefail ; echo TestStderr 1>&2 ; echo TestStdout", force_bash: true).to eq [0, "TestStdout\n", "TestStderr\n"]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
16
23
|
it 'runs a simple bash command and logs stdout and stderr to a file' do
|
|
17
24
|
with_repository do |repository|
|
|
18
25
|
test_cmd_runner.run_cmd "echo TestStderr 1>&2 ; sleep 1 ; echo TestStdout", log_to_file: "#{repository}/test_file"
|
|
@@ -31,7 +31,7 @@ module HybridPlatformsConductorTest
|
|
|
31
31
|
end
|
|
32
32
|
# We need to protect the access to this array as the mocked commands can be called by competing threads
|
|
33
33
|
remaining_expected_commands_mutex = Mutex.new
|
|
34
|
-
allow(cmd_runner).to receive(:run_cmd) do |cmd, log_to_file: nil, log_to_stdout: true, log_stdout_to_io: nil, log_stderr_to_io: nil, expected_code: 0, timeout: nil, no_exception: false|
|
|
34
|
+
allow(cmd_runner).to receive(:run_cmd) do |cmd, log_to_file: nil, log_to_stdout: true, log_stdout_to_io: nil, log_stderr_to_io: nil, expected_code: 0, timeout: nil, no_exception: false, force_bash: false|
|
|
35
35
|
# Check the remaining expected commands
|
|
36
36
|
found_command = nil
|
|
37
37
|
found_command_code = nil
|