knife-preflight 0.1.6 → 0.1.7
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.
- checksums.yaml +15 -0
- data/lib/chef/knife/preflight.rb +97 -123
- metadata +4 -8
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OWFjOWVhZWY2ZmEzM2ZlNDU1M2MyMDBhYmQ0NDFiZDczZDc4M2YzOQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NzEyY2NiMDQ4ZTg0OGFhNzI2ZDdkYzJmZjBhMTU4MTRiNDdkMzAwNg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
Yjc5OWExNDMwYzE0MjcwZDIyOTYwNmNjN2JlODljZWY1MWMzZGJhOGI4ZmZh
|
10
|
+
MzE5NzlmOWU2NDExZWM2MTNjMmI1ZDUzYWMyOWIzNzIwYjkwMWQ3YmJhYmEz
|
11
|
+
NDNmOWE5YjVkOGM3YTMwZmZiNmZlZDVkNjhkOGRiNzYwNmZlYWM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Yjk0MWQ5NDc0YzM2N2RkYTgwYzc0ZTY0YjFhNmZlOGYyMjI4ZmMyMWJiODFj
|
14
|
+
ODg5ZWEzZWU5YzZlY2ZmNTI4Yjg1MjgwZTJmOGE1OTkxYjQ3YmU3OThlNDU5
|
15
|
+
Yjc3OTI0ZDczM2QzMzViMTY4MTRmZWRkOTRiYWZiMWRiYTllNjU=
|
data/lib/chef/knife/preflight.rb
CHANGED
@@ -13,154 +13,128 @@ require 'chef/knife/core/node_presenter'
|
|
13
13
|
module KnifePreflight
|
14
14
|
class Preflight < Chef::Knife
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
deps do
|
17
|
+
require 'chef/node'
|
18
|
+
require 'chef/environment'
|
19
|
+
require 'chef/api_client'
|
20
|
+
require 'chef/search/query'
|
21
|
+
end
|
22
22
|
|
23
|
-
|
23
|
+
include Chef::Knife::Core::NodeFormattingOptions
|
24
24
|
|
25
|
-
|
25
|
+
banner "knife preflight QUERY (options)"
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
option :sort,
|
28
|
+
:short => "-o SORT",
|
29
|
+
:long => "--sort SORT",
|
30
|
+
:description => "The order to sort the results in",
|
31
|
+
:default => nil
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
option :start,
|
34
|
+
:short => "-b ROW",
|
35
|
+
:long => "--start ROW",
|
36
|
+
:description => "The row to start returning results at",
|
37
|
+
:default => 0,
|
38
|
+
:proc => lambda { |i| i.to_i }
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
option :rows,
|
41
|
+
:short => "-R INT",
|
42
|
+
:long => "--rows INT",
|
43
|
+
:description => "The number of rows to return",
|
44
|
+
:default => 1000,
|
45
|
+
:proc => lambda { |i| i.to_i }
|
46
46
|
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
48
|
+
def run
|
49
|
+
if config[:query] && @name_args[0]
|
50
|
+
ui.error "please specify query as an argument or an option via -q, not both"
|
51
|
+
ui.msg opt_parser
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
raw_query = config[:query] || @name_args[0]
|
55
|
+
if !raw_query || raw_query.empty?
|
56
|
+
ui.error "no query specified"
|
57
|
+
ui.msg opt_parser
|
58
|
+
exit 1
|
59
|
+
end
|
60
|
+
|
61
|
+
result_count_nodes = perform_query(raw_query, 'node')
|
62
|
+
|
63
|
+
result_count_roles = perform_query(raw_query, 'role')
|
60
64
|
|
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
|
+
if type == 'node'
|
61
72
|
cookbook = raw_query.split("::").first
|
62
73
|
unconstrained_env_search = Chef::Search::Query.new
|
63
74
|
unconstrained_envs = unconstrained_env_search.search('environment', "NOT cookbook_versions:#{cookbook}").first.map{|e|e.name}
|
75
|
+
end
|
64
76
|
|
65
|
-
|
77
|
+
# strip default if it exists to simplify logic
|
78
|
+
raw_query = raw_query.sub("::default", "")
|
79
|
+
escaped_query = raw_query.sub( "::", "\\:\\:")
|
66
80
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
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")
|
81
|
+
if !raw_query.include? "::"
|
82
|
+
if type == 'node'
|
83
|
+
search_query = "recipes:*#{escaped_query} OR recipes:*#{escaped_query}\\:\\:default"
|
84
|
+
search_query += " OR " + search_query.gsub("recipes", "last_seen_recipes")
|
75
85
|
else
|
76
|
-
|
77
|
-
ui.msg("Searching for nodes containing #{raw_query} in their expanded run_list...\n")
|
86
|
+
search_query = "run_list:recipe\\[#{escaped_query}\\] OR run_list:recipe\\[#{escaped_query}\\:\\:default\\]"
|
78
87
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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.normal['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
|
94
|
-
end
|
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})
|
88
|
+
ui.msg("Searching for #{type}s containing #{raw_query} OR #{raw_query}::default in their expanded run_list or added via include_recipe...\n")
|
89
|
+
else
|
90
|
+
if type == 'node'
|
91
|
+
search_query = "recipes:*#{escaped_query}"
|
92
|
+
search_query += " OR " + search_query.gsub("recipes", "last_seen_recipes")
|
103
93
|
else
|
104
|
-
|
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}")
|
108
|
-
end
|
94
|
+
search_query = "run_list:recipe\\[#{escaped_query}\\]"
|
109
95
|
end
|
96
|
+
ui.msg("Searching for #{type}s containing #{raw_query} in their expanded run_list or added via include_recipe......\n")
|
97
|
+
end
|
110
98
|
|
111
|
-
|
112
|
-
ui.msg("\n")
|
113
|
-
|
99
|
+
query = URI.escape(search_query, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
114
100
|
|
115
|
-
|
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
|
101
|
+
result_items = []
|
102
|
+
result_count = 0
|
127
103
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
start = config[:start]
|
136
|
-
begin
|
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
|
141
|
-
end
|
142
|
-
result_items_roles << formatted_item_role
|
143
|
-
result_count_roles += 1
|
104
|
+
rows = config[:rows]
|
105
|
+
start = config[:start]
|
106
|
+
begin
|
107
|
+
q.search(type, query, config[:sort], start, rows) do |item|
|
108
|
+
formatted_item = format_for_display(item)
|
109
|
+
if formatted_item.respond_to?(:has_key?) && !formatted_item.has_key?('id')
|
110
|
+
formatted_item.normal['id'] = item.has_key?('id') ? item['id'] : item.name
|
144
111
|
end
|
145
|
-
|
146
|
-
|
147
|
-
ui.error("knife preflight failed: #{msg}")
|
148
|
-
exit 1
|
112
|
+
result_items << formatted_item
|
113
|
+
result_count += 1
|
149
114
|
end
|
115
|
+
rescue Net::HTTPServerException => e
|
116
|
+
msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
|
117
|
+
ui.error("knife preflight failed: #{msg}")
|
118
|
+
exit 1
|
119
|
+
end
|
150
120
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
121
|
+
if ui.interchange?
|
122
|
+
output({:results => result_count, :rows => result_items})
|
123
|
+
else
|
124
|
+
ui.msg "#{result_count} #{type.capitalize}s found"
|
125
|
+
ui.msg("\n")
|
126
|
+
result_items.each do |item|
|
127
|
+
if item.instance_of?(Chef::Node)
|
128
|
+
output("#{item.name}#{unconstrained_envs.include?(item.chef_environment) ? " - in environment #{item.chef_environment}, no version constraint for #{cookbook} cookbook" : nil}")
|
129
|
+
else
|
130
|
+
output(item.name)
|
158
131
|
end
|
159
132
|
end
|
160
|
-
|
161
|
-
ui.msg("\n")
|
162
|
-
ui.msg("\n")
|
163
|
-
ui.msg("Found #{result_count_nodes} nodes and #{result_count_roles} roles using the specified search criteria")
|
164
133
|
end
|
134
|
+
|
135
|
+
ui.msg("\n")
|
136
|
+
ui.msg("\n")
|
137
|
+
return result_count
|
165
138
|
end
|
166
139
|
end
|
140
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-preflight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jon Cowie
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-10-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: chef
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -38,26 +35,25 @@ files:
|
|
38
35
|
- lib/chef/knife/preflight.rb
|
39
36
|
homepage: https://github.com/jonlives/knife-preflight
|
40
37
|
licenses: []
|
38
|
+
metadata: {}
|
41
39
|
post_install_message:
|
42
40
|
rdoc_options:
|
43
41
|
- --charset=UTF-8
|
44
42
|
require_paths:
|
45
43
|
- lib
|
46
44
|
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
45
|
requirements:
|
49
46
|
- - ! '>='
|
50
47
|
- !ruby/object:Gem::Version
|
51
48
|
version: '0'
|
52
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
50
|
requirements:
|
55
51
|
- - ! '>='
|
56
52
|
- !ruby/object:Gem::Version
|
57
53
|
version: '0'
|
58
54
|
requirements: []
|
59
55
|
rubyforge_project: knife-preflight
|
60
|
-
rubygems_version:
|
56
|
+
rubygems_version: 2.4.1
|
61
57
|
signing_key:
|
62
58
|
specification_version: 2
|
63
59
|
summary: Knife plugin for checking what your cookbook changes will affect
|