Class: Puppet::Util::FileType

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

Overview

API:

  • public

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_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_support?, #set_selinux_context, #set_selinux_default_context

Constructor Details

#initialize(path, default_mode = nil) ⇒ FileType

Returns a new instance of FileType.

Raises:

API:

  • public



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

API:

  • public



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

def name
  @name
end

Instance Attribute Details

#loadedObject

API:

  • public



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

def loaded
  @loaded
end

#pathObject

API:

  • public



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

def path
  @path
end

#syncedObject

API:

  • public



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

def synced
  @synced
end

Class Method Details

.filetype(type) ⇒ Object

API:

  • public



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.

API:

  • public



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 = "#{self.class} could not read #{@path}: #{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 = "#{self.class} could not write #{@path}: #{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.

API:

  • public



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

API:

  • public



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