cookbooks/aws-parallelcluster-environment/recipes/config/mount_home.rb (128 lines of code) (raw):

# frozen_string_literal: true # Copyright:: 2013-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the # License. A copy of the License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "LICENSE.txt" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES # OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and # limitations under the License. return if on_docker? shared_storage = { 'efs' => node['cluster']['efs_shared_dirs'].split(','), 'fsx' => node['cluster']['fsx_shared_dirs'].split(','), 'ebs' => node['cluster']['ebs_shared_dirs'].split(','), # Making sure they are all the same object type, even though raid is just a string 'raid' => node['cluster']['raid_shared_dir'].split(','), } # Check if home is a shared filesystem shared_home = 'none' shared_home = 'internal' if node['cluster']['shared_storage_type'] == 'efs' shared_storage.each do |type, dirs| next unless dirs.include?('/home') || dirs.include?('home') shared_home = type break end if shared_home == 'none' # Mount the NFS export to compute and login nodes, the head node will export /home later case node['cluster']['node_type'] when 'ComputeFleet', 'LoginNode' volume "mount /home" do action :mount shared_dir '/home' device(lazy { "#{node['cluster']['head_node_private_ip']}:#{node['cluster']['head_node_home_path']}" }) fstype 'nfs' options node['cluster']['nfs']['hard_mount_options'] retries 10 retry_delay 6 end when 'HeadNode' Chef::Log.info("Do not mount NFS shares on the HeadNode") else raise "node_type must be ComputeFleet, LoginNode or HeadNode" end else # Identify the filesystem that is shared and mount it include_recipe "aws-parallelcluster-environment::update_fs_mapping" include_recipe "aws-parallelcluster-environment::backup_home_shared_data" case shared_home when 'internal' shared_storage['efs'].each_with_index do |dir, index| next unless dir == node['cluster']['internal_initial_shared_dir'] efs "mount internal shared efs home" do shared_dir_array ['/home'] efs_fs_id_array [node['cluster']['efs_fs_ids'].split(',')[index]] efs_encryption_in_transit_array [node['cluster']['efs_encryption_in_transits'].split(',')[index]] efs_iam_authorization_array [node['cluster']['efs_iam_authorizations'].split(',')[index]] efs_mount_point_array ['/home'] efs_access_point_id_array [node['cluster']['efs_access_point_ids'].split(',')[index]] mode '755' action :mount end break end when 'efs' shared_storage['efs'].each_with_index do |dir, index| next unless dir == "/home" || dir == 'home' efs "mount shared efs home" do shared_dir_array [dir] efs_fs_id_array [node['cluster']['efs_fs_ids'].split(',')[index]] efs_encryption_in_transit_array [node['cluster']['efs_encryption_in_transits'].split(',')[index]] efs_iam_authorization_array [node['cluster']['efs_iam_authorizations'].split(',')[index]] efs_access_point_id_array [node['cluster']['efs_access_point_ids'].split(',')[index]] mode '755' action :mount end break end when 'fsx' shared_storage['fsx'].each_with_index do |dir, index| next unless dir == "/home" || dir == 'home' lustre "mount shared fsx home" do fsx_fs_id_array [node['cluster']['fsx_fs_ids'].split(',')[index]] fsx_fs_type_array [node['cluster']['fsx_fs_types'].split(',')[index]] fsx_shared_dir_array [dir] fsx_dns_name_array [node['cluster']['fsx_dns_names'].split(',')[index]] fsx_mount_name_array [node['cluster']['fsx_mount_names'].split(',')[index]] fsx_volume_junction_path_array [node['cluster']['fsx_volume_junction_paths'].split(',')[index]] mode '755' action :mount end break end when 'ebs' case node['cluster']['node_type'] when 'HeadNode' shared_storage['ebs'].each_with_index do |dir, index| next unless dir == "/home" || dir == 'home' manage_ebs "add ebs /home" do shared_dir_array [dir] vol_array [node['cluster']['volume'].split(',')[index]] mode '755' action %i(mount export) end break end when 'ComputeFleet', 'LoginNode' volume "mount /home" do action :mount shared_dir '/home' device(lazy { "#{node['cluster']['head_node_private_ip']}:#{format_directory('/home')}" }) fstype 'nfs' mode '755' options node['cluster']['nfs']['hard_mount_options'] retries 10 retry_delay 6 end end when 'raid' case node['cluster']['node_type'] when 'HeadNode' raid "add raid /home" do raid_shared_dir '/home' raid_type node['cluster']['raid_type'] raid_vol_array node['cluster']['raid_vol_ids'].split(',') mode '755' action %i(mount export) end when 'ComputeFleet', 'LoginNode' volume "mount raid /home volume over NFS" do action :mount shared_dir '/home' device(lazy { "#{node['cluster']['head_node_private_ip']}:/home" }) fstype 'nfs' mode '755' options node['cluster']['nfs']['hard_mount_options'] retries 10 retry_delay 6 end end end include_recipe "aws-parallelcluster-environment::restore_home_shared_data" end