knife-depsolver 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d898d03bc79de23335e1ce6f1d81ca9cc68527d9
4
- data.tar.gz: 9fc64f30535ff4441cacd2316dceeacb1ce66345
3
+ metadata.gz: 4dd5a344b9fcfc7c4e08e5199122981852f396f1
4
+ data.tar.gz: 7973c0cd7d13687bc3fe81575e6f6b9bff430f04
5
5
  SHA512:
6
- metadata.gz: 5eae154d12a6d07c72fa13a8a3b89b96849bf7b5ca6d3b42f614573c239a432d2f550164810b2cdbbb4ff7fc95b94f00256ed01745f183edb31b71730cc61b38
7
- data.tar.gz: 60cd833bbe8e5f321e453fe41cba4ab78652e96bdb99d63b8a83709526634454c8564c72abb05178868cf6081a8c42a55c314a0352f8369c5028736561a6cc5a
6
+ metadata.gz: 733d5a061fc6bbaa400af405f8fd1419fef2f0fe2b313360dc91d5adf4e99b2b55c4293d2fea475a452f8260f12ef37e144dc098cbc58432db171121fc9f3a35
7
+ data.tar.gz: dca4c199d6ba80069efd8ca2db97d2c94af28580fd8f7ecbcac146d865345d920e12b422739e9153584ffe5608fbb63465ec24dd7726cf1c8c2dcedea7a99838
@@ -1,5 +1,10 @@
1
1
  # Change Log
2
2
 
3
+ ## 2.0.2 (2017-05-11)
4
+
5
+ * Set DepSelector log level to INFO
6
+ * Add --print-constrained-cookbook-set option
7
+
3
8
  ## 2.0.1 (2017-05-02)
4
9
 
5
10
  * Minor change to file name timestamp format
data/README.md CHANGED
@@ -65,9 +65,15 @@ knife depsolver -E production 'role[base],cookbook-B,cookbook-A::foo@3.1.4,cookb
65
65
 
66
66
  ### Using knife-depsolver with Chef DK's embedded depsolver
67
67
 
68
- It can be difficult to identify the source of the problem if we hit a depsolver issue in the Chef Server.
68
+ Mikael Lagerkvist is one of the authors of gecode, the constraint solver used by Chef's depsolver, and he says in the following mail list posts that "Debugging failures in constraint programs is unfortunately a very hard problem."
69
69
 
70
- knife-depsolver can provide many more troubleshooting options by using the depsolver embedded in your workstation's Chef DK to make an identical calculation as the Chef Server.
70
+ http://www.mail-archive.com/users@gecode.org/msg00110.html
71
+
72
+ https://www.mail-archive.com/users@gecode.org/msg00076.html
73
+
74
+ In the first post he goes on to talk about the importance of troubleshooting the whole problem set. With regards to the cookbook depsolver this translates to the importance of troubleshooting the whole run list. When troubleshooting a depsolver issue it is best to keep the run list the same and make changes to the environment cookbook version constraints or possibly to the cookbook universe.
75
+
76
+ knife-depsolver can provide many troubleshooting options by using the depsolver embedded in your workstation's Chef DK to make an identical calculation as the Chef Server.
71
77
 
72
78
  First, you need to make sure that your version of Chef DK is using the same version of the dep_selector gem as your version of Chef Server. If your Chef DK is using a different version of the dep_selector gem then knife-depsolver's calculations will not be identical to the Chef Server's calculations which will confuse troubleshooting efforts.
73
79
 
@@ -100,7 +106,9 @@ For example:
100
106
  knife depsolver --env-constraints rehearsal-environment-2017-05-01-18.52.40-5f5843d819ecb0b174f308d76d4336bb7bbfacbf.txt --universe automate-universe-2017-05-01-18.52.40-1c8e59e23530b1e1a8e0b3b3cc5236a29c84e469.txt --expanded-run-list expanded-run-list-2017-05-01-18.52.40-387d90499514747792a805213c30be13d830d31f.txt
