knife-psearch 0.0.3 → 0.9.0
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 +7 -0
- data/lib/chef/knife/psearch.rb +80 -7
- data/lib/chef/search/partial_search.rb +1 -1
- data/lib/knife-psearch/version.rb +1 -1
- metadata +8 -9
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 166bc4b45854a5ae83079c0ec2bd72971151b00d
|
4
|
+
data.tar.gz: 5e7955d0be6902d35a6b6cdadff03fb8a6328f7b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fb1878e420d492a56986b58f78bafd2189b0d03be3b78a7237bbb1b50adbf6d4861a64a2022d83df5458ada4f4e6d45bef096de91ec370346818200f1f2c931b
|
7
|
+
data.tar.gz: 4caa4840efd5b0e1ba4a11833432e4ab5bc6c39efa6620f078a429b7a48e4b35fa16bded6cb04dbb7dee5eff24d087095e4104ad5bc84fd623b1d00119d98b35
|
data/lib/chef/knife/psearch.rb
CHANGED
@@ -5,10 +5,16 @@
|
|
5
5
|
#
|
6
6
|
# This plugin is not yes officially supported by Opscode
|
7
7
|
|
8
|
+
require 'chef/knife'
|
9
|
+
require 'chef/knife/core/node_presenter'
|
10
|
+
|
8
11
|
class Psearch < Chef::Knife
|
9
|
-
banner "knife psearch INDEX SEARCH NAME=DESIRED_KEY_PATH,[NAME=DESIRED_KEY_PATH]"
|
12
|
+
banner "knife psearch INDEX SEARCH [NAME=DESIRED_KEY_PATH,[NAME=DESIRED_KEY_PATH]]"
|
13
|
+
|
14
|
+
include ::Chef::Knife::Core::MultiAttributeReturnOption
|
10
15
|
|
11
16
|
deps do
|
17
|
+
require 'chef/node'
|
12
18
|
require 'chef/search/partial_search'
|
13
19
|
end
|
14
20
|
|
@@ -25,6 +31,11 @@ class Psearch < Chef::Knife
|
|
25
31
|
:default => 0,
|
26
32
|
:proc => lambda { |i| i.to_i }
|
27
33
|
|
34
|
+
option :id_only,
|
35
|
+
:short => "-i",
|
36
|
+
:long => "--id-only",
|
37
|
+
:description => "Show only the ID of matching objects"
|
38
|
+
|
28
39
|
option :rows,
|
29
40
|
:short => "-R INT",
|
30
41
|
:long => "--rows INT",
|
@@ -32,20 +43,67 @@ class Psearch < Chef::Knife
|
|
32
43
|
:default => 1000,
|
33
44
|
:proc => lambda { |i| i.to_i }
|
34
45
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
46
|
+
DEFAULT_NODE_HASH = {
|
47
|
+
"name" => ["name"],
|
48
|
+
"chef_environment" => ["chef_environment"],
|
49
|
+
"fqdn" => ["fqdn"],
|
50
|
+
"ipaddress" => ["ipaddress"],
|
51
|
+
"run_list" => ["run_list"],
|
52
|
+
"roles" => ["roles"],
|
53
|
+
"recipes" => ["recipes"],
|
54
|
+
"platform" => ["platform"],
|
55
|
+
"tags" => ["tags"]
|
56
|
+
}
|
57
|
+
|
58
|
+
# "id" will be used by the generic presenter automatically when
|
59
|
+
# config[:id_only] is true
|
60
|
+
ID_ONLY_HASH = {
|
61
|
+
"id" => ["name"]
|
62
|
+
}
|
39
63
|
|
40
64
|
def run
|
41
65
|
@index, @search, *@keys = @name_args
|
66
|
+
@inflate_nodes = false
|
67
|
+
|
42
68
|
args_hash = {}
|
43
|
-
args_hash[:keys] =
|
69
|
+
args_hash[:keys] = if config[:id_only]
|
70
|
+
ID_ONLY_HASH
|
71
|
+
elsif ! @keys.empty?
|
72
|
+
build_key_hash
|
73
|
+
elsif ! config[:attribute].nil? && ! config[:attribute].empty?
|
74
|
+
# config[:attribute] comes from the -a option,
|
75
|
+
# which is provided by Knife::Core::MultiAttributeReturnOption
|
76
|
+
build_key_hash_from_attrs(config[:attribute])
|
77
|
+
elsif @index == "node"
|
78
|
+
DEFAULT_NODE_HASH
|
79
|
+
else
|
80
|
+
ui.warn("Falling back to full search. Use the -a or -i option to enable parital search")
|
81
|
+
nil
|
82
|
+
end
|
83
|
+
|
84
|
+
# Create output similar to knife-search
|
85
|
+
# in the default case by creating Chef::Node objects
|
86
|
+
# and using the node presenter
|
87
|
+
if args_hash[:keys] == DEFAULT_NODE_HASH && @index == 'node'
|
88
|
+
Chef::Log.debug("Using NodePresenter for output")
|
89
|
+
ui.use_presenter ::Chef::Knife::Core::NodePresenter
|
90
|
+
@inflate_nodes = true
|
91
|
+
end
|
92
|
+
|
44
93
|
args_hash[:sort] = config[:sort]
|
45
94
|
args_hash[:start] = config[:start]
|
46
95
|
args_hash[:rows] = config[:rows]
|
47
96
|
results = Chef::PartialSearch.new.search(@index, @search, args_hash)
|
48
|
-
|
97
|
+
print_results(results.first)
|
98
|
+
end
|
99
|
+
|
100
|
+
def build_key_hash_from_attrs(attrs)
|
101
|
+
key_hash = {}
|
102
|
+
attrs.each do |a|
|
103
|
+
key_hash[a] = a.split(".")
|
104
|
+
end
|
105
|
+
key_hash["id"] = [ "name" ] unless key_hash.has_key?("name")
|
106
|
+
key_hash
|
49
107
|
end
|
50
108
|
|
51
109
|
def build_key_hash
|
@@ -60,4 +118,19 @@ class Psearch < Chef::Knife
|
|
60
118
|
key_hash["name"] = [ "name" ] unless key_hash.has_key?("name")
|
61
119
|
key_hash
|
62
120
|
end
|
121
|
+
|
122
|
+
def print_results(items)
|
123
|
+
items.each do |res|
|
124
|
+
res = create_node(res) if @inflate_nodes
|
125
|
+
ui.output ui.format_for_display(res)
|
126
|
+
puts "\n" if ! config[:id_only]
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def create_node(node_data)
|
131
|
+
node_data['attributes'] = node_data.reject do |key, value|
|
132
|
+
["name", "chef_environment", "run_list"].include?(key)
|
133
|
+
end
|
134
|
+
Chef::Node.json_create(node_data)
|
135
|
+
end
|
63
136
|
end
|
@@ -33,7 +33,7 @@ class Chef
|
|
33
33
|
attr_accessor :rest
|
34
34
|
|
35
35
|
def initialize(url=nil)
|
36
|
-
@rest = ::Chef::REST.new(url || ::Chef::Config[:
|
36
|
+
@rest = ::Chef::REST.new(url || ::Chef::Config[:chef_server_url])
|
37
37
|
end
|
38
38
|
|
39
39
|
# Search Solr for objects of a given type, for a given query. If you give
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-psearch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.9.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steven Danna
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-11-19 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Knife Plugin for Chef 11's Partial Search
|
15
14
|
email: steve@opscode.com
|
@@ -24,26 +23,26 @@ files:
|
|
24
23
|
- lib/knife-psearch/version.rb
|
25
24
|
homepage: http://wiki.opscode.com/display/chef
|
26
25
|
licenses: []
|
26
|
+
metadata: {}
|
27
27
|
post_install_message:
|
28
28
|
rdoc_options: []
|
29
29
|
require_paths:
|
30
30
|
- lib
|
31
31
|
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
-
none: false
|
33
32
|
requirements:
|
34
|
-
- -
|
33
|
+
- - ">="
|
35
34
|
- !ruby/object:Gem::Version
|
36
35
|
version: '0'
|
37
36
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
37
|
requirements:
|
40
|
-
- -
|
38
|
+
- - ">="
|
41
39
|
- !ruby/object:Gem::Version
|
42
40
|
version: '0'
|
43
41
|
requirements: []
|
44
42
|
rubyforge_project:
|
45
|
-
rubygems_version:
|
43
|
+
rubygems_version: 2.4.1
|
46
44
|
signing_key:
|
47
|
-
specification_version:
|
45
|
+
specification_version: 4
|
48
46
|
summary: Knife Plugin for Chef 11's Partial Search
|
49
47
|
test_files: []
|
48
|
+
has_rdoc:
|