Skip to content
This repository has been archived by the owner on Mar 6, 2020. It is now read-only.

permit symlinks in config directory #18

Merged
merged 3 commits into from
Aug 6, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/sensu/settings/loader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ def load_file(file)
def load_directory(directory)
warning("loading config files from directory", :directory => directory)
path = directory.gsub(/\\(?=\S)/, "/")
Dir.glob(File.join(path, "**/*.json")).each do |file|
Dir.glob(File.join(path, "**{,/*/**}/*.json")).uniq.each do |file|
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the uniq() for? Shouldn't have duplicate file paths, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The glob seems to match files multiple times:

[7] pry(main)> Dir.glob(File.join("**/*.json")) { |i| puts i }
nested/file.json
merger.json
=> nil
[8] pry(main)> Dir.glob(File.join("**{,/*/**}/*.json")) { |i| puts i }
nested/file.json
merger.json
nested/file.json
alternative/symlinked.json
=> nil

Took the glob from here: http://stackoverflow.com/questions/357754/can-i-traverse-symlinked-directories-in-ruby-with-a-glob

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems we need a uniq() anyways, as this pattern along w/ alternatives, will pick up a symlink to a dir that it has already listed 👍

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although, it is still a uniq file path :P

load_file(file)
end
end
Expand Down
1 change: 1 addition & 0 deletions spec/assets/alternative/conf.d/loop
11 changes: 11 additions & 0 deletions spec/assets/alternative/conf.d/symlinked.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"checks": {
"symlinked": {
"command": "echo -n symlinked",
"subscribers": [
"baz"
],
"interval": 60
}
}
}
1 change: 1 addition & 0 deletions spec/assets/conf.d/alternative
4 changes: 2 additions & 2 deletions spec/loader_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@
it "can load settings from files in a directory" do
@loader.load_directory(@config_dir)
warnings = @loader.warnings
expect(warnings.size).to eq(4)
expect(warnings.size).to eq(6)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did this increase by 2?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"loading config file" & "config file applied changes"

messages = warnings.map do |warning|
warning[:message]
end
Expand All @@ -159,7 +159,7 @@
it "can set environment variables for child processes" do
@loader.load_file(@config_file)
@loader.load_directory(@config_dir)
expect(@loader.loaded_files.size).to eq(3)
expect(@loader.loaded_files.size).to eq(4)
@loader.set_env!
expect(ENV["SENSU_LOADED_TEMPFILE"]).to match(/sensu_rspec_loaded_files/)
loaded_files = IO.read(ENV["SENSU_LOADED_TEMPFILE"])
Expand Down