Class: Puppet::Util::FileType

Inherits:
Object
  • Object
show all
Extended by:
ClassGen
Includes:
SELinux
Defined in:
lib/puppet/util/filetype.rb

Defined Under Namespace

Classes: FileReadError

Constant Summary

Constants included from Puppet::Util

AbsolutePathPosix, AbsolutePathWindows, DEFAULT_POSIX_MODE, DEFAULT_WINDOWS_MODE

Constants included from POSIX

POSIX::LOCALE_ENV_VARS, POSIX::USER_ENV_VARS

Constants included from SymbolicFileMode

SymbolicFileMode::SetGIDBit, SymbolicFileMode::SetUIDBit, SymbolicFileMode::StickyBit, SymbolicFileMode::SymbolicMode, SymbolicFileMode::SymbolicSpecialToBit

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ClassGen

genclass, genmodule, rmclass

Methods included from Puppet::Util

absolute_path?, benchmark, chuser, clear_environment, default_env, deterministic_rand, deterministic_rand_int, exit_on_fail, get_env, get_environment, logmethods, merge_environment, path_to_uri, pretty_backtrace, replace_file, safe_posix_fork, set_env, symbolizehash, thinmark, uri_encode, uri_query_encode, uri_to_path, which, withenv, withumask

Methods included from POSIX

#get_posix_field, #gid, #idfield, #methodbyid, #methodbyname, #search_posix_field, #uid

Methods included from SymbolicFileMode

#normalize_symbolic_mode, #symbolic_mode_to_int, #valid_symbolic_mode?

Methods included from MethodHelper

#requiredopts, #set_options, #symbolize_options

Methods included from SELinux

#get_selinux_current_context, #get_selinux_default_context, #parse_selinux_context, #selinux_category_to_label, #selinux_support?, #set_selinux_context, #set_selinux_default_context

Constructor Details

#initialize(path, default_mode = nil) ⇒ FileType

Returns a new instance of FileType.

Raises:

  • (ArgumentError)


81
82
83
84
85
# File 'lib/puppet/util/filetype.rb', line 81

def initialize(path, default_mode = nil)
  raise ArgumentError.new(_("Path is nil")) if path.nil?
  @path = path
  @default_mode = default_mode
end

Class Attribute Details

.nameObject

Returns the value of attribute name.



16
17
18
# File 'lib/puppet/util/filetype.rb', line 16

def name
  @name
end

Instance Attribute Details

#loadedObject

Returns the value of attribute loaded.



9
10
11
# File 'lib/puppet/util/filetype.rb', line 9

def loaded
  @loaded
end

#pathObject

Returns the value of attribute path.



9
10
11
# File 'lib/puppet/util/filetype.rb', line 9

def path
  @path
end

#syncedObject

Returns the value of attribute synced.



9
10
11
# File 'lib/puppet/util/filetype.rb', line 9

def synced
  @synced
end

Class Method Details

.filetype(type) ⇒ Object



72
73
74
# File 'lib/puppet/util/filetype.rb', line 72

def self.filetype(type)
  @filetypes[type]
end

.newfiletype(name, &block) ⇒ Object

Create a new filetype.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/puppet/util/filetype.rb', line 21

def self.newfiletype(name, &block)
  @filetypes ||= {}

  klass = genclass(
    name,
    :block => block,
    :prefix => "FileType",
    :hash => @filetypes
  )

  # Rename the read and write methods, so that we're sure they
  # maintain the stats.
  klass.class_eval do
    # Rename the read method
    define_method(:real_read, instance_method(:read))
    define_method(:read) do
      begin
        val = real_read
        @loaded = Time.now
        if val
          return val.gsub(/# HEADER.*\n/,'')
        else
          return ""
        end
      rescue Puppet::Error => detail
        raise
      rescue => detail
        message = _("%{klass} could not read %{path}: %{detail}") % { klass: self.class, path: @path, detail: detail }
        Puppet.log_exception(detail, message)
        raise Puppet::Error, message, detail.backtrace
      end
    end

    # And then the write method
    define_method(:real_write, instance_method(:write))
    define_method(:write) do |text|
      begin
        val = real_write(text)
        @synced = Time.now
        return val
      rescue Puppet::Error => detail
        raise
      rescue => detail
        message = _("%{klass} could not write %{path}: %{detail}") % { klass: self.class, path: @path, detail: detail }
        Puppet.log_exception(detail, message)
        raise Puppet::Error, message, detail.backtrace
      end
    end
  end
end

Instance Method Details

#bucketObject

Pick or create a filebucket to use.



77
78
79
# File 'lib/puppet/util/filetype.rb', line 77

def bucket
  @bucket ||= Puppet::Type.type(:filebucket).mkdefaultbucket.bucket
end

#cronargsObject

Arguments that will be passed to the execute method. Will set the uid to the target user if the target user and the current user are not the same



90
91
92
93
94
95
96
# File 'lib/puppet/util/filetype.rb', line 90

def cronargs
  if uid = Puppet::Util.uid(@path) and uid == Puppet::Util::SUIDManager.uid
    {:failonfail => true, :combine => true}
  else
    {:failonfail => true, :combine => true, :uid => @path}
  end
end