hybrid_platforms_conductor 33.8.3 → 33.8.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +1 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +94 -2
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +53 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/metadata.rb +13 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/31_unknown_recipe_include.rb +2 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/32_unknown_cookbook_include.rb +2 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/33_unknown_include.rb +3 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/34_known_include.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/35_unparsable_include.rb +7 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_1.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_2.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_3.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_4.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_5/recipes/recipe_1.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_5/recipes/recipe_2.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node31.json +10 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node32.json +10 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node33.json +10 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node34.json +10 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node35.json +10 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_31.rb +4 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_32.rb +4 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_33.rb +4 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_34.rb +4 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_35.rb +4 -0
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b18c3901744a84b3c1c820a8bc8af074cecdc78d56b7802186d9d6751c5b78ed
|
4
|
+
data.tar.gz: ef312bf22ddcdd7473d3c606d665e3eec5760a842822b0fb36dedf7ce840fa6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 543a74c57e08edde95103dff97af8c90360908e87e2d7be1c1c79a53dc85cb314f26b23b8591dabaeb88efb6415c2b3a5909ed8ca392a2dc0e3a61dabfb3b781
|
7
|
+
data.tar.gz: 87f5bb43a345cb9373d43211ffbea8e47c08de26a7256f0f2b51ff2660b6021bc251a448ba51006c34ca02c88d442d88c2d027d1b15638a7e2fb396c2336423f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
# [v33.8.4](https://github.com/sweet-delights/hybrid-platforms-conductor/compare/v33.8.3...v33.8.4) (2021-08-20 15:45:41)
|
2
|
+
|
3
|
+
## Global changes
|
4
|
+
### Patches
|
5
|
+
|
6
|
+
* [[Fix(platform_handler_serverless_chef)] [#99] Make sure dynamic or unparsable cookbook/recipe names are considered using metadata for recipes dependencies](https://github.com/sweet-delights/hybrid-platforms-conductor/commit/1d7feb24881f04cd3f31bc1e41712dfc4cfe715f)
|
7
|
+
|
8
|
+
## Changes for platform_handler_serverless_chef
|
9
|
+
### Patches
|
10
|
+
|
11
|
+
* [[Fix(platform_handler_serverless_chef)] [#99] Make sure dynamic or unparsable cookbook/recipe names are considered using metadata for recipes dependencies](https://github.com/sweet-delights/hybrid-platforms-conductor/commit/1d7feb24881f04cd3f31bc1e41712dfc4cfe715f)
|
12
|
+
|
1
13
|
# [v33.8.3](https://github.com/sweet-delights/hybrid-platforms-conductor/compare/v33.8.2...v33.8.3) (2021-08-16 14:18:52)
|
2
14
|
|
3
15
|
## Global changes
|
@@ -105,8 +105,59 @@ module HybridPlatformsConductor
|
|
105
105
|
recipe_content = File.read("#{@platform.repository_path}/#{cookbook_dir}/#{cookbook}/recipes/#{recipe}.rb")
|
106
106
|
# Check for include_recipe
|
107
107
|
used_recipes = recipe_content.
|
108
|
-
scan(/include_recipe\
|
109
|
-
map
|
108
|
+
scan(/include_recipe(\((.+)\)|\s+(.+)|\((.*))$/).
|
109
|
+
map do |(_match, match_1, match_2, match_3)|
|
110
|
+
case match_1 || match_2 || match_3
|
111
|
+
when /^["']([^:'"]+(::[^'"]+)?)["']$/
|
112
|
+
# The recipe definition is given in a String
|
113
|
+
used_cookbook, used_recipe = Regexp.last_match(1).split('::')
|
114
|
+
used_recipe = 'default' if used_recipe.nil?
|
115
|
+
if used_cookbook =~ /^\w+$/
|
116
|
+
# Find the cookbook it belongs to
|
117
|
+
used_cookbook_dir = @platform.known_cookbook_paths.find { |cookbook_path| File.exist?("#{@platform.repository_path}/#{cookbook_path}/#{used_cookbook}") }
|
118
|
+
if used_recipe =~ /^\w+$/
|
119
|
+
# Check that the recipe exists if we know the cookbook dir
|
120
|
+
raise "Unknown recipe #{used_cookbook}::#{used_recipe} from cookbook #{@platform.repository_path}/#{used_cookbook_dir}/#{used_cookbook}." if !used_cookbook_dir.nil? && !File.exist?("#{@platform.repository_path}/#{used_cookbook_dir}/#{used_cookbook}/recipes/#{used_recipe}.rb")
|
121
|
+
|
122
|
+
[
|
123
|
+
[used_cookbook_dir, used_cookbook.to_sym, used_recipe.to_sym]
|
124
|
+
]
|
125
|
+
elsif used_cookbook_dir
|
126
|
+
# We are dealing with a dynamically named recipe.
|
127
|
+
# Return all recipes of the cookbook if we know the cookbook dir
|
128
|
+
Dir.glob("#{@platform.repository_path}/#{used_cookbook_dir}/#{used_cookbook}/recipes/*.rb").map do |used_recipe_file_path|
|
129
|
+
[
|
130
|
+
used_cookbook_dir,
|
131
|
+
used_cookbook.to_sym,
|
132
|
+
File.basename(used_recipe_file_path, '.rb').to_sym
|
133
|
+
]
|
134
|
+
end
|
135
|
+
else
|
136
|
+
# We are dealing with a dynamically named recipe.
|
137
|
+
# We have no cookbook dir - certainly comes from the supermarket.
|
138
|
+
[]
|
139
|
+
end
|
140
|
+
elsif used_recipe =~ /^\w+$/
|
141
|
+
# We are dealing with a dynamically named cookbook, but the recipe name is known.
|
142
|
+
# Look for this recipe in all cookbooks that are part of the metadata.
|
143
|
+
dependent_cookbooks(cookbook_dir, cookbook).map do |dependent_cookbook|
|
144
|
+
dependent_cookbook_dir = @platform.known_cookbook_paths.find { |cookbook_path| File.exist?("#{@platform.repository_path}/#{cookbook_path}/#{dependent_cookbook}") }
|
145
|
+
if !dependent_cookbook_dir.nil? && File.exist?("#{@platform.repository_path}/#{dependent_cookbook_dir}/#{dependent_cookbook}/recipes/#{used_recipe}.rb")
|
146
|
+
# Found a matching recipe name
|
147
|
+
[dependent_cookbook_dir, dependent_cookbook, used_recipe.to_sym]
|
148
|
+
end
|
149
|
+
end.compact
|
150
|
+
else
|
151
|
+
# We are dealing with cynamically named cookbooks and recipes.
|
152
|
+
# Consider we depend on all recipes of our dependent cookbooks.
|
153
|
+
all_dependent_recipes(cookbook_dir, cookbook)
|
154
|
+
end
|
155
|
+
else
|
156
|
+
# The recipe definition is much more complex, so treat it as unparsable and consider we depnd on all recipes of our dependent cookbooks from metadata.
|
157
|
+
all_dependent_recipes(cookbook_dir, cookbook)
|
158
|
+
end
|
159
|
+
end.
|
160
|
+
flatten(1)
|
110
161
|
# Check for some helpers we know include some recipes
|
111
162
|
@config.known_helpers_including_recipes.each do |helper_name, used_recipes_by_helper|
|
112
163
|
if recipe_content =~ Regexp.new(/(\W|^)#{Regexp.escape(helper_name)}(\W|$)/)
|
@@ -222,6 +273,47 @@ module HybridPlatformsConductor
|
|
222
273
|
end
|
223
274
|
end
|
224
275
|
|
276
|
+
# Get the list of dependent cookbooks from a cookbook's metadata
|
277
|
+
#
|
278
|
+
# Parameters::
|
279
|
+
# * *cookbook_dir* (String): The cookbook directory
|
280
|
+
# * *cookbook* (Symbol): The cookbook name
|
281
|
+
# Result::
|
282
|
+
# * Array<Symbol>: List of dependent cookbooks
|
283
|
+
def dependent_cookbooks(cookbook_dir, cookbook)
|
284
|
+
# Read the metadata file
|
285
|
+
dsl_parser = DslParser.new
|
286
|
+
dsl_parser.parse("#{@platform.repository_path}/#{cookbook_dir}/#{cookbook}/metadata.rb")
|
287
|
+
dsl_parser.
|
288
|
+
calls.
|
289
|
+
map { |call_info| call_info[:method] == :depends ? call_info[:args].first.to_sym : nil }.
|
290
|
+
compact
|
291
|
+
end
|
292
|
+
|
293
|
+
# Get all recipes from all cookbooks that are a metadata dependency from a given cookbook.
|
294
|
+
#
|
295
|
+
# Parameters::
|
296
|
+
# * *cookbook_dir* (String): The cookbook directory
|
297
|
+
# * *cookbook* (Symbol): The cookbook name
|
298
|
+
# Result::
|
299
|
+
# * Array< [String, Symbol, Symbol] >: List of tuples [cookbook_dir, cookbook, recipe] used by this recipe
|
300
|
+
def all_dependent_recipes(cookbook_dir, cookbook)
|
301
|
+
dependent_cookbooks(cookbook_dir, cookbook).map do |dependent_cookbook|
|
302
|
+
dependent_cookbook_dir = @platform.known_cookbook_paths.find { |cookbook_path| File.exist?("#{@platform.repository_path}/#{cookbook_path}/#{dependent_cookbook}") }
|
303
|
+
if dependent_cookbook_dir.nil?
|
304
|
+
nil
|
305
|
+
else
|
306
|
+
Dir.glob("#{@platform.repository_path}/#{dependent_cookbook_dir}/#{dependent_cookbook}/recipes/*.rb").map do |used_recipe_file_path|
|
307
|
+
[
|
308
|
+
dependent_cookbook_dir,
|
309
|
+
dependent_cookbook,
|
310
|
+
File.basename(used_recipe_file_path, '.rb').to_sym
|
311
|
+
]
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end.compact.flatten(1)
|
315
|
+
end
|
316
|
+
|
225
317
|
end
|
226
318
|
|
227
319
|
end
|
data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb
CHANGED
@@ -235,6 +235,59 @@ describe HybridPlatformsConductor::HpcPlugins::PlatformHandler::ServerlessChef d
|
|
235
235
|
end
|
236
236
|
end
|
237
237
|
|
238
|
+
it 'returns impacted service due to a usage of another cookbook\'s recipe using parenthesis' do
|
239
|
+
with_serverless_chef_platforms('recipes') do |platform, repository|
|
240
|
+
File.write("#{repository}/cookbooks/test_cookbook_1/recipes/default.rb", <<~EO_RECIPE)
|
241
|
+
include_recipe('test_cookbook_2::other_recipe')
|
242
|
+
EO_RECIPE
|
243
|
+
expect(platform.impacts_from('cookbooks/test_cookbook_2/recipes/other_recipe.rb' => {})).to eq [
|
244
|
+
[],
|
245
|
+
%w[test_policy_1],
|
246
|
+
false
|
247
|
+
]
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'returns impacted service due to a usage of another cookbook\'s recipe using dynamic recipe name' do
|
252
|
+
with_serverless_chef_platforms('recipes') do |platform|
|
253
|
+
expect(platform.impacts_from('cookbooks/test_cookbook_4/recipes/recipe_1.rb' => {})).to eq [
|
254
|
+
[],
|
255
|
+
%w[test_policy_31 test_policy_33 test_policy_35],
|
256
|
+
false
|
257
|
+
]
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
it 'returns impacted service due to a usage of another cookbook\'s recipe using dynamic cookbook name' do
|
262
|
+
with_serverless_chef_platforms('recipes') do |platform|
|
263
|
+
expect(platform.impacts_from('cookbooks/test_cookbook_4/recipes/recipe_2.rb' => {})).to eq [
|
264
|
+
[],
|
265
|
+
%w[test_policy_31 test_policy_32 test_policy_33 test_policy_35],
|
266
|
+
false
|
267
|
+
]
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'returns impacted service due to a usage of another cookbook\'s recipe using dynamic cookbook and recipe names' do
|
272
|
+
with_serverless_chef_platforms('recipes') do |platform|
|
273
|
+
expect(platform.impacts_from('cookbooks/test_cookbook_4/recipes/recipe_3.rb' => {})).to eq [
|
274
|
+
[],
|
275
|
+
%w[test_policy_31 test_policy_33 test_policy_35],
|
276
|
+
false
|
277
|
+
]
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
it 'returns impacted service due to a usage of another cookbook\'s recipe using dynamic or unparsable cookbook and recipe names, using metadata' do
|
282
|
+
with_serverless_chef_platforms('recipes') do |platform|
|
283
|
+
expect(platform.impacts_from('cookbooks/test_cookbook_5/recipes/recipe_1.rb' => {})).to eq [
|
284
|
+
[],
|
285
|
+
%w[test_policy_33 test_policy_35],
|
286
|
+
false
|
287
|
+
]
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
238
291
|
it 'ignores cookbooks from cookbook paths that are not configured' do
|
239
292
|
with_serverless_chef_platforms('several_cookbooks') do |platform, repository|
|
240
293
|
File.write("#{repository}/cookbooks/test_cookbook_1/recipes/default.rb", <<~EO_RECIPE)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
name 'test_cookbook_3'
|
2
|
+
maintainer 'Muriel Salvan'
|
3
|
+
maintainer_email 'muriel@x-aeon.com'
|
4
|
+
supports 'debian'
|
5
|
+
chef_version '>= 14.8'
|
6
|
+
source_url 'https://x-aeon.com'
|
7
|
+
issues_url 'https://x-aeon.com'
|
8
|
+
license 'BSD'
|
9
|
+
description 'Installs/Configures test_cookbook_3'
|
10
|
+
long_description ''
|
11
|
+
version '0.1.0'
|
12
|
+
depends 'test_cookbook_4'
|
13
|
+
depends 'test_cookbook_5'
|
@@ -0,0 +1 @@
|
|
1
|
+
include_recipe 'test_cookbook_4::recipe_4'
|
@@ -0,0 +1 @@
|
|
1
|
+
# Recipe code
|
@@ -0,0 +1 @@
|
|
1
|
+
# Recipe code
|
@@ -0,0 +1 @@
|
|
1
|
+
# Recipe code
|
@@ -0,0 +1 @@
|
|
1
|
+
# Recipe code
|
@@ -0,0 +1 @@
|
|
1
|
+
# Recipe code
|
@@ -0,0 +1 @@
|
|
1
|
+
# Recipe code
|
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: 33.8.
|
4
|
+
version: 33.8.4
|
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-08-
|
11
|
+
date: 2021-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: range_operators
|
@@ -1003,10 +1003,32 @@ files:
|
|
1003
1003
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/recipes/default.rb
|
1004
1004
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/recipes/other_recipe.rb
|
1005
1005
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/resources/my_resource.rb
|
1006
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/metadata.rb
|
1007
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/31_unknown_recipe_include.rb
|
1008
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/32_unknown_cookbook_include.rb
|
1009
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/33_unknown_include.rb
|
1010
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/34_known_include.rb
|
1011
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_3/recipes/35_unparsable_include.rb
|
1012
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_1.rb
|
1013
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_2.rb
|
1014
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_3.rb
|
1015
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_4/recipes/recipe_4.rb
|
1016
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_5/recipes/recipe_1.rb
|
1017
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_5/recipes/recipe_2.rb
|
1006
1018
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node1.json
|
1007
1019
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node2.json
|
1020
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node31.json
|
1021
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node32.json
|
1022
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node33.json
|
1023
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node34.json
|
1024
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/nodes/node35.json
|
1008
1025
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_1.rb
|
1009
1026
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_2.rb
|
1027
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_31.rb
|
1028
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_32.rb
|
1029
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_33.rb
|
1030
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_34.rb
|
1031
|
+
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/policyfiles/test_policy_35.rb
|
1010
1032
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/config.rb
|
1011
1033
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/cookbooks/test_cookbook_1/recipes/default.rb
|
1012
1034
|
- spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/nodes/node1.json
|