cookbooks/aws-parallelcluster-environment/resources/cfn_hup_configuration.rb (79 lines of code) (raw):
# frozen_string_literal: true
#
# Copyright:: 2025 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.
provides :cfn_hup_configuration
unified_mode true
default_action :configure
action :configure do
cloudformation_url = "https://cloudformation.#{node['cluster']['region']}.#{node['cluster']['aws_domain']}"
instance_role_name = lambda {
# IMDS is not available on Docker
return "FAKE_INSTANCE_ROLE_NAME" if on_docker?
get_metadata_with_token(get_metadata_token, URI("http://169.254.169.254/latest/meta-data/iam/security-credentials"))
}.call
directory '/etc/cfn' do
owner 'root'
group 'root'
mode '0700'
recursive true
end
directory '/etc/cfn/hooks.d' do
owner 'root'
group 'root'
mode '0700'
recursive true
end
template '/etc/cfn/cfn-hup.conf' do
source 'cfn_hup_configuration/cfn-hup.conf.erb'
owner 'root'
group 'root'
mode '0400'
variables(
stack_id: node['cluster']['stack_arn'],
region: node['cluster']['region'],
cloudformation_url: cloudformation_url,
cfn_init_role: instance_role_name
)
end
action_extra_configuration
template '/etc/cfn/hooks.d/pcluster-update.conf' do
source "cfn_hup_configuration/cfn-hook-update.conf.erb"
owner 'root'
group 'root'
mode '0400'
variables(
# Common variable
launch_template_resource_id: node['cluster']['launch_template_id'],
# HeadNode and LoginNode specific variables
stack_id: node['cluster']['stack_arn'],
region: node['cluster']['region'],
cloudformation_url: cloudformation_url,
cfn_init_role: instance_role_name,
# ComputeFleet specific variables
update_hook_script_dir: node['cluster']['scripts_dir'],
node_bootstrap_timeout: node['cluster']['compute_node_bootstrap_timeout'] || node['cluster']['Timeout']
)
end
end
action :extra_configuration do
case node['cluster']['node_type']
when 'HeadNode'
cookbook_file "#{node['cluster']['scripts_dir']}/share_compute_fleet_dna.py" do
source 'cfn_hup_configuration/share_compute_fleet_dna.py'
owner 'root'
group 'root'
mode '0700'
action :create_if_missing
end
directory "#{node['cluster']['shared_dir']}/dna"
when 'ComputeFleet'
template "#{node['cluster']['scripts_dir']}/cfn-hup-update-action.sh" do
source "cfn_hup_configuration/#{node['cluster']['node_type']}/cfn-hup-update-action.sh.erb"
owner 'root'
group 'root'
mode '0700'
variables(
monitor_shared_dir: monitor_shared_dir,
launch_template_resource_id: node['cluster']['launch_template_id']
)
end
end
end
action_class do
def monitor_shared_dir
"#{node['cluster']['shared_dir']}/dna"
end
end