knife-preflight 0.1.3 → 0.1.5

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