101
107
  ```
102
108
 
103
- Now it is easy to modify any combination of the expanded run list, the environment cookbook version constraints or the cookbook universe in those files and see the impact on the depsolver in an effort to isolate the problem.
109
+ Now it is easy to modify the environment cookbook version constraints or the cookbook universe input files to see the impact on the depsolver.
110
+
111
+ #### --timeout
104
112
 
105
113
  Sometimes it can help to give the depsolver more than the default five seconds to perform its calculations. This can be done by using the "--timeout <seconds>" option to change the depsolver timeout.
106
114
 
@@ -108,7 +116,19 @@ Sometimes it can help to give the depsolver more than the default five seconds t
108
116
  knife depsolver --env-constraints production-environment-2017-05-01-18.52.40-5f5843d819ecb0b174f308d76d4336bb7bbfacbf.txt --universe my-org-universe-2017-05-01-18.52.40-1c8e59e23530b1e1a8e0b3b3cc5236a29c84e469.txt --expanded-run-list expanded-run-list-2017-05-01-18.52.40-387d90499514747792a805213c30be13d830d31f.txt --timeout 120
109
117
  ```
110
118
 
111
- ### Chef Server <= 12.4.0
119
+ #### --print-constrained-cookbook-set
120
+
121
+ Sometimes you want to only see the list of cookbooks, and their cookbook dependency version constraints, that ultimately would be sent to the depsolver without actually triggering the depsolver calculation. This is especially helpful when the depsolver isn't returning any results because it can't calculate a solution in a reasonable amount of time. This can be done by using the `--print-constrained-cookbook-set` option.
122
+
123
+ ```
124
+ knife depsolver --env-constraints rehearsal-environment-2017-05-01-18.52.40-5f5843d819ecb0b174f308d76d4336bb7bbfacbf.txt --universe automate-universe-2017-05-01-18.52.40-1c8e59e23530b1e1a8e0b3b3cc5236a29c84e469.txt --expanded-run-list expanded-run-list-2017-05-01-18.52.40-387d90499514747792a805213c30be13d830d31f.txt --print-constrained-cookbook-set
125
+ ```
126
+
127
+ Now you can review the output to see if you can find anything that could be causing problems for the depsolver. You can make changes to the input files to see the impact on the list of cookbooks that would be sent to the depsolver.
128
+
129
+ If necessary you could also use the list of cookbooks as a starting point for setting version constraints in the environment input file. Then you can modify that set of version constraints and run the depsolver in an effort to get a solution in a reasonable amount of time or to isolate the problem.
130
+
131
+ ### Chef Server < 12.4.0
112
132
 
113
133
  knife-depsolver requires cookbook universe data in order to use Chef DK's embedded depsolver. The "/universe" API endpoint was added in the Chef Server 12.4.0 release.
114
134
 
@@ -31,9 +31,9 @@ class Chef
31
31
  long: '--universe FILENAME',
32
32
  description: 'Use the cookbook universe from FILENAME. REQUIRED when using the local depsolver.'
33
33
 
34
- option :expanded_run_list,
35
- long: '--expanded-run-list FILENAME',
36
- description: 'Use the expanded run list from FILENAME. REQUIRED when using the local depsolver.'
34
+ option :expanded_run_list,
35
+ long: '--expanded-run-list FILENAME',
36
+ description: 'Use the expanded run list from FILENAME. REQUIRED when using the local depsolver.'
37
37
 
38
38
  option :csv_universe_to_json,
39
39
  long: '--csv-universe-to-json FILENAME',
@@ -43,8 +43,13 @@ class Chef
43
43
  long: '--env-constraints-filter-universe',
44
44
  description: 'Filter the cookbook universe using the environment cookbook version constraints.'
45
45
 
46
+ option :print_constrained_cookbook_set,
47
+ long: '--print-constrained-cookbook-set',
48
+ description: 'Only print the constrained cookbook set that would be sent to the depsolver.'
49
+
46
50
  def run
47
51
  begin
52
+ DepSelector::Debug.log.level = Logger::INFO
48
53
  use_local_depsolver = false
49
54
  if config[:env_constraints_filter_universe]
50
55
  if config[:node] || config[:environment] || config[:timeout] || config[:capture] || config[:expanded_run_list] || config[:csv_universe_to_json]
