Class: Chef::Provider::File
Instance Attribute Summary
#current_resource, #new_resource, #node
Instance Method Summary
collapse
#generate_cookbook_url
#checksum
#action_nothing, build_from_file, #initialize
#convert_to_class_name, #filename_to_qualified_string
#method_missing
Constructor Details
This class inherits a constructor from Chef::Provider
Instance Method Details
#action_create ⇒ Object
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/chef/provider/file.rb', line 126
def action_create
unless ::File.exists?(@new_resource.path)
Chef::Log.info("Creating #{@new_resource} at #{@new_resource.path}")
::File.open(@new_resource.path, "w+") { |f| }
@new_resource.updated = true
end
set_owner unless @new_resource.owner.nil?
set_group unless @new_resource.group.nil?
set_mode unless @new_resource.mode.nil?
end
|
#action_create_if_missing ⇒ Object
137
138
139
|
# File 'lib/chef/provider/file.rb', line 137
def action_create_if_missing
action_create
end
|
#action_delete ⇒ Object
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/chef/provider/file.rb', line 141
def action_delete
if ::File.exists?(@new_resource.path)
if ::File.writable?(@new_resource.path)
backup unless ::File.symlink?(@new_resource.path)
Chef::Log.info("Deleting #{@new_resource} at #{@new_resource.path}")
::File.delete(@new_resource.path)
@new_resource.updated = true
else
raise "Cannot delete #{@new_resource} at #{@new_resource_path}!"
end
end
end
|
#action_touch ⇒ Object
154
155
156
157
158
159
160
|
# File 'lib/chef/provider/file.rb', line 154
def action_touch
action_create
time = Time.now
Chef::Log.info("Updating #{@new_resource} with new atime/mtime of #{time}")
::File.utime(time, time, @new_resource.path)
@new_resource.updated = true
end
|
#backup(file = nil) ⇒ Object
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
# File 'lib/chef/provider/file.rb', line 162
def backup(file=nil)
file ||= @new_resource.path
if @new_resource.backup != false && @new_resource.backup > 0 && ::File.exist?(file)
time = Time.now
savetime = time.strftime("%Y%m%d%H%M%S")
backup_filename = "#{@new_resource.path}.chef-#{savetime}"
Chef::Log.info("Backing up #{@new_resource} to #{backup_filename}")
FileUtils.cp(file, backup_filename)
slice_number = @new_resource.backup - 1
backup_files = Dir["#{@new_resource.path}.chef-*"].sort { |a,b| b <=> a }
if backup_files.length >= @new_resource.backup
remainder = backup_files.slice(slice_number..-1)
remainder.each do |backup_to_delete|
Chef::Log.info("Removing backup of #{@new_resource} at #{backup_to_delete}")
FileUtils.rm(backup_to_delete)
end
end
end
end
|
#compare_group ⇒ Object
Compares the group of a file. Returns true if they are the same, false if they are not.
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/chef/provider/file.rb', line 86
def compare_group
return false if @new_resource.group.nil?
@set_group_id = case @new_resource.group
when /^\d+$/, Integer
@new_resource.group.to_i
else
Etc.getgrnam(@new_resource.group).gid
end
@set_group_id == @current_resource.group
end
|
#compare_mode ⇒ Object
108
109
110
111
112
113
114
115
|
# File 'lib/chef/provider/file.rb', line 108
def compare_mode
case @new_resource.mode
when /^\d+$/, Integer
octal_mode(@new_resource.mode) == octal_mode(@current_resource.mode)
else
false
end
end
|
#compare_owner ⇒ Object
Compare the ownership of a file. Returns true if they are the same, false if they are not.
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/chef/provider/file.rb', line 61
def compare_owner
return false if @new_resource.owner.nil?
@set_user_id = case @new_resource.owner
when /^\d+$/, Integer
@new_resource.owner.to_i
else
Etc.getpwnam(@new_resource.owner).uid
end
@set_user_id == @current_resource.owner
end
|
#generate_url(url, type, args = nil) ⇒ Object
184
185
186
187
|
# File 'lib/chef/provider/file.rb', line 184
def generate_url(url, type, args=nil)
cookbook_name = (@new_resource.respond_to?(:cookbook) && @new_resource.cookbook) ? @new_resource.cookbook : @new_resource.cookbook_name
generate_cookbook_url(url, cookbook_name, type, @node, args)
end
|
#load_current_resource ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/chef/provider/file.rb', line 47
def load_current_resource
@current_resource = Chef::Resource::File.new(@new_resource.name)
@current_resource.path(@new_resource.path)
if ::File.exist?(@current_resource.path) && ::File.readable?(@current_resource.path)
cstats = ::File.stat(@current_resource.path)
@current_resource.owner(cstats.uid)
@current_resource.group(cstats.gid)
@current_resource.mode(octal_mode(cstats.mode))
@current_resource.checksum(checksum(@current_resource.path))
end
@current_resource
end
|
#set_group ⇒ Object
99
100
101
102
103
104
105
106
|
# File 'lib/chef/provider/file.rb', line 99
def set_group
unless compare_group
Chef::Log.info("Setting group to #{@set_group_id} for #{@new_resource}")
@set_group_id = negative_complement(@set_group_id)
::File.chown(nil, @set_group_id, @new_resource.path)
@new_resource.updated = true
end
end
|
#set_mode ⇒ Object
117
118
119
120
121
122
123
124
|
# File 'lib/chef/provider/file.rb', line 117
def set_mode
unless compare_mode && @new_resource.mode != nil
Chef::Log.info("Setting mode to #{sprintf("%o" % octal_mode(@new_resource.mode))} for #{@new_resource}")
::File.chmod(octal_mode(@new_resource.mode), @new_resource.path)
@new_resource.updated = true
end
end
|
#set_owner ⇒ Object
Set the ownership on the file, assuming it is not set correctly already.
76
77
78
79
80
81
82
83
|
# File 'lib/chef/provider/file.rb', line 76
def set_owner
unless compare_owner
Chef::Log.info("Setting owner to #{@set_user_id} for #{@new_resource}")
@set_user_id = negative_complement(@set_user_id)
::File.chown(@set_user_id, nil, @new_resource.path)
@new_resource.updated = true
end
end
|