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.
- data/lib/chef/knife/preflight.rb +73 -37
- metadata +10 -5
data/lib/chef/knife/preflight.rb
CHANGED
@@ -58,53 +58,89 @@ module KnifePreflight
|
|
58
58
|
exit 1
|
59
59
|
end
|
60
60
|
|
61
|
-
|
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
|
-
|
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
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
-
|
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
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
-
|
111
|
+
ui.msg("\n")
|
112
|
+
ui.msg("\n")
|
94
113
|
|
95
|
-
|
96
|
-
|
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
|
-
|
102
|
-
|
103
|
-
if
|
104
|
-
|
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
|
-
|
107
|
-
|
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 =>
|
152
|
+
output({:results => result_count_roles, :rows => result_items_roles})
|
117
153
|
else
|
118
|
-
ui.msg "#{
|
154
|
+
ui.msg "#{result_count_roles} Roles found"
|
119
155
|
ui.msg("\n")
|
120
|
-
|
121
|
-
output(
|
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
|
-
|
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.
|
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:
|
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:
|
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:
|
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.
|
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
|