@@ -84,6 +89,10 @@ class Chef
84
89
  msg("ERROR: The --timeout option requires the --env-constraints, --universe and --expanded-run-list options to be set")
85
90
  exit!
86
91
  end
92
+ if config[:print_constrained_cookbook_set] && !use_local_depsolver
93
+ msg("ERROR: The --print-constrained-cookbook-set option requires the --env-constraints, --universe and --expanded-run-list options to be set")
94
+ exit!
95
+ end
87
96
 
88
97
  timeout = (config[:timeout].to_f * 1000).to_i if config[:timeout]
89
98
  timeout ||= 5 * 1000
@@ -240,6 +249,11 @@ class Chef
240
249
 
241
250
  data = {environment_constraints: env_ckbk_constraints, all_versions: all_versions, run_list: expanded_run_list_with_split_versions, timeout_ms: timeout}
242
251
 
252
+ if config[:print_constrained_cookbook_set]
253
+ print_constrained_cookbook_set(data)
254
+ exit!
255
+ end
256
+
243
257
  depsolver_start_time = Time.now
244
258
 
245
259
  solution = solve(data)
@@ -317,6 +331,61 @@ class Chef
317
331
  end
318
332
  end
319
333
  end
334
+
335
+ def print_constrained_cookbook_set(data)
336
+ begin
337
+ # create dependency graph from cookbooks
338
+ graph = DepSelector::DependencyGraph.new
339
+
340
+ env_constraints = data[:environment_constraints].inject({}) do |acc, env_constraint|
341
+ name, version, constraint = env_constraint
342
+ acc[name] = DepSelector::VersionConstraint.new(constraint_to_str(constraint, version))
343
+ acc
344
+ end
345
+
346
+ all_versions = []
347
+
348
+ data[:all_versions].each do | vsn|
349
+ name, version_constraints = vsn
350
+ version_constraints.each do |version_constraint| # todo: constraints become an array in ruby
351
+ # due to the erlectricity conversion from
352
+ # tuples
353
+ version, constraints = version_constraint
354
+
355
+ # filter versions based on environment constraints
356
+ env_constraint = env_constraints[name]
357
+ if (!env_constraint || env_constraint.include?(DepSelector::Version.new(version)))
358
+ package_version = graph.package(name).add_version(DepSelector::Version.new(version))
359
+ constraints.each do |package_constraint|
360
+ constraint_name, constraint_version, constraint = package_constraint
361
+ version_constraint = DepSelector::VersionConstraint.new(constraint_to_str(constraint, constraint_version))
362
+ dependency = DepSelector::Dependency.new(graph.package(constraint_name), version_constraint)
363
+ package_version.dependencies << dependency
364
+ end
365
+ end
366
+ end
367
+
368
+ # regardless of filter, add package reference to all_packages
369
+ all_versions << graph.package(name)
370
+ end
371
+
372
+ run_list = data[:run_list].map do |run_list_item|
373
+ item_name, item_constraint_version, item_constraint = run_list_item
374
+ version_constraint = DepSelector::VersionConstraint.new(constraint_to_str(item_constraint,
375
+ item_constraint_version))
376
+ DepSelector::SolutionConstraint.new(graph.package(item_name), version_constraint)
377
+ end
378
+
379
+ timeout_ms = data[:timeout_ms]
380
+ selector = DepSelector::Selector.new(graph, (timeout_ms / 1000.0))
381
+
382
+ constrained_cookbook_set = selector.send(:trim_unreachable_packages, selector.dep_graph, run_list)
383
+ constrained_cookbook_set.sort {|x,y| x.name <=> y.name}.each {|c| puts c.to_s.gsub(/Package/, 'Cookbook')}
384
+
385
+ rescue => e
386
+ puts = [:error, :exception, e.message, [e.backtrace]]
387
+ end
388
+ end
320
389
  end
321
390
  end
322
391
  end
@@ -1,3 +1,3 @@
1
1
  module KnifeDepsolver
2
- VERSION = "2.0.1"
2
+ VERSION = "2.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-depsolver
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremiah Snapp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-02 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Knife plugin that uses Chef Server to calculate cookbook dependencies
14
14
  for a given run_list.