hybrid_platforms_conductor 32.4.0 → 32.4.1
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/bin/nodes_to_deploy +11 -5
- data/lib/hybrid_platforms_conductor/nodes_handler.rb +8 -1
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +10 -0
- data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +25 -0
- metadata +10 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4e0dfe56d0297ba7c9c90dfbf4737cd6b4754b20a36f7dec0962d62a19b5bf2b
|
|
4
|
+
data.tar.gz: 3a0363efcb7dc771c9cf41911d3012fae0a764a465e4bd925f241a422d5f11b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e1dae403085c924a043dfee0185b46478eff9c99fa1d69848f5e92b571e4dfb1dc62ab1f80792d3b1928323eecf72a8f0904317b17facf3b92b6a07b82381112
|
|
7
|
+
data.tar.gz: 6156b57048a690c5bc6e91ffd61a8276b84b2a2196206a8b77779ee25fe559aa4a4ec21bf741f015736cb3796b9bf4c33d9ec0203b4e4ff7c44a77c1d06fbe83
|
data/bin/nodes_to_deploy
CHANGED
|
@@ -72,11 +72,17 @@ unless ignore_deploy_info
|
|
|
72
72
|
commit_id = node_deploy_info["commit_id_#{repo_idx}".to_sym]
|
|
73
73
|
impacted_nodes = cache_impacted_nodes.dig(repo_name, commit_id)
|
|
74
74
|
if impacted_nodes.nil?
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
begin
|
|
76
|
+
impacted_nodes, _single_impacted_nodes, _impacted_services, _impact_global = nodes_handler.impacted_nodes_from_git_diff(
|
|
77
|
+
repo_name,
|
|
78
|
+
from_commit: commit_id,
|
|
79
|
+
to_commit: 'master'
|
|
80
|
+
)
|
|
81
|
+
rescue HybridPlatformsConductor::NodesHandler::GitError
|
|
82
|
+
# Consider the node was deployed with a non-release branch commit (as it is missing)
|
|
83
|
+
# So we have to make sure we deploy it again
|
|
84
|
+
impacted_nodes = [node]
|
|
85
|
+
end
|
|
80
86
|
cache_impacted_nodes[repo_name] = {} unless cache_impacted_nodes.key?(repo_name)
|
|
81
87
|
cache_impacted_nodes[repo_name][commit_id] = impacted_nodes
|
|
82
88
|
end
|
|
@@ -40,6 +40,9 @@ module HybridPlatformsConductor
|
|
|
40
40
|
|
|
41
41
|
include LoggerHelpers, ParallelThreads
|
|
42
42
|
|
|
43
|
+
class GitError < RuntimeError
|
|
44
|
+
end
|
|
45
|
+
|
|
43
46
|
# Constructor
|
|
44
47
|
#
|
|
45
48
|
# Parameters::
|
|
@@ -484,7 +487,11 @@ module HybridPlatformsConductor
|
|
|
484
487
|
def impacted_nodes_from_git_diff(platform_name, from_commit: 'master', to_commit: nil, smallest_set: false)
|
|
485
488
|
platform = @platforms_handler.platform(platform_name)
|
|
486
489
|
raise "Unkown platform #{platform_name}. Possible platforms are #{@platforms_handler.known_platforms.map(&:name).sort.join(', ')}" if platform.nil?
|
|
487
|
-
|
|
490
|
+
begin
|
|
491
|
+
_exit_status, stdout, _stderr = @cmd_runner.run_cmd "cd #{platform.repository_path} && git --no-pager diff --no-color #{from_commit} #{to_commit.nil? ? '' : to_commit}", log_to_stdout: log_debug?
|
|
492
|
+
rescue CmdRunner::UnexpectedExitCodeError
|
|
493
|
+
raise GitError, $!.to_s
|
|
494
|
+
end
|
|
488
495
|
# Parse the git diff output to create a structured diff
|
|
489
496
|
# Hash< String, Hash< Symbol, Object > >: List of diffs info, per file name having a diff. Diffs info have the following properties:
|
|
490
497
|
# * *moved_to* (String): The new file path, in case it has been moved [optional]
|
|
@@ -33,6 +33,16 @@ describe HybridPlatformsConductor::NodesHandler do
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
it 'fails when the commit id is invalid' do
|
|
37
|
+
with_test_platform({}, true) do
|
|
38
|
+
with_cmd_runner_mocked([
|
|
39
|
+
[/cd .+\/my_remote_platform && git --no-pager diff --no-color invalid_id/, proc { raise HybridPlatformsConductor::CmdRunner::UnexpectedExitCodeError, 'Mocked git error due to an invalid commit id' }]
|
|
40
|
+
]) do
|
|
41
|
+
expect { test_nodes_handler.impacted_nodes_from_git_diff('my_remote_platform', from_commit: 'invalid_id') }.to raise_error HybridPlatformsConductor::NodesHandler::GitError, 'Mocked git error due to an invalid commit id'
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
36
46
|
it 'diffs to another commit if asked' do
|
|
37
47
|
with_test_platform({}, true) do
|
|
38
48
|
with_cmd_runner_mocked([
|
|
@@ -106,6 +106,31 @@ describe 'nodes_to_deploy executable' do
|
|
|
106
106
|
end
|
|
107
107
|
end
|
|
108
108
|
|
|
109
|
+
it 'considers nodes having invalid commit ids in their logs to be deployed' do
|
|
110
|
+
with_test_platform_for_nodes_to_deploy do
|
|
111
|
+
expect_actions_executor_runs([proc do |actions|
|
|
112
|
+
expect(actions).to eq(
|
|
113
|
+
'node1' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" },
|
|
114
|
+
'node2' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" }
|
|
115
|
+
)
|
|
116
|
+
{
|
|
117
|
+
'node1' => [0, "repo_name_0: platform\nexit_status: 0\ncommit_id_0: abcdef1", ''],
|
|
118
|
+
'node2' => [0, "repo_name_0: platform\nexit_status: 0\ncommit_id_0: abcdef2", '']
|
|
119
|
+
}
|
|
120
|
+
end])
|
|
121
|
+
expect(test_nodes_handler).to receive(:impacted_nodes_from_git_diff).with('platform', from_commit: 'abcdef1', to_commit: 'master') do
|
|
122
|
+
raise HybridPlatformsConductor::NodesHandler::GitError, 'Mocked git error due to an invalid commit id'
|
|
123
|
+
end
|
|
124
|
+
expect(test_nodes_handler).to receive(:impacted_nodes_from_git_diff).with('platform', from_commit: 'abcdef2', to_commit: 'master') { [%w[], [], [], false] }
|
|
125
|
+
exit_code, stdout, stderr = run 'nodes_to_deploy'
|
|
126
|
+
expect(exit_code).to eq 0
|
|
127
|
+
expect(stdout).to eq <<~EOS
|
|
128
|
+
===== Nodes to deploy =====
|
|
129
|
+
node1
|
|
130
|
+
EOS
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
109
134
|
it 'ignores impacts if asked' do
|
|
110
135
|
with_test_platform_for_nodes_to_deploy do
|
|
111
136
|
exit_code, stdout, stderr = run 'nodes_to_deploy', '--ignore-deployed-info'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hybrid_platforms_conductor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 32.4.
|
|
4
|
+
version: 32.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Muriel Salvan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: range_operators
|
|
@@ -281,20 +281,20 @@ description: Provides a complete toolset to help DevOps maintain, deploy, monito
|
|
|
281
281
|
email:
|
|
282
282
|
- muriel@x-aeon.com
|
|
283
283
|
executables:
|
|
284
|
-
- test
|
|
285
|
-
- topograph
|
|
286
284
|
- dump_nodes_json
|
|
287
|
-
-
|
|
288
|
-
-
|
|
285
|
+
- test
|
|
286
|
+
- last_deploys
|
|
287
|
+
- check-node
|
|
289
288
|
- setup
|
|
289
|
+
- free_ips
|
|
290
|
+
- ssh_config
|
|
290
291
|
- deploy
|
|
291
|
-
-
|
|
292
|
+
- report
|
|
293
|
+
- free_veids
|
|
292
294
|
- get_impacted_nodes
|
|
293
|
-
- ssh_config
|
|
294
295
|
- run
|
|
295
296
|
- nodes_to_deploy
|
|
296
|
-
-
|
|
297
|
-
- free_ips
|
|
297
|
+
- topograph
|
|
298
298
|
extensions: []
|
|
299
299
|
extra_rdoc_files: []
|
|
300
300
|
files:
|