knife-depsolver 1.0.0 → 1.0.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/CHANGELOG.md +4 -0
- data/lib/chef/knife/depsolver.rb +45 -43
- data/lib/knife-depsolver/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5937e944afd44c612b2fe9beb72ab82fc54b6fb
|
4
|
+
data.tar.gz: 6d29b51bacad2ecc548abde5836745976cfcdfbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6458795f49739bceb38884ba4fe2d534a3f07c7bb005adf981e833230b27813d9391dd21e1259b3b1c20e9621ebfb093b28e40115bed8d7d208ddc8027296c8
|
7
|
+
data.tar.gz: 3c27e32e8bba168011d2afd4407fcdf552e92035f146a0108a31c3b9f4127701e9dec02c2a6150ca22831a4e3e35775b44ad58e9e28aade5e6786e478839853c
|
data/CHANGELOG.md
CHANGED
data/lib/chef/knife/depsolver.rb
CHANGED
@@ -1,13 +1,4 @@
|
|
1
|
-
# This `knife exec` script gets a node's expanded run_list with version
|
2
|
-
# constraints for a specified environment.
|
3
|
-
|
4
|
-
# Then it POSTs the expanded run_list to the environment's cookbook_versions
|
5
|
-
# endpoint to retrieve a list of dependency resolved cookbooks that meet all
|
6
|
-
# specified version constraints.
|
7
|
-
|
8
1
|
require 'chef/knife'
|
9
|
-
require 'chef/run_list/run_list_expansion'
|
10
|
-
require 'chef/run_list/run_list_item'
|
11
2
|
|
12
3
|
class Chef
|
13
4
|
class Knife
|
@@ -23,52 +14,63 @@ class Chef
|
|
23
14
|
description: 'Use the run list from a given node'
|
24
15
|
|
25
16
|
def run
|
26
|
-
|
17
|
+
begin
|
18
|
+
if config[:node]
|
19
|
+
node = Chef::Node.load(config[:node])
|
20
|
+
else
|
21
|
+
node = Chef::Node.new
|
22
|
+
node.name('depsolver-tmp-node')
|
27
23
|
|
28
|
-
|
29
|
-
|
24
|
+
run_list = name_args.map {|item| item.to_s.split(/,/) }.flatten.each{|item| item.strip! }
|
25
|
+
run_list.delete_if {|item| item.empty? }
|
30
26
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
node = Chef::Node.new
|
35
|
-
node.name('depsolver-tmp-node')
|
36
|
-
run_list.each do |arg|
|
37
|
-
node.run_list.add(arg)
|
27
|
+
run_list.each do |arg|
|
28
|
+
node.run_list.add(arg)
|
29
|
+
end
|
38
30
|
end
|
39
|
-
end
|
40
31
|
|
41
|
-
|
42
|
-
|
32
|
+
environment = config[:environment]
|
33
|
+
environment ||= node.chef_environment
|
43
34
|
|
44
|
-
|
45
|
-
|
35
|
+
environment_cookbook_versions = Chef::Environment.load(environment).cookbook_versions
|
36
|
+
|
37
|
+
run_list_expansion = node.expand!
|
38
|
+
expanded_run_list_with_versions = run_list_expansion.recipes.with_version_constraints_strings
|
46
39
|
|
47
|
-
begin
|
48
40
|
depsolver_start_time = Time.now
|
41
|
+
|
49
42
|
ckbks = rest.post_rest("environments/" + environment + "/cookbook_versions", { "run_list" => expanded_run_list_with_versions })
|
43
|
+
|
50
44
|
depsolver_finish_time = Time.now
|
51
|
-
rescue
|
52
|
-
end
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
46
|
+
depsolver_results = {}
|
47
|
+
ckbks.each do |name, ckbk|
|
48
|
+
version = ckbk.is_a?(Hash) ? ckbk['version'] : ckbk.version
|
49
|
+
depsolver_results[name] = version
|
50
|
+
end
|
59
51
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
52
|
+
rescue => e
|
53
|
+
api_error = {}
|
54
|
+
api_error[:error_code] = e.response.code
|
55
|
+
api_error[:error_message] = e.response.message
|
56
|
+
begin
|
57
|
+
api_error[:error_body] = JSON.parse(e.response.body)
|
58
|
+
rescue JSON::ParserError
|
59
|
+
end
|
60
|
+
ensure
|
61
|
+
results = {}
|
62
|
+
results[:node] = node.name unless node.nil? || node.name.nil?
|
63
|
+
results[:environment] = environment unless environment.nil?
|
64
|
+
results[:environment_cookbook_versions] = environment_cookbook_versions unless environment_cookbook_versions.nil?
|
65
|
+
results[:run_list] = node.run_list unless node.nil? || node.run_list.nil?
|
66
|
+
results[:expanded_run_list] = expanded_run_list_with_versions unless expanded_run_list_with_versions.nil?
|
67
|
+
results[:depsolver_results] = depsolver_results unless depsolver_results.nil? || depsolver_results.empty?
|
68
|
+
results[:depsolver_cookbook_count] = ckbks.count unless ckbks.nil?
|
69
|
+
results[:depsolver_elapsed_ms] = ((depsolver_finish_time - depsolver_start_time) * 1000).to_i unless depsolver_finish_time.nil?
|
70
|
+
results[:api_error] = api_error unless api_error.nil?
|
70
71
|
|
71
|
-
|
72
|
+
msg(JSON.pretty_generate(results))
|
73
|
+
end
|
72
74
|
end
|
73
75
|
end
|
74
76
|
end
|