cookbooks/aws-parallelcluster-environment/recipes/init/mount_internal_use_efs.rb (74 lines of code) (raw):
# frozen_string_literal: true
# Copyright:: 2023 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?
include_recipe "aws-parallelcluster-environment::update_fs_mapping"
include_recipe "aws-parallelcluster-environment::backup_internal_use_shared_data"
efs_shared_dir_array = node['cluster']['efs_shared_dirs'].split(',')
efs_fs_id_array = node['cluster']['efs_fs_ids'].split(',')
efs_encryption_in_transit_array = node['cluster']['efs_encryption_in_transits'].split(',')
efs_iam_authorization_array = node['cluster']['efs_iam_authorizations'].split(',')
initial_shared_dir_array = []
initial_efs_fs_id_array = []
initial_efs_encryption_array = []
initial_efs_iam_array = []
# Identify the initial filesystem and store their data in arrays for the EFS resource
efs_shared_dir_array.each_with_index do |dir, index|
next unless dir == node['cluster']['internal_initial_shared_dir']
initial_shared_dir_array.push(dir)
initial_efs_fs_id_array.push(efs_fs_id_array[index])
initial_efs_encryption_array.push(efs_encryption_in_transit_array[index])
initial_efs_iam_array.push(efs_iam_authorization_array[index])
end
if node['cluster']['node_type'] == 'HeadNode'
# Mount the initial internal use EFS
efs "mount initial internal use efs" do
shared_dir_array initial_shared_dir_array
efs_fs_id_array initial_efs_fs_id_array
efs_encryption_in_transit_array initial_efs_encryption_array
efs_iam_authorization_array initial_efs_iam_array
action :mount
not_if { initial_shared_dir_array.empty? }
end
# Add the mount points for shared dirs
node['cluster']['internal_shared_dirs'].each do |dir|
directory "#{node['cluster']['internal_initial_shared_dir']}#{dir}" do
user 'root'
group 'root'
mode '0755'
action :create
recursive true
end
end unless initial_shared_dir_array.empty?
# Add the mount point for home. If users decide to use a shared home via the managed EFS
# either on creation or update then this directory will be needed. If users don't need it, it will stay empty
# on the managed FS and be invisible to users
directory "#{node['cluster']['internal_initial_shared_dir']}/home" do
user 'root'
group 'root'
mode '0755'
action :create
recursive true
end
# Unmount the root of the EFS after creating the shared directories
# TODO this doesn't seem to unmount the EFS
efs "unmount internal efs" do
shared_dir_array(lazy { initial_shared_dir_array })
efs_fs_id_array(lazy { initial_efs_fs_id_array })
action :unmount
not_if { initial_shared_dir_array.empty? }
end
end
# Mount the shared dirs, there should only be one initial shared dir array
internal_shared_dir_array = []
internal_efs_fs_id_array = []
internal_efs_encryption_array = []
internal_efs_iam_array = []
internal_efs_mount_point_array = []
node['cluster']['internal_shared_dirs'].each do |dir|
# Don't mount the login nodes shared dir to compute nodes
next if node['cluster']['node_type'] == 'ComputeFleet' && dir == node['cluster']['shared_dir_login_nodes']
next if node['cluster']['node_type'] == 'LoginNode' && dir == node['cluster']['shared_dir_compute']
internal_shared_dir_array.push(dir)
internal_efs_fs_id_array.push(initial_efs_fs_id_array[0])
internal_efs_encryption_array.push(initial_efs_encryption_array[0])
internal_efs_iam_array.push(initial_efs_iam_array[0])
internal_efs_mount_point_array.push(dir)
end unless initial_shared_dir_array.empty?
efs "mount internal shared efs" do
shared_dir_array internal_shared_dir_array
efs_fs_id_array internal_efs_fs_id_array
efs_encryption_in_transit_array internal_efs_encryption_array
efs_iam_authorization_array internal_efs_iam_array
efs_mount_point_array internal_efs_mount_point_array
action :mount
not_if { internal_shared_dir_array.empty? }
end
include_recipe "aws-parallelcluster-environment::restore_internal_use_shared_data"