knife-role-spaghetti 0.0.1 → 0.0.2

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.
data/README.md CHANGED
@@ -69,10 +69,14 @@ Running through the neato renderer (with the `-N` switch) produces this image:
69
69
 
70
70
  ## Changelog
71
71
 
72
+ ### v0.0.2
73
+ * Updated CLI banner to reflect that filename is not required, renamed for clarity
74
+ * Improved handling cases where a role contains recipes named the same as the role
75
+ * Added handling for roles in JSON format
76
+
72
77
  ### v0.0.1
73
78
  * Initial commit
74
79
 
75
-
76
80
  ## License
77
81
 
78
82
  Author:: Mike Fiedler (<miketheman@gmail.com>)
data/features/cli.feature CHANGED
@@ -23,7 +23,7 @@ Scenario Outline: Running with Help flags produces the correct result
23
23
  When I run `knife role spaghetti <HelpFlag>`
24
24
  Then the output should contain:
25
25
  """
26
- knife role spaghetti FILENAME [-G FORMAT [-N] ]
26
+ knife role spaghetti [ OUTFILE.PNG -G FORMAT [-N] ]
27
27
  """
28
28
  And the exit status should be 1
29
29
  Examples:
@@ -39,6 +39,18 @@ Scenario: Running against a directory with multiple roles succeeds
39
39
  "recipe[mysql]"
40
40
  )
41
41
  """
42
+ And a file named "roles/base.json" with:
43
+ """
44
+ {
45
+ "name" : "base",
46
+ "description" : "Sample base json role",
47
+ "run_list" : [
48
+ "recipe[yum]",
49
+ "recipe[apt]",
50
+ "recipe[ntp]"
51
+ ]
52
+ }
53
+ """
42
54
  When I successfully run `knife role spaghetti multirole.png`
43
55
  Then the exit status should be 0
44
56
 
@@ -8,7 +8,7 @@ module KnifeRoleSpaghetti
8
8
  require 'graphviz'
9
9
  end
10
10
 
11
- banner "knife role spaghetti FILENAME [-G FORMAT [-N] ]"
11
+ banner "knife role spaghetti [ OUTFILE.PNG -G FORMAT [-N] ]"
12
12
 
13
13
  option :graphformat,
14
14
  :short => "-G FORMAT",
@@ -23,6 +23,8 @@ module KnifeRoleSpaghetti
23
23
  :boolean => true,
24
24
  :description => "Specify to render the graph in the neato engine"
25
25
 
26
+ # OPTIMIZE: Add an option to display cookbooks instead of recipes?
27
+
26
28
  def run
27
29
 
28
30
  self.config = Chef::Config.merge!(config)
@@ -58,16 +60,25 @@ module KnifeRoleSpaghetti
58
60
  :compound => "true"
59
61
  )
60
62
 
61
- # OPTIMIZE: Handle json files too
62
- Dir.glob(File.join(Chef::Config.role_path, '*.rb')) do |rb_file|
63
+ Dir.glob(File.join(Chef::Config.role_path, '*.{rb,json}')) do |role_file|
64
+
63
65
  role = Chef::Role.new
64
- role.from_file(rb_file)
66
+
67
+ if File.extname(role_file) == '.rb'
68
+ role.from_file(role_file)
69
+ elsif File.extname(role_file) == '.json'
70
+ js_file = Chef::JSONCompat.from_json(IO.read(role_file))
71
+ role = Chef::Role.json_create(js_file)
72
+ else
73
+ ui.error("This shouldn't happen, the file must be either rb or json")
74
+ end
75
+
65
76
  # OPTIMIZE: Handle environment run_lists
66
77
 
67
78
  g.node[:shape] = "box"
68
79
  g.node[:style] = "rounded"
69
80
  g.node[:color] = "red"
70
- role_node = g.add_nodes(role.name)
81
+ role_node = g.add_nodes("#{role.name}_role", :label => role.name)
71
82
 
72
83
  # This logic is to ensure that an embedded role doesn't change color
73
84
  role.run_list.each do |rli|
@@ -1,3 +1,3 @@
1
1
  module KnifeRoleSpaghetti
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-role-spaghetti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-20 00:00:00.000000000 Z
12
+ date: 2012-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef