knife-preflight 0.1.3 → 0.1.5

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.
Files changed (2) hide show
  1. data/lib/chef/knife/preflight.rb +73 -37
  2. metadata +10 -5
@@ -58,53 +58,89 @@ module KnifePreflight
58
58
  exit 1
59
59
  end
60
60
 
61
- result_count_nodes = perform_query(raw_query, 'node')
61
+ cookbook = raw_query.split("::").first
62
+ unconstrained_env_search = Chef::Search::Query.new
63
+ unconstrained_envs = unconstrained_env_search.search('environment', "NOT cookbook_versions:#{cookbook}").first.map{|e|e.name}
62
64
 
63
- result_count_roles = perform_query(raw_query, 'role')
65
+ q_nodes = Chef::Search::Query.new
64
66
 
65
- ui.msg("Found #{result_count_nodes} nodes and #{result_count_roles} roles using the specified search criteria")
66
- end
67
-
68
- def perform_query(raw_query, type='node')
69
- q = Chef::Search::Query.new
70
-
71
- # strip default if it exists to simplify logic
72
- raw_query = raw_query.sub("::default", "")
73
67
  escaped_query = raw_query.sub( "::", "\\:\\:")
74
-
68
+
75
69
  if !raw_query.include? "::"
76
- if type == 'node'
77
- search_query = "recipes:*#{escaped_query} OR recipes:*#{escaped_query}\\:\\:default"
78
- search_query += " OR " + search_query.gsub("recipes", "last_seen_recipes")
79
- else
80
- search_query = "run_list:recipe\\[#{escaped_query}\\] OR run_list:recipe\\[#{escaped_query}\\:\\:default\\]"
70
+ node_query = "recipes:*#{escaped_query} OR recipes:*#{escaped_query}\\:\\:default"
71
+ ui.msg("Searching for nodes containing #{raw_query} OR #{raw_query}::default in their expanded run_list...\n")
72
+ elsif raw_query.include? "::default"
73
+ node_query = "recipes:*#{escaped_query} OR recipes:*#{escaped_query.gsub( "\\:\\:default","")}"
74
+ ui.msg("Searching for nodes containing #{raw_query} OR #{raw_query.gsub( "::default","")} in their expanded run_list...\n")
75
+ else
76
+ node_query = "recipes:*#{escaped_query}"
77
+ ui.msg("Searching for nodes containing #{raw_query} in their expanded run_list...\n")
78
+ end
79
+ query_nodes = URI.escape(node_query, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
80
+
81
+ result_items_nodes = []
82
+ result_count_nodes = 0
83
+
84
+ rows = config[:rows]
85
+ start = config[:start]
86
+ begin
87
+ q_nodes.search('node', query_nodes, config[:sort], start, rows) do |node_item|
88
+ formatted_item_node = format_for_display(node_item)
89
+ if formatted_item_node.respond_to?(:has_key?) && !formatted_item_node.has_key?('id')
90
+ formatted_item_node['id'] = node_item.has_key?('id') ? node_item['id'] : node_item.name
91
+ end
92
+ result_items_nodes << formatted_item_node
93
+ result_count_nodes += 1
81
94
  end
82
- ui.msg("Searching for #{type}s containing #{raw_query} OR #{raw_query}::default in their expanded run_list...\n")
95
+ rescue Net::HTTPServerException => e
96
+ msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
97
+ ui.error("knife preflight failed: #{msg}")
98
+ exit 1
99
+ end
100
+
101
+ if ui.interchange?
102
+ output({:results => result_count_nodes, :rows => result_items_nodes})
83
103
  else
84
- if type == 'node'
85
- search_query = "recipes:*#{escaped_query}"
86
- search_query += " OR " + search_query.gsub("recipes", "last_seen_recipes")
87
- else
88
- search_query = "run_list:recipe\\[#{escaped_query}\\]"
104
+ ui.msg "#{result_count_nodes} Nodes found"
105
+ ui.msg("\n")
106
+ result_items_nodes.each do |item|
107
+ output("#{item.name}#{unconstrained_envs.include?(item.chef_environment) ? " - in environment '#{item.chef_environment}', no version constraint for '#{cookbook}' cookbook" : nil}")
89
108
  end
90
- ui.msg("Searching for #{type}s containing #{raw_query} in their expanded run_list...\n")
91
109
  end
92
110
 
93
- query = URI.escape(search_query, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
111
+ ui.msg("\n")
112
+ ui.msg("\n")
94
113
 
95
- result_items = []
96
- result_count = 0
114
+
115
+ q_roles = Chef::Search::Query.new
116
+
117
+ if !raw_query.include? "::"
118
+ role_query = "run_list:recipe\\[#{escaped_query}\\] OR run_list:recipe\\[#{escaped_query}\\:\\:default\\]"
119
+ ui.msg("Searching for roles containing #{raw_query} OR #{raw_query}::default in their expanded run_list...\n")
120
+ elsif raw_query.include? "::default"
121
+ role_query = "run_list:recipe\\[#{escaped_query}\\] OR run_list:recipe\\[#{escaped_query.gsub( "\\:\\:default","")}\\]"
122
+ ui.msg("Searching for roles containing #{raw_query} OR #{raw_query.gsub( "::default","")} in their expanded run_list...\n")
123
+ else
124
+ role_query = "run_list:recipe\\[#{escaped_query}\\]"
125
+ ui.msg("Searching for roles containing #{raw_query} in their expanded run_list...\n")
126
+ end
127
+
128
+ query_roles = URI.escape(role_query,
129
+ Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
130
+
131
+ result_items_roles = []
132
+ result_count_roles = 0
97
133
 
98
134
  rows = config[:rows]
99
135
  start = config[:start]
100
136
  begin
101
- q.search(type, query, config[:sort], start, rows) do |item|
102
- formatted_item = format_for_display(item)
103
- if formatted_item.respond_to?(:has_key?) && !formatted_item.has_key?('id')
104
- formatted_item['id'] = item.has_key?('id') ? item['id'] : item.name
137
+ q_roles.search('role', query_roles, config[:sort], start, rows) do |role_item|
138
+ formatted_item_role = format_for_display(role_item)
139
+ if formatted_item_role.respond_to?(:has_key?) && !formatted_item_role.has_key?('id')
140
+ formatted_item_role['id'] = role_item.has_key?('id') ? role_item['id'] : role_item.name
105
141
  end
106
- result_items << formatted_item
107
- result_count += 1
142
+ result_items_roles << formatted_item_role
143
+ result_count_roles += 1
108
144
  end
109
145
  rescue Net::HTTPServerException => e
110
146
  msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
@@ -113,18 +149,18 @@ module KnifePreflight
113
149
  end
114
150
 
115
151
  if ui.interchange?
116
- output({:results => result_count, :rows => result_items})
152
+ output({:results => result_count_roles, :rows => result_items_roles})
117
153
  else
118
- ui.msg "#{result_count} #{type.capitalize}s found"
154
+ ui.msg "#{result_count_roles} Roles found"
119
155
  ui.msg("\n")
120
- result_items.each do |item|
121
- output(item.name)
156
+ result_items_roles.each do |role_item|
157
+ output(role_item.name)
122
158
  end
123
159
  end
124
160
 
125
161
  ui.msg("\n")
126
162
  ui.msg("\n")
127
- return result_count
163
+ ui.msg("Found #{result_count_nodes} nodes and #{result_count_roles} roles using the specified search criteria")
128
164
  end
129
165
  end
130
166
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-preflight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-29 00:00:00.000000000 Z
12
+ date: 2013-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
16
- requirement: &70103950761040 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: 0.10.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70103950761040
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.10.4
25
30
  description: Knife plugin for checking what your cookbook changes will affect
26
31
  email: jonlives@gmail.com
27
32
  executables: []
@@ -52,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
57
  version: '0'
53
58
  requirements: []
54
59
  rubyforge_project: knife-preflight
55
- rubygems_version: 1.8.10
60
+ rubygems_version: 1.8.24
56
61
  signing_key:
57
62
  specification_version: 2
58
63
  summary: Knife plugin for checking what your cookbook changes will affect