knife-depsolver 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|