cookbooks/aws-parallelcluster-environment/spec/unit/resources/lustre_setup_spec.rb (126 lines of code) (raw):

require 'spec_helper' class Lustre def self.setup(chef_run) chef_run.converge_dsl('aws-parallelcluster-environment') do lustre 'setup' do action :setup end end end def self.nothing(chef_run) chef_run.converge_dsl('aws-parallelcluster-environment') do # This is a way to load the resource code and unit test function defined on it lustre 'nothing' do action :nothing end end end end describe 'lustre:setup' do context "on amazon2" do cached(:chef_run) do runner = runner( platform: 'amazon', version: '2', step_into: ['lustre'] ) Lustre.setup(runner) end it 'installs lustre2.10 extra topic' do is_expected.to install_alinux_extras_topic("lustre") end end [%w(redhat RHEL), ["rocky", "Rocky Linux"]].each do |platform, platform_string| context "on #{platform} lower than 8.2" do cached(:chef_run) do runner = runner( platform: platform, version: '8', step_into: ['lustre'] ) do |node| node.automatic['platform_version'] = "8.1" node.override['cluster']['kernel_release'] = "4.18.0-147.9.1.el8" end Lustre.setup(runner) end it 'can not install lustre' do expect { chef_run }.to(raise_error do |error| expect(error).to be_a(Exception) expect(error.message).to include("FSx for Lustre is not supported in this #{platform_string} version 8.1, supported versions are >= 8.2") end) end end [%w(8.7 4.18.0-425.3.1.el8.x86_64), %w(8.7 4.18.0-425.13.1.el8_7.x86_64)].each do |platform_version, kernel_version| context "on #{platform} #{platform_version} with kernel #{kernel_version}" do cached(:chef_run) do runner = runner( platform: platform, version: '8', step_into: ['lustre'] ) do |node| node.automatic['platform_version'] = platform_version node.override['cluster']['kernel_release'] = kernel_version end Lustre.setup(runner) end it 'can not install lustre' do expect { chef_run }.to(raise_error do |error| expect(error).to be_a(Exception) expect(error.message).to include("FSx for Lustre is not supported in kernel version #{kernel_version} of #{platform_string} #{platform_version}, please update the kernel version") end) end end end [%w(193 2), %w(240 3), %w(305 4), %w(348 5), %w(372 6), %w(425 7), %w(477 8), %w(513 9)].each do |kernel_patch, minor_version| context "on #{platform} with kernel from 4.18.0-#{kernel_patch}.3.1.el8 supporting lustre" do cached(:chef_run) do runner = runner( platform: platform, version: '8', step_into: ['lustre'] ) do |node| node.automatic['platform_version'] = "8.#{minor_version}" node.override['cluster']['kernel_release'] = "4.18.0-#{kernel_patch}.9.1.el8" end Lustre.setup(runner) end it 'installs lustre packages from repository and installs kernel module lnet' do is_expected.to create_yum_repository("aws-fsx") .with(baseurl: "https://fsx-lustre-client-repo.s3.amazonaws.com/el/8.#{minor_version}/$basearch") .with(gpgkey: 'https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-rpm-public-key.asc') .with(retries: 3) .with(retry_delay: 5) is_expected.to run_execute('yum-config-manager_skip_if_unavail') .with(command: "yum-config-manager --setopt=\*.skip_if_unavailable=1 --save") is_expected.to install_package(%w(kmod-lustre-client lustre-client dracut)) .with(retries: 3) .with(retry_delay: 5) is_expected.to install_kernel_module("lnet") end end end end for_oses([ %w(ubuntu 24.04), ]) do |platform, version| context "on #{platform}#{version}" do cached(:chef_run) do runner = runner( platform: platform, version: version, step_into: ['lustre'] ) do |node| node.override['cluster']['kernel_release'] = 'kernel_release' end Lustre.setup(runner) end it 'installs lustre packages from repository and installs kernel module lnet' do is_expected.to add_apt_repository('fsxlustreclientrepo') .with(uri: 'https://fsx-lustre-client-repo.s3.amazonaws.com/ubuntu') .with(components: %w(main)) .with(key: ["https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-ubuntu-public-key.asc"]) .with(retries: 3) .with(retry_delay: 5) is_expected.to periodic_apt_update('') is_expected.to install_package(%w(lustre-client-modules-kernel_release lustre-client-modules-aws initramfs-tools)) .with(retries: 3) .with(retry_delay: 5) is_expected.to install_kernel_module("lnet") end end end end