Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
def default_packages
# environment-modules required by EFA, Intel MPI and ARM PL
# iptables needed for IMDS setup
packages = %w(vim ksh tcsh zsh openssl-devel ncurses-devel pam-devel net-tools openmotif-devel
packages = %w(vim ksh tcsh zsh openssl11-devel ncurses-devel pam-devel net-tools openmotif-devel
libXmu-devel hwloc-devel libdb-devel tcl-devel automake autoconf pyparted libtool
httpd boost-devel system-lsb mlocate atlas-devel glibc-static iproute
libffi-devel dkms libedit-devel sendmail cmake byacc libglvnd-devel libgcrypt-devel libevent-devel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,87 @@ def self.setup(chef_run)
end
end

describe 'install_packages default_packages' do
EXPECTED_PACKAGES = {
'amazon2' => %w(vim ksh tcsh zsh openssl11-devel ncurses-devel pam-devel net-tools openmotif-devel
libXmu-devel hwloc-devel libdb-devel tcl-devel automake autoconf pyparted libtool
httpd boost-devel system-lsb mlocate atlas-devel glibc-static iproute
libffi-devel dkms libedit-devel sendmail cmake byacc libglvnd-devel libgcrypt-devel libevent-devel
libxml2-devel perl-devel tar gzip bison flex gcc gcc-c++ patch
rpm-build rpm-sign system-rpm-config cscope ctags diffstat doxygen elfutils
gcc-gfortran git indent intltool patchutils rcs subversion swig systemtap curl
jq wget python-pip NetworkManager-config-routing-rules
python3 python3-pip iptables libcurl-devel yum-plugin-versionlock
coreutils moreutils environment-modules bzip2 dos2unix),
'amazon2023' => %w(ksh tcsh zsh openssl-devel ncurses-devel pam-devel net-tools
libXmu-devel hwloc-devel libdb-devel tcl-devel automake autoconf libtool
httpd boost-devel mlocate R atlas-devel
blas-devel libffi-devel dkms libedit-devel jq
libical-devel sendmail libxml2-devel libglvnd-devel
libgcrypt-devel libevent-devel glibc-static bind-utils
iproute python3 python3-pip libcurl-devel git
coreutils environment-modules gcc gcc-c++ bzip2 iptables vim yum-plugin-versionlock dos2unix),
'redhat' => %w(vim ksh tcsh zsh openssl-devel ncurses-devel pam-devel net-tools openmotif-devel
libXmu-devel hwloc-devel libdb-devel tcl-devel automake autoconf libtool
httpd boost-devel mlocate R atlas-devel
blas-devel libffi-devel dkms libedit-devel jq
libical-devel sendmail libxml2-devel libglvnd-devel
libgcrypt-devel libevent-devel glibc-static bind-utils
iproute NetworkManager-config-routing-rules python3 python3-pip iptables libcurl-devel yum-plugin-versionlock
coreutils moreutils curl environment-modules gcc gcc-c++ bzip2 dos2unix),
'rocky' => %w(vim ksh tcsh zsh openssl-devel ncurses-devel pam-devel net-tools openmotif-devel
libXmu-devel hwloc-devel libdb-devel tcl-devel automake autoconf libtool
httpd boost-devel mlocate R atlas-devel
blas-devel libffi-devel dkms libedit-devel jq
libical-devel sendmail libxml2-devel libglvnd-devel
libgcrypt-devel libevent-devel glibc-static bind-utils
iproute NetworkManager-config-routing-rules python3 python3-pip iptables libcurl-devel yum-plugin-versionlock
moreutils curl environment-modules gcc gcc-c++ bzip2 dos2unix coreutils),
'ubuntu' => %w(vim ksh tcsh zsh libssl-dev ncurses-dev libpam-dev net-tools libhwloc-dev dkms
tcl-dev automake autoconf libtool librrd-dev libapr1-dev libconfuse-dev
apache2 libboost-dev libdb-dev libncurses5-dev libpam0g-dev libxt-dev
libmotif-dev libxmu-dev libxft-dev man-db jq
r-base libblas-dev libffi-dev libxml2-dev
libgcrypt20-dev libevent-dev iproute2 python3 python3-pip
libatlas-base-dev libglvnd-dev iptables libcurl4-openssl-dev
coreutils moreutils curl python3-parted environment-modules libdbus-1-dev dos2unix),
}.freeze

for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:chef_run) do
runner = runner(platform: platform, version: version, step_into: ['install_packages'])
ConvergeInstallPackages.setup(runner)
end
cached(:resource) do
chef_run.find_resource('install_packages', 'setup')
end

it 'returns expected packages' do
expected_key = %(amazon).include?(platform) ? "#{platform}#{version}" : "#{platform}"
expect(resource.default_packages).to eq(EXPECTED_PACKAGES[expected_key])
end

case "#{platform}#{version}"
when 'amazon2'
it 'excludes moreutils for us-iso regions' do
allow(resource).to receive(:aws_region).and_return('us-iso-WHATEVER')
expect(resource.default_packages).not_to include('moreutils')
end
when 'redhat8'
it 'excludes multiple packages for us-iso regions' do
allow(resource).to receive(:aws_region).and_return('us-iso-WHATEVER')
packages = resource.default_packages
%w(openmotif-devel hwloc-devel R blas-devel dkms libedit-devel glibc-static
NetworkManager-config-routing-rules yum-plugin-versionlock moreutils).each do |pkg|
expect(packages).not_to include(pkg)
end
end
end
end
end
end

describe 'install_packages:setup' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@

use 'partial/_munge_actions'
use 'partial/_munge_rhel'

def prerequisites
%w(automake autoconf libtool openssl11-devel)
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
require 'spec_helper'

class ConvergeMunge
def self.setup(chef_run)
chef_run.converge_dsl('aws-parallelcluster-slurm') do
munge 'setup' do
action :setup
end
end
end

def self.purge_packages(chef_run)
chef_run.converge_dsl('aws-parallelcluster-slurm') do
munge 'purge_packages' do
action :purge_packages
end
end
end

def self.download_source_code(chef_run)
chef_run.converge_dsl('aws-parallelcluster-slurm') do
munge 'download_source_code' do
action :download_source_code
end
end
end

def self.compile_and_install(chef_run)
chef_run.converge_dsl('aws-parallelcluster-slurm') do
munge 'compile_and_install' do
action :compile_and_install
end
end
end

def self.set_user_and_group(chef_run)
chef_run.converge_dsl('aws-parallelcluster-slurm') do
munge 'set_user_and_group' do
action :set_user_and_group
end
end
end

def self.create_required_directories(chef_run)
chef_run.converge_dsl('aws-parallelcluster-slurm') do
munge 'create_required_directories' do
action :create_required_directories
end
end
end
end

describe 'munge:setup' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:munge_version) { '0.5.16' }
cached(:munge_libdir) do
case platform
when 'ubuntu'
'/usr/lib'
else
'/usr/lib64'
end
end
cached(:chef_run) do
allow_any_instance_of(Object).to receive(:redhat_on_docker?).and_return(false)
stub_command("/usr/sbin/munged --version | grep -q munge-#{munge_version} && ls #{munge_libdir}/libmunge*").and_return(false)
runner = runner(platform: platform, version: version, step_into: ['munge'])
ConvergeMunge.setup(runner)
end

it 'sets up munge' do
is_expected.to setup_munge('setup')
end

it 'creates sources directory' do
is_expected.to create_directory('/opt/parallelcluster/sources').with(recursive: true)
end

it 'updates package repos' do
is_expected.to update_package_repos('update package repos')
end

it 'installs build tools' do
is_expected.to setup_build_tools('Prerequisite: build tools')
end

it 'installs prerequisite packages' do
expected_packages = case platform
when 'ubuntu'
%w(automake autoconf libtool libssl-dev)
when 'amazon'
if version == '2'
%w(automake autoconf libtool openssl11-devel)
else
%w(automake autoconf libtool openssl-devel)
end
else
%w(automake autoconf libtool openssl-devel)
end
is_expected.to install_install_packages('prerequisites').with(packages: expected_packages)
end
end
end
end

describe 'munge:purge_packages' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:chef_run) do
runner = runner(platform: platform, version: version, step_into: ['munge'])
ConvergeMunge.purge_packages(runner)
end

it 'purges munge packages' do
is_expected.to purge_package(%w(munge* libmunge*))
end
end
end
end

describe 'munge:download_source_code' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:chef_run) do
runner = runner(platform: platform, version: version, step_into: ['munge'])
ConvergeMunge.download_source_code(runner)
end

it 'downloads munge source code' do
is_expected.to create_if_missing_remote_file('/opt/parallelcluster/sources/munge-0.5.16.tar.gz')
.with(mode: '0644')
.with(retries: 3)
.with(retry_delay: 5)
end
end
end
end

describe 'munge:compile_and_install' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:munge_libdir) do
case platform
when 'ubuntu'
'/usr/lib'
else
'/usr/lib64'
end
end
cached(:chef_run) do
stub_command("/usr/sbin/munged --version | grep -q munge-0.5.16 && ls #{munge_libdir}/libmunge*").and_return(false)
runner = runner(platform: platform, version: version, step_into: ['munge'])
ConvergeMunge.compile_and_install(runner)
end

it 'compiles and installs munge' do
is_expected.to run_bash('make install')
.with(user: 'root')
.with(group: 'root')
.with(cwd: Chef::Config[:file_cache_path])
end
end
end
end

describe 'munge:set_user_and_group' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:chef_run) do
runner = runner(platform: platform, version: version, step_into: ['munge'])
ConvergeMunge.set_user_and_group(runner)
end

it 'creates munge group' do
is_expected.to create_group('munge')
.with(comment: 'munge group')
.with(gid: 402)
.with(system: true)
end

it 'creates munge user' do
is_expected.to create_user('munge')
.with(uid: 402)
.with(gid: 402)
.with(manage_home: false)
.with(comment: 'munge user')
.with(system: true)
.with(shell: '/sbin/nologin')
end
end
end
end

describe 'munge:create_required_directories' do
for_all_oses do |platform, version|
context "on #{platform}#{version}" do
cached(:chef_run) do
runner = runner(platform: platform, version: version, step_into: ['munge'])
ConvergeMunge.create_required_directories(runner)
end

it 'creates required munge directories' do
%w(/var/log/munge /etc/munge /var/run/munge).each do |dir|
is_expected.to create_directory(dir)
.with(owner: 'munge')
.with(group: 'munge')
end
end
end
end
end
Loading