Class: LogStash::Setting::WritableDirectory
- Inherits:
-
LogStash::Setting
- Object
- LogStash::Setting
- LogStash::Setting::WritableDirectory
- Defined in:
- lib/logstash/settings.rb
Instance Attribute Summary
Attributes inherited from LogStash::Setting
Instance Method Summary collapse
-
#initialize(name, default = nil, strict = false) ⇒ WritableDirectory
constructor
A new instance of WritableDirectory.
- #validate(path) ⇒ Object
- #value ⇒ Object
Methods inherited from LogStash::Setting
#==, #reset, #set, #set?, #strict?, #to_hash, #validate_value
Methods included from Util::Loggable
included, #logger, #slow_logger
Constructor Details
#initialize(name, default = nil, strict = false) ⇒ WritableDirectory
Returns a new instance of WritableDirectory.
439 440 441 |
# File 'lib/logstash/settings.rb', line 439 def initialize(name, default=nil, strict=false) super(name, ::String, default, strict) end |
Instance Method Details
#validate(path) ⇒ Object
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 |
# File 'lib/logstash/settings.rb', line 443 def validate(path) super(path) if ::File.directory?(path) if !::File.writable?(path) raise ::ArgumentError.new("Path \"#{path}\" must be a writable directory. It is not writable.") end elsif ::File.symlink?(path) # TODO(sissel): I'm OK if we relax this restriction. My experience # is that it's usually easier and safer to just reject symlinks. raise ::ArgumentError.new("Path \"#{path}\" must be a writable directory. It cannot be a symlink.") elsif ::File.exist?(path) raise ::ArgumentError.new("Path \"#{path}\" must be a writable directory. It is not a directory.") else parent = ::File.dirname(path) if !::File.writable?(parent) raise ::ArgumentError.new("Path \"#{path}\" does not exist and I cannot create it because the parent path \"#{parent}\" is not writable.") end end # If we get here, the directory exists and is writable. true end |
#value ⇒ Object
467 468 469 470 471 472 473 474 475 476 477 478 479 480 |
# File 'lib/logstash/settings.rb', line 467 def value super.tap do |path| if !::File.directory?(path) # Create the directory if it doesn't exist. begin logger.info("Creating directory", setting: name, path: path) ::FileUtils.mkdir_p(path) rescue => e # TODO(sissel): Catch only specific exceptions? raise ::ArgumentError.new("Path \"#{path}\" does not exist, and I failed trying to create it: #{e.class.name} - #{e}") end end end end |