Class: Puppet::FileServing::Metadata
- Extended by:
- Indirector
- Includes:
- Util::Checksums
- Defined in:
- lib/vendor/puppet/file_serving/metadata.rb
Overview
A class that handles retrieving file metadata.
Defined Under Namespace
Classes: MetaStat, WindowsStat
Constant Summary collapse
- PARAM_ORDER =
[:mode, :ftype, :owner, :group]
Constants included from Indirector
Instance Attribute Summary collapse
-
#checksum ⇒ Object
readonly
Returns the value of attribute checksum.
-
#checksum_type ⇒ Object
Returns the value of attribute checksum_type.
-
#destination ⇒ Object
readonly
Returns the value of attribute destination.
-
#ftype ⇒ Object
readonly
Returns the value of attribute ftype.
-
#group ⇒ Object
readonly
Returns the value of attribute group.
-
#mode ⇒ Object
readonly
Returns the value of attribute mode.
-
#owner ⇒ Object
readonly
Returns the value of attribute owner.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
Attributes inherited from Base
#links, #relative_path, #source
Class Method Summary collapse
Instance Method Summary collapse
- #attributes_with_tabs ⇒ Object
-
#collect ⇒ Object
Retrieve the attributes for this file, relative to a base directory.
- #collect_stat(path) ⇒ Object
-
#initialize(path, data = {}) ⇒ Metadata
constructor
A new instance of Metadata.
- #to_pson(*args) ⇒ Object
- #to_pson_data_hash ⇒ Object
Methods included from Indirector
Methods included from Util::Checksums
#checksum?, #ctime, #ctime_file, #md5, #md5_file, #md5_stream, #md5lite, #md5lite_file, #mtime, #mtime_file, #mtime_stream, #none, #none_file, #none_stream, #sha1, #sha1_file, #sha1_stream, #sha1lite, #sha1lite_file, #sumdata, #sumtype
Methods inherited from Base
absolute?, #exist?, #full_path, #stat
Constructor Details
#initialize(path, data = {}) ⇒ Metadata
Returns a new instance of Metadata.
109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 109 def initialize(path,data={}) @owner = data.delete('owner') @group = data.delete('group') @mode = data.delete('mode') if checksum = data.delete('checksum') @checksum_type = checksum['type'] @checksum = checksum['value'] end @checksum_type ||= "md5" @ftype = data.delete('type') @destination = data.delete('destination') super(path,data) end |
Instance Attribute Details
#checksum ⇒ Object (readonly)
Returns the value of attribute checksum.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def checksum @checksum end |
#checksum_type ⇒ Object
Returns the value of attribute checksum_type.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def checksum_type @checksum_type end |
#destination ⇒ Object (readonly)
Returns the value of attribute destination.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def destination @destination end |
#ftype ⇒ Object (readonly)
Returns the value of attribute ftype.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def ftype @ftype end |
#group ⇒ Object (readonly)
Returns the value of attribute group.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def group @group end |
#mode ⇒ Object (readonly)
Returns the value of attribute mode.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def mode @mode end |
#owner ⇒ Object (readonly)
Returns the value of attribute owner.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def owner @owner end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
15 16 17 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 15 def path @path end |
Class Method Details
.from_pson(data) ⇒ Object
151 152 153 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 151 def self.from_pson(data) new(data.delete('path'), data) end |
Instance Method Details
#attributes_with_tabs ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 19 def attributes_with_tabs raise(ArgumentError, "Cannot manage files of type #{ftype}") unless ['file','directory','link'].include? ftype desc = [] PARAM_ORDER.each { |check| check = :ftype if check == :type desc << send(check) } desc << checksum desc << @destination rescue nil if ftype == 'link' desc.join("\t") end |
#collect ⇒ Object
Retrieve the attributes for this file, relative to a base directory. Note that File.stat raises Errno::ENOENT if the file is absent and this method does not catch that exception.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 84 def collect real_path = full_path stat = collect_stat(real_path) @owner = stat.owner @group = stat.group @ftype = stat.ftype # We have to mask the mode, yay. @mode = stat.mode & 007777 case stat.ftype when "file" @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", real_path).to_s when "directory" # Always just timestamp the directory. @checksum_type = "ctime" @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", path).to_s when "link" @destination = File.readlink(real_path) @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", real_path).to_s rescue nil else raise ArgumentError, "Cannot manage files of type #{stat.ftype}" end end |
#collect_stat(path) ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 71 def collect_stat(path) stat = stat() if Puppet.features.microsoft_windows? WindowsStat.new(stat, path) else MetaStat.new(stat) end end |
#to_pson(*args) ⇒ Object
147 148 149 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 147 def to_pson(*args) to_pson_data_hash.to_pson(*args) end |
#to_pson_data_hash ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/vendor/puppet/file_serving/metadata.rb', line 124 def to_pson_data_hash { 'document_type' => 'FileMetadata', 'data' => super['data'].update( { 'owner' => owner, 'group' => group, 'mode' => mode, 'checksum' => { 'type' => checksum_type, 'value' => checksum }, 'type' => ftype, 'destination' => destination, }), 'metadata' => { 'api_version' => 1 } } end |