knife-essentials 0.1 → 0.1.1
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/README.rdoc +24 -18
- data/lib/chef_fs/diff.rb +2 -2
- data/lib/chef_fs/file_system/cookbook_dir.rb +9 -0
- data/lib/chef_fs/file_system/data_bag_dir.rb +9 -0
- data/lib/chef_fs/path_utils.rb +2 -1
- data/lib/chef_fs/version.rb +1 -1
- data/spec/chef_fs/diff_spec.rb +57 -8
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -94,21 +94,27 @@ Works just like 'ls', except it lists files on the server.
|
|
94
94
|
Works just like +knife node show+, +knife role show+, etc. except there is One Verb To Rule
|
95
95
|
Them All.
|
96
96
|
|
97
|
-
== NOTE
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
knife list data_bags/
|
113
|
-
|
114
|
-
|
97
|
+
== NOTE ABOUT WILDCARDS
|
98
|
+
|
99
|
+
knife-essentials supports wildcards internally, and will use them to sift through objects
|
100
|
+
on the server. This can be very useful. However, since it uses the same wildcard
|
101
|
+
characters as the Unix command line (+*+, +?+, etc.), you need to backslash them so that
|
102
|
+
the +*+ actually reaches the server. If you don't, the shell will expand the * into
|
103
|
+
actual filenames and knife will never know you typed +*+ in the first place. For example,
|
104
|
+
if the Chef server has data bags +aardvarks+, +anagrams+ and +arp_tables+, but your local
|
105
|
+
filesystem only has +aardvarks+ and +anagrams+, backslashing vs. not backslashing will
|
106
|
+
yield slightly different results:
|
107
|
+
|
108
|
+
# This actually asks the server for everything starting with a
|
109
|
+
$ knife list data_bags/a\*
|
110
|
+
aardvarks/ anagrams/ arp_tables/
|
111
|
+
# But this ...
|
112
|
+
$ knife list data_bags/a*
|
113
|
+
aardvarks/ anagrams/
|
114
|
+
# Is actually expanded by the command line to this:
|
115
|
+
$ knife list data_bags/aardvarks data_bags/aardvarks
|
116
|
+
aardvarks/ anagrams/
|
117
|
+
|
118
|
+
You can avoid this problem permanently in zsh with this alias:
|
119
|
+
|
120
|
+
alias knife="noglob knife"
|
data/lib/chef_fs/diff.rb
CHANGED
@@ -121,8 +121,8 @@ module ChefFS
|
|
121
121
|
# infinitely.
|
122
122
|
#
|
123
123
|
def self.diffable_leaves(a, b, recurse_depth)
|
124
|
-
# If
|
125
|
-
if recurse_depth != 0 && a.dir? && b.dir?
|
124
|
+
# If both are directories, recurse into them and diff the children instead of returning ourselves.
|
125
|
+
if recurse_depth != 0 && a.dir? && b.dir?
|
126
126
|
a_children_names = Set.new
|
127
127
|
a.children.each do |a_child|
|
128
128
|
a_children_names << a_child.name
|
@@ -50,6 +50,15 @@ module ChefFS
|
|
50
50
|
@children
|
51
51
|
end
|
52
52
|
|
53
|
+
def dir?
|
54
|
+
exists?
|
55
|
+
end
|
56
|
+
|
57
|
+
def read
|
58
|
+
# This will only be called if dir? is false, which means exists? is false.
|
59
|
+
raise ChefFS::FileSystem::NotFoundException, path_for_printing
|
60
|
+
end
|
61
|
+
|
53
62
|
def exists?
|
54
63
|
if !@versions
|
55
64
|
child = parent.children.select { |child| child.name == name }.first
|
@@ -11,6 +11,15 @@ module ChefFS
|
|
11
11
|
@exists = nil
|
12
12
|
end
|
13
13
|
|
14
|
+
def dir?
|
15
|
+
exists?
|
16
|
+
end
|
17
|
+
|
18
|
+
def read
|
19
|
+
# This will only be called if dir? is false, which means exists? is false.
|
20
|
+
raise ChefFS::FileSystem::NotFoundException, path_for_printing
|
21
|
+
end
|
22
|
+
|
14
23
|
def exists?
|
15
24
|
if @exists.nil?
|
16
25
|
@exists = parent.children.any? { |child| child.name == name }
|
data/lib/chef_fs/path_utils.rb
CHANGED
@@ -16,7 +16,8 @@ module ChefFS
|
|
16
16
|
end
|
17
17
|
# dot-dot up from 'source' to the common ancestor, then
|
18
18
|
# descend to 'dest' from the common ancestor
|
19
|
-
ChefFS::PathUtils.join(*(['..']*(source_parts.length-i) + dest_parts[i,dest.length-i]))
|
19
|
+
result = ChefFS::PathUtils.join(*(['..']*(source_parts.length-i) + dest_parts[i,dest.length-i]))
|
20
|
+
result == '' ? '.' : result
|
20
21
|
end
|
21
22
|
|
22
23
|
def self.join(*parts)
|
data/lib/chef_fs/version.rb
CHANGED
data/spec/chef_fs/diff_spec.rb
CHANGED
@@ -14,6 +14,8 @@ describe ChefFS::Diff do
|
|
14
14
|
:sub_both_files => nil,
|
15
15
|
:sub_both_files_different => "a\n",
|
16
16
|
:sub_both_dirs_empty => {},
|
17
|
+
:sub_dirs_empty_in_a_filled_in_b => {},
|
18
|
+
:sub_dirs_empty_in_b_filled_in_a => { :subsub => nil },
|
17
19
|
:sub_a_only_dir => { :subsub => nil },
|
18
20
|
:sub_a_only_file => nil,
|
19
21
|
:sub_dir_in_a_file_in_b => {},
|
@@ -21,7 +23,9 @@ describe ChefFS::Diff do
|
|
21
23
|
},
|
22
24
|
:both_files => nil,
|
23
25
|
:both_files_different => "a\n",
|
24
|
-
|
26
|
+
:both_dirs_empty => {},
|
27
|
+
:dirs_empty_in_a_filled_in_b => {},
|
28
|
+
:dirs_empty_in_b_filled_in_a => { :subsub => nil },
|
25
29
|
:a_only_dir => { :subsub => nil },
|
26
30
|
:a_only_file => nil,
|
27
31
|
:dir_in_a_file_in_b => {},
|
@@ -35,6 +39,8 @@ describe ChefFS::Diff do
|
|
35
39
|
:sub_both_files => nil,
|
36
40
|
:sub_both_files_different => "b\n",
|
37
41
|
:sub_both_dirs_empty => {},
|
42
|
+
:sub_dirs_empty_in_a_filled_in_b => { :subsub => nil },
|
43
|
+
:sub_dirs_empty_in_b_filled_in_a => {},
|
38
44
|
:sub_b_only_dir => { :subsub => nil },
|
39
45
|
:sub_b_only_file => nil,
|
40
46
|
:sub_dir_in_a_file_in_b => nil,
|
@@ -43,6 +49,8 @@ describe ChefFS::Diff do
|
|
43
49
|
:both_files => nil,
|
44
50
|
:both_files_different => "b\n",
|
45
51
|
:both_dirs_empty => {},
|
52
|
+
:dirs_empty_in_a_filled_in_b => { :subsub => nil },
|
53
|
+
:dirs_empty_in_b_filled_in_a => {},
|
46
54
|
:b_only_dir => { :subsub => nil },
|
47
55
|
:b_only_file => nil,
|
48
56
|
:dir_in_a_file_in_b => nil,
|
@@ -55,7 +63,8 @@ describe ChefFS::Diff do
|
|
55
63
|
/both_dirs/sub_both_dirs/subsub
|
56
64
|
/both_dirs/sub_both_files
|
57
65
|
/both_dirs/sub_both_files_different
|
58
|
-
/both_dirs/
|
66
|
+
/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
|
67
|
+
/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
|
59
68
|
/both_dirs/sub_a_only_dir
|
60
69
|
/both_dirs/sub_a_only_file
|
61
70
|
/both_dirs/sub_b_only_dir
|
@@ -64,7 +73,8 @@ describe ChefFS::Diff do
|
|
64
73
|
/both_dirs/sub_file_in_a_dir_in_b
|
65
74
|
/both_files
|
66
75
|
/both_files_different
|
67
|
-
/
|
76
|
+
/dirs_empty_in_b_filled_in_a/subsub
|
77
|
+
/dirs_empty_in_a_filled_in_b/subsub
|
68
78
|
/a_only_dir
|
69
79
|
/a_only_file
|
70
80
|
/b_only_dir
|
@@ -96,14 +106,16 @@ describe ChefFS::Diff do
|
|
96
106
|
/both_dirs/sub_both_dirs/subsub
|
97
107
|
/both_dirs/sub_both_files
|
98
108
|
/both_dirs/sub_both_files_different
|
99
|
-
/both_dirs/
|
109
|
+
/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
|
110
|
+
/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
|
100
111
|
/both_dirs/sub_a_only_dir
|
101
112
|
/both_dirs/sub_a_only_file
|
102
113
|
/both_dirs/sub_b_only_dir
|
103
114
|
/both_dirs/sub_b_only_file
|
104
115
|
/both_dirs/sub_dir_in_a_file_in_b
|
105
116
|
/both_dirs/sub_file_in_a_dir_in_b
|
106
|
-
/
|
117
|
+
/dirs_empty_in_b_filled_in_a/subsub
|
118
|
+
/dirs_empty_in_a_filled_in_b/subsub
|
107
119
|
/a_only_dir
|
108
120
|
/b_only_dir
|
109
121
|
/dir_in_a_file_in_b
|
@@ -122,7 +134,18 @@ describe ChefFS::Diff do
|
|
122
134
|
@@ -1 +1 @@
|
123
135
|
-a
|
124
136
|
+b
|
125
|
-
','
|
137
|
+
','diff --knife a/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
|
138
|
+
new file
|
139
|
+
--- /dev/null DATE
|
140
|
+
+++ b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub DATE
|
141
|
+
@@ -0,0 +1 @@
|
142
|
+
+subsub
|
143
|
+
','diff --knife a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
|
144
|
+
deleted file
|
145
|
+
--- a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub DATE
|
146
|
+
+++ /dev/null DATE
|
147
|
+
@@ -1 +0,0 @@
|
148
|
+
-subsub
|
126
149
|
','Only in a/both_dirs: sub_a_only_dir
|
127
150
|
','diff --knife a/both_dirs/sub_a_only_file b/both_dirs/sub_a_only_file
|
128
151
|
deleted file
|
@@ -145,7 +168,18 @@ new file
|
|
145
168
|
@@ -1 +1 @@
|
146
169
|
-a
|
147
170
|
+b
|
148
|
-
','
|
171
|
+
','diff --knife a/dirs_empty_in_a_filled_in_b/subsub b/dirs_empty_in_a_filled_in_b/subsub
|
172
|
+
new file
|
173
|
+
--- /dev/null DATE
|
174
|
+
+++ b/dirs_empty_in_a_filled_in_b/subsub DATE
|
175
|
+
@@ -0,0 +1 @@
|
176
|
+
+subsub
|
177
|
+
','diff --knife a/dirs_empty_in_b_filled_in_a/subsub b/dirs_empty_in_b_filled_in_a/subsub
|
178
|
+
deleted file
|
179
|
+
--- a/dirs_empty_in_b_filled_in_a/subsub DATE
|
180
|
+
+++ /dev/null DATE
|
181
|
+
@@ -1 +0,0 @@
|
182
|
+
-subsub
|
149
183
|
','Only in a: a_only_dir
|
150
184
|
','diff --knife a/a_only_file b/a_only_file
|
151
185
|
deleted file
|
@@ -176,7 +210,18 @@ new file
|
|
176
210
|
@@ -1 +1 @@
|
177
211
|
-a
|
178
212
|
+b
|
179
|
-
','
|
213
|
+
','diff --knife a/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub
|
214
|
+
new file
|
215
|
+
--- /dev/null DATE
|
216
|
+
+++ b/both_dirs/sub_dirs_empty_in_a_filled_in_b/subsub DATE
|
217
|
+
@@ -0,0 +1 @@
|
218
|
+
+subsub
|
219
|
+
','diff --knife a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub b/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub
|
220
|
+
deleted file
|
221
|
+
--- a/both_dirs/sub_dirs_empty_in_b_filled_in_a/subsub DATE
|
222
|
+
+++ /dev/null DATE
|
223
|
+
@@ -1 +0,0 @@
|
224
|
+
-subsub
|
180
225
|
','Only in a/both_dirs: sub_a_only_dir
|
181
226
|
','diff --knife a/both_dirs/sub_a_only_file b/both_dirs/sub_a_only_file
|
182
227
|
deleted file
|
@@ -209,6 +254,8 @@ new file
|
|
209
254
|
-a
|
210
255
|
+b
|
211
256
|
','Common subdirectories: /both_dirs_empty
|
257
|
+
','Common subdirectories: /dirs_empty_in_b_filled_in_a
|
258
|
+
','Common subdirectories: /dirs_empty_in_a_filled_in_b
|
212
259
|
','Only in a: a_only_dir
|
213
260
|
','diff --knife a/a_only_file b/a_only_file
|
214
261
|
deleted file
|
@@ -241,6 +288,8 @@ new file
|
|
241
288
|
-a
|
242
289
|
+b
|
243
290
|
','Common subdirectories: /both_dirs_empty
|
291
|
+
','Common subdirectories: /dirs_empty_in_b_filled_in_a
|
292
|
+
','Common subdirectories: /dirs_empty_in_a_filled_in_b
|
244
293
|
','Only in a: a_only_dir
|
245
294
|
','diff --knife a/a_only_file b/a_only_file
|
246
295
|
deleted file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-essentials
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-04-26 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
|
-
description:
|
14
|
+
description: Universal knife verbs that work with your Chef repository
|
15
15
|
email: jkeiser@opscode.com
|
16
16
|
executables: []
|
17
17
|
extensions: []
|
@@ -75,5 +75,5 @@ rubyforge_project:
|
|
75
75
|
rubygems_version: 1.8.10
|
76
76
|
signing_key:
|
77
77
|
specification_version: 3
|
78
|
-
summary:
|
78
|
+
summary: Universal knife verbs that work with your Chef repository
|
79
79
|
test_files: []
|