Skip to content

Commit cd19693

Browse files
Himani Anil Deshpandehimani2411
authored andcommitted
[Bug] Install node dependencies in all regions
1 parent da8d47f commit cd19693

File tree

2 files changed

+115
-30
lines changed

2 files changed

+115
-30
lines changed

cookbooks/aws-parallelcluster-computefleet/recipes/install/custom_parallelcluster_node.rb

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,39 +19,33 @@
1919

2020
# TODO: once the pyenv Chef resource supports installing packages from a path (e.g. `pip install .`), convert the
2121
# bash block to a recipe that uses the pyenv resource.
22-
command = if aws_region.start_with?("us-iso")
23-
"pip install . --no-build-isolation"
24-
else
25-
"pip install ."
26-
end
22+
command = "pip install . --no-build-isolation"
2723

28-
if aws_region.start_with?("us-iso")
29-
dependency_package_name = "pypi-node-dependencies-#{node['cluster']['python-major-minor-version']}-#{node['kernel']['machine']}"
30-
dependency_folder_name = dependency_package_name
31-
if platform?('amazon') && node['platform_version'] == "2"
32-
dependency_package_name = "node-dependencies"
33-
dependency_folder_name = "node"
34-
end
24+
dependency_package_name = "pypi-node-dependencies-#{node['cluster']['python-major-minor-version']}-#{node['kernel']['machine']}"
25+
dependency_folder_name = dependency_package_name
26+
if platform?('amazon') && node['platform_version'] == "2"
27+
dependency_package_name = "node-dependencies"
28+
dependency_folder_name = "node"
29+
end
3530

36-
remote_file "#{node['cluster']['base_dir']}/node-dependencies.tgz" do
37-
source "#{node['cluster']['artifacts_s3_url']}/dependencies/PyPi/#{node['kernel']['machine']}/#{dependency_package_name}.tgz"
38-
mode '0644'
39-
retries 3
40-
retry_delay 5
41-
action :create_if_missing
42-
end
31+
remote_file "#{node['cluster']['base_dir']}/node-dependencies.tgz" do
32+
source "#{node['cluster']['artifacts_s3_url']}/dependencies/PyPi/#{node['kernel']['machine']}/#{dependency_package_name}.tgz"
33+
mode '0644'
34+
retries 3
35+
retry_delay 5
36+
action :create_if_missing
37+
end
4338

44-
bash 'pip install' do
45-
user 'root'
46-
group 'root'
47-
cwd "#{node['cluster']['base_dir']}"
48-
code <<-REQ
49-
set -e
50-
tar xzf node-dependencies.tgz
51-
cd #{dependency_folder_name}
52-
#{node_virtualenv_path}/bin/pip install * -f ./ --no-index
53-
REQ
54-
end
39+
bash 'pip install' do
40+
user 'root'
41+
group 'root'
42+
cwd "#{node['cluster']['base_dir']}"
43+
code <<-REQ
44+
set -e
45+
tar xzf node-dependencies.tgz
46+
cd #{dependency_folder_name}
47+
#{node_virtualenv_path}/bin/pip install * -f ./ --no-index
48+
REQ
5549
end
5650

5751
bash "install custom aws-parallelcluster-node" do
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
require 'spec_helper'
2+
3+
describe 'aws-parallelcluster-computefleet::custom_parallelcluster_node' do
4+
for_all_oses do |platform, version|
5+
context "on #{platform}#{version}" do
6+
cached(:s3_url) { 's3://url' }
7+
cached(:base_dir) { 'base_dir' }
8+
cached(:arch) { 'x86_64' }
9+
cached(:region) { 'any-region' }
10+
cached(:python_version) { 'python_version' }
11+
cached(:dependency_pkg_name_suffix) do
12+
if platform == 'amazon' && version == '2'
13+
'node-dependencies'
14+
else
15+
"pypi-node-dependencies-#{python_version}-#{arch}"
16+
end
17+
end
18+
cached(:dependency_folder_name_suffix) do
19+
if platform == 'amazon' && version == '2'
20+
"node"
21+
else
22+
dependency_pkg_name_suffix
23+
end
24+
end
25+
cached(:virtualenv_path) { "#{base_dir}/pyenv/versions/#{python_version}/envs/node_virtualenv" }
26+
cached(:cookbook_virtualenv_path) { "#{base_dir}/pyenv/versions/#{python_version}/envs/cookbook_virtualenv" }
27+
cached(:custom_node_s3_url) { "#{s3_url}/pyenv/versions/#{python_version}/envs/node_virtualenv" }
28+
cached(:pip_install_bash_code) do
29+
<<-REQ
30+
set -e
31+
tar xzf node-dependencies.tgz
32+
cd #{dependency_folder_name_suffix}
33+
#{virtualenv_path}/bin/pip install * -f ./ --no-index
34+
REQ
35+
end
36+
cached(:node_bash_code) do
37+
<<-NODE
38+
set -e
39+
[[ ":$PATH:" != *":/usr/local/bin:"* ]] && PATH="/usr/local/bin:${PATH}"
40+
echo "PATH is $PATH"
41+
source #{virtualenv_path}/bin/activate
42+
pip uninstall --yes aws-parallelcluster-node
43+
if [[ "#{custom_node_s3_url}" =~ ^s3:// ]]; then
44+
custom_package_url=$(#{cookbook_virtualenv_path}/bin/aws s3 presign #{custom_node_s3_url} --region #{region})
45+
else
46+
custom_package_url=#{custom_node_s3_url}
47+
fi
48+
curl --retry 3 -L -o aws-parallelcluster-node.tgz ${custom_package_url}
49+
rm -fr aws-parallelcluster-custom-node
50+
mkdir aws-parallelcluster-custom-node
51+
tar -xzf aws-parallelcluster-node.tgz --directory aws-parallelcluster-custom-node
52+
cd aws-parallelcluster-custom-node/*aws-parallelcluster-node*
53+
pip install . --no-build-isolation
54+
deactivate
55+
NODE
56+
end
57+
cached(:chef_run) do
58+
runner = runner(platform: platform, version: version) do |node|
59+
node.override['kernel']['machine'] = arch
60+
node.override['cluster']['python-major-minor-version'] = python_version
61+
node.override['cluster']['python-version'] = python_version
62+
node.override['cluster']['base_dir'] = base_dir
63+
node.override['cluster']['region'] = region
64+
node.override['cluster']['artifacts_s3_url'] = s3_url
65+
node.override['cluster']['custom_node_package'] = custom_node_s3_url
66+
end
67+
allow(File).to receive(:exist?).with("#{virtualenv_path}/bin/activate").and_return(true)
68+
runner.converge(described_recipe)
69+
end
70+
71+
it 'downloads tarball' do
72+
is_expected.to create_if_missing_remote_file("base_dir/node-dependencies.tgz")
73+
.with(source: "#{s3_url}/dependencies/PyPi/#{arch}/#{dependency_pkg_name_suffix}.tgz")
74+
.with(mode: '0644')
75+
.with(retries: 3)
76+
.with(retry_delay: 5)
77+
end
78+
79+
it 'pip installs' do
80+
is_expected.to run_bash('pip install')
81+
.with(cwd: base_dir)
82+
.with(code: pip_install_bash_code.gsub(/^ /, ' '))
83+
end
84+
85+
it 'install custom aws-parallelcluster-node' do
86+
is_expected.to run_bash('install custom aws-parallelcluster-node')
87+
.with(code: node_bash_code.gsub(/^ /, ' '))
88+
end
89+
end
90+
end
91+
end

0 commit comments

Comments
 (0)