From c6021fdeef342c5acc0d6e52440c3247dda5804a Mon Sep 17 00:00:00 2001 From: garadar Date: Tue, 16 Jul 2024 16:24:22 +0200 Subject: [PATCH] Update customizations.rst (#981) Add shorcut for multiple directories --- source/customizations.rst | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/source/customizations.rst b/source/customizations.rst index 059effcb..bd11f9e6 100644 --- a/source/customizations.rst +++ b/source/customizations.rst @@ -277,6 +277,53 @@ Start by creating the file - Additionally project scratch directories have a 'title' attribute and will with in the dropdown with both the title and the path. +The following example adds all directories within the specified base directories to the favorite paths. This approach is ideal when there is no specific directory naming logic to follow. It also appropriately handles Access Control Lists (ACLs). If a directory does not exist, no error is raised, making this configuration easily exportable to different clusters. + + +.. code-block:: ruby +# /etc/ood/config/apps/dashboard/initializers/ood.rb + +Rails.application.config.after_initialize do + OodFilesApp.candidate_favorite_paths.tap do |paths| + + # Hash of base paths to check for additional directories with titles + # location => Title + base_paths = { + '/home/share/' => 'Shared home', + '/srv/scratch/shares/' => 'Shared scratch', + '/srv/scratch/groups/' => 'Group scratch', + '/srv/fast/users/' => 'Fast user' + # Add more paths and titles here if needed + } + + base_paths.each do |base_path, title| + + # Check if the base path exists and is a directory, to avoid error + next unless Dir.exist?(base_path) + + # Get all entries in the current base path + Dir.entries(base_path).each do |entry| + # Construct the full path for the current entry + full_path = File.join(base_path, entry) + + # Skip if it's not a directory or if it's a special entry like '.' or '..' + next unless File.directory?(full_path) && !['.', '..'].include?(entry) + + # Check if the directory is readable and executable + if File.readable?(full_path) && File.executable?(full_path) + # Access the value of the current base_path using the `title` variable + paths << FavoritePath.new(full_path, title: "#{title}: #{File.basename(full_path)}") + end + end + end + end +end + +- The variable ``base_paths`` is an hash (``dirname`` => ``Title``) of all directories you want to parse. For the directory ``OSC_test`` in ``/srv/scratch/groups/``; the favorite path will be display as following + +|Group scratch OSC_test: /srv/scratch/groups/OSC_test + + On each request, the Dashboard will check for the existence of the directories in ``OodFilesApp.candidate_favorite_paths`` array and whichever directories exist and the user has access to will appear as links in the Files menu under