knife-essentials 0.6.1 → 0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/chef/knife/delete.rb +33 -0
- data/lib/chef/knife/show.rb +3 -3
- data/lib/chef_fs/file_system.rb +5 -7
- data/lib/chef_fs/file_system/chef_server_root_dir.rb +4 -1
- data/lib/chef_fs/file_system/cookbook_dir.rb +3 -0
- data/lib/chef_fs/file_system/data_bag_dir.rb +13 -0
- data/lib/chef_fs/file_system/file_system_entry.rb +6 -2
- data/lib/chef_fs/file_system/file_system_error.rb +11 -0
- data/lib/chef_fs/file_system/must_delete_recursively_error.rb +11 -0
- data/lib/chef_fs/file_system/not_found_error.rb +4 -4
- data/lib/chef_fs/file_system/rest_list_dir.rb +0 -1
- data/lib/chef_fs/file_system/rest_list_entry.rb +1 -1
- data/lib/chef_fs/version.rb +1 -1
- data/spec/chef_fs/file_system/chef_server_root_dir_spec.rb +11 -4
- metadata +4 -1
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'chef_fs/knife'
|
2
|
+
require 'chef_fs/file_system'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
class Knife
|
6
|
+
class Delete < ChefFS::Knife
|
7
|
+
banner "delete [PATTERN1 ... PATTERNn]"
|
8
|
+
|
9
|
+
common_options
|
10
|
+
|
11
|
+
option :recurse,
|
12
|
+
:long => '--[no-]recurse',
|
13
|
+
:boolean => true,
|
14
|
+
:default => false,
|
15
|
+
:description => "Delete directories recursively."
|
16
|
+
|
17
|
+
def run
|
18
|
+
# Get the matches (recursively)
|
19
|
+
pattern_args.each do |pattern|
|
20
|
+
ChefFS::FileSystem.list(chef_fs, pattern) do |result|
|
21
|
+
begin
|
22
|
+
result.delete(config[:recurse])
|
23
|
+
puts "Deleted #{result.path_for_printing}"
|
24
|
+
rescue ChefFS::FileSystem::NotFoundError
|
25
|
+
STDERR.puts "result.path_for_printing}: No such file or directory"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/lib/chef/knife/show.rb
CHANGED
@@ -13,14 +13,14 @@ class Chef
|
|
13
13
|
pattern_args.each do |pattern|
|
14
14
|
ChefFS::FileSystem.list(chef_fs, pattern) do |result|
|
15
15
|
if result.dir?
|
16
|
-
STDERR.puts "#{
|
16
|
+
STDERR.puts "#{result.path_for_printing}: is a directory" if pattern.exact_path
|
17
17
|
else
|
18
18
|
begin
|
19
19
|
value = result.read
|
20
|
-
puts "#{
|
20
|
+
puts "#{result.path_for_printing}:"
|
21
21
|
output(format_for_display(value))
|
22
22
|
rescue ChefFS::FileSystem::NotFoundError
|
23
|
-
STDERR.puts "#{
|
23
|
+
STDERR.puts "#{result.path_for_printing}: No such file or directory"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/chef_fs/file_system.rb
CHANGED
@@ -96,9 +96,9 @@ module ChefFS
|
|
96
96
|
#
|
97
97
|
def self.copy_to(pattern, src_root, dest_root, recurse_depth, options)
|
98
98
|
found_result = false
|
99
|
-
list_pairs(pattern, src_root, dest_root) do |
|
99
|
+
list_pairs(pattern, src_root, dest_root) do |src, dest|
|
100
100
|
found_result = true
|
101
|
-
copy_entries(
|
101
|
+
copy_entries(src, dest, recurse_depth, options)
|
102
102
|
end
|
103
103
|
if !found_result && pattern.exact_path
|
104
104
|
puts "#{pattern}: No such file or directory on remote or local"
|
@@ -215,8 +215,8 @@ module ChefFS
|
|
215
215
|
if options[:dry_run]
|
216
216
|
puts "Would delete #{dest_entry.path_for_printing}"
|
217
217
|
else
|
218
|
-
dest_entry.delete
|
219
|
-
puts "
|
218
|
+
dest_entry.delete(true)
|
219
|
+
puts "Deleted extra entry #{dest_entry.path_for_printing} (purge is on)"
|
220
220
|
end
|
221
221
|
else
|
222
222
|
Chef::Log.info("Not deleting extra entry #{dest_entry.path_for_printing} (purge is off)")
|
@@ -314,9 +314,7 @@ module ChefFS
|
|
314
314
|
parent = entry.parent
|
315
315
|
if !parent.exists?
|
316
316
|
parent_parent = get_or_create_parent(entry.parent, options)
|
317
|
-
if options[:dry_run]
|
318
|
-
puts "Would create #{parent.path_for_printing}"
|
319
|
-
else
|
317
|
+
if !options[:dry_run]
|
320
318
|
parent = parent_parent.create_child(parent.name, true)
|
321
319
|
puts "Created #{parent.path_for_printing}"
|
322
320
|
end
|
@@ -50,12 +50,15 @@ module ChefFS
|
|
50
50
|
if repo_mode == 'everything'
|
51
51
|
result += [
|
52
52
|
RestListDir.new("clients", self),
|
53
|
-
NodesDir.new(self)
|
53
|
+
NodesDir.new(self),
|
54
|
+
RestListDir.new("users", self)
|
54
55
|
]
|
55
56
|
end
|
56
57
|
result.sort_by { |child| child.name }
|
57
58
|
end
|
58
59
|
end
|
60
|
+
|
61
|
+
# Yeah, sorry, I'm not putting delete on this thing.
|
59
62
|
end
|
60
63
|
end
|
61
64
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'chef_fs/file_system/rest_list_dir'
|
2
2
|
require 'chef_fs/file_system/data_bag_item'
|
3
3
|
require 'chef_fs/file_system/not_found_error'
|
4
|
+
require 'chef_fs/file_system/must_delete_recursively_error'
|
4
5
|
|
5
6
|
module ChefFS
|
6
7
|
module FileSystem
|
@@ -30,6 +31,18 @@ module ChefFS
|
|
30
31
|
DataBagItem.new(name, self, exists)
|
31
32
|
end
|
32
33
|
|
34
|
+
def delete(recurse)
|
35
|
+
if !recurse
|
36
|
+
raise ChefFS::FileSystem::MustDeleteRecursivelyError.new, "#{path_for_printing} must be deleted recursively"
|
37
|
+
end
|
38
|
+
begin
|
39
|
+
rest.delete_rest(api_path)
|
40
|
+
rescue Net::HTTPServerException
|
41
|
+
if $!.response.code == "404"
|
42
|
+
raise ChefFS::FileSystem::NotFoundError.new($!), "#{path_for_printing} not found"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
33
46
|
end
|
34
47
|
end
|
35
48
|
end
|
@@ -40,9 +40,13 @@ module ChefFS
|
|
40
40
|
File.directory?(file_path)
|
41
41
|
end
|
42
42
|
|
43
|
-
def delete
|
43
|
+
def delete(recurse)
|
44
44
|
if dir?
|
45
|
-
|
45
|
+
if recurse
|
46
|
+
FileUtils.rm_rf(file_path)
|
47
|
+
else
|
48
|
+
File.rmdir(file_path)
|
49
|
+
end
|
46
50
|
else
|
47
51
|
File.delete(file_path)
|
48
52
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
+
require 'chef_fs/file_system/file_system_error'
|
2
|
+
|
1
3
|
module ChefFS
|
2
4
|
module FileSystem
|
3
|
-
class NotFoundError <
|
5
|
+
class NotFoundError < FileSystemError
|
4
6
|
def initialize(cause = nil)
|
5
|
-
|
7
|
+
super(cause)
|
6
8
|
end
|
7
|
-
|
8
|
-
attr_reader :cause
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/chef_fs/version.rb
CHANGED
@@ -140,20 +140,20 @@ describe ChefFS::FileSystem::ChefServerRootDir do
|
|
140
140
|
root_dir.path_for_printing.should == 'remote/'
|
141
141
|
end
|
142
142
|
it 'has correct children' do
|
143
|
-
root_dir.children.map { |child| child.name }.should =~ %w(clients cookbooks data_bags environments nodes roles)
|
143
|
+
root_dir.children.map { |child| child.name }.should =~ %w(clients cookbooks data_bags environments nodes roles users)
|
144
144
|
end
|
145
145
|
it 'can have children with the known names' do
|
146
|
-
%w(clients cookbooks data_bags environments nodes roles).each { |child| root_dir.can_have_child?(child, true).should be_true }
|
146
|
+
%w(clients cookbooks data_bags environments nodes roles users).each { |child| root_dir.can_have_child?(child, true).should be_true }
|
147
147
|
end
|
148
148
|
it 'cannot have files as children' do
|
149
|
-
%w(clients cookbooks data_bags environments nodes roles).each { |child| root_dir.can_have_child?(child, false).should be_false }
|
149
|
+
%w(clients cookbooks data_bags environments nodes roles users).each { |child| root_dir.can_have_child?(child, false).should be_false }
|
150
150
|
root_dir.can_have_child?('blah', false).should be_false
|
151
151
|
end
|
152
152
|
it 'cannot have other child directories than the known names' do
|
153
153
|
root_dir.can_have_child?('blah', true).should be_false
|
154
154
|
end
|
155
155
|
it 'child() responds to children' do
|
156
|
-
%w(clients cookbooks data_bags environments nodes roles).each { |child| root_dir.child(child).exists?.should be_true }
|
156
|
+
%w(clients cookbooks data_bags environments nodes roles users).each { |child| root_dir.child(child).exists?.should be_true }
|
157
157
|
end
|
158
158
|
context 'nonexistent child()' do
|
159
159
|
let(:nonexistent_child) { root_dir.child('blah') }
|
@@ -209,4 +209,11 @@ describe ChefFS::FileSystem::ChefServerRootDir do
|
|
209
209
|
|
210
210
|
it_behaves_like 'a json rest endpoint dir'
|
211
211
|
end
|
212
|
+
|
213
|
+
context 'root.child(users)' do
|
214
|
+
let(:endpoint_name) { 'users' }
|
215
|
+
let(:endpoint) { root_dir.child('users') }
|
216
|
+
|
217
|
+
it_behaves_like 'a json rest endpoint dir'
|
218
|
+
end
|
212
219
|
end
|
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: 0.
|
4
|
+
version: '0.7'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -22,6 +22,7 @@ files:
|
|
22
22
|
- LICENSE
|
23
23
|
- README.rdoc
|
24
24
|
- Rakefile
|
25
|
+
- lib/chef/knife/delete.rb
|
25
26
|
- lib/chef/knife/diff.rb
|
26
27
|
- lib/chef/knife/download.rb
|
27
28
|
- lib/chef/knife/list.rb
|
@@ -44,7 +45,9 @@ files:
|
|
44
45
|
- lib/chef_fs/file_system/data_bag_item.rb
|
45
46
|
- lib/chef_fs/file_system/data_bags_dir.rb
|
46
47
|
- lib/chef_fs/file_system/file_system_entry.rb
|
48
|
+
- lib/chef_fs/file_system/file_system_error.rb
|
47
49
|
- lib/chef_fs/file_system/file_system_root_dir.rb
|
50
|
+
- lib/chef_fs/file_system/must_delete_recursively_error.rb
|
48
51
|
- lib/chef_fs/file_system/nodes_dir.rb
|
49
52
|
- lib/chef_fs/file_system/nonexistent_fs_object.rb
|
50
53
|
- lib/chef_fs/file_system/not_found_error.rb
|