diff --git a/cookbooks/aws-parallelcluster-slurm/attributes/slurm_attributes.rb b/cookbooks/aws-parallelcluster-slurm/attributes/slurm_attributes.rb index 35aee326b..b6f0670a5 100644 --- a/cookbooks/aws-parallelcluster-slurm/attributes/slurm_attributes.rb +++ b/cookbooks/aws-parallelcluster-slurm/attributes/slurm_attributes.rb @@ -28,3 +28,4 @@ # Block Topology Plugin default['cluster']['slurm']['block_topology']['force_configuration'] = false +default['cluster']['p6egb200_block_sizes'] = nil diff --git a/cookbooks/aws-parallelcluster-slurm/resources/block_topology/partial/_block_topology_common.rb b/cookbooks/aws-parallelcluster-slurm/resources/block_topology/partial/_block_topology_common.rb index fe44cbacb..b0f307e08 100644 --- a/cookbooks/aws-parallelcluster-slurm/resources/block_topology/partial/_block_topology_common.rb +++ b/cookbooks/aws-parallelcluster-slurm/resources/block_topology/partial/_block_topology_common.rb @@ -63,10 +63,8 @@ def topology_generator_command_args if node['cluster']['p6egb200_block_sizes'].nil? && are_queues_updated? && ::File.exist?("#{node['cluster']['slurm']['install_dir']}/etc/topology.conf") # If topology.conf exist and Capacity Block is removed, we cleanup " --cleanup" - elsif node['cluster']['p6egb200_block_sizes'].nil? && !are_queues_updated? - # We do nothing if p6e-gb200 is not used and queues are not updated - nil - else + elsif !node['cluster']['p6egb200_block_sizes'].nil? + # We add/update topology.conf if p6egb200_block_sizes is not null " --block-sizes #{node['cluster']['p6egb200_block_sizes']}" end end diff --git a/cookbooks/aws-parallelcluster-slurm/spec/unit/resources/block_topology_spec.rb b/cookbooks/aws-parallelcluster-slurm/spec/unit/resources/block_topology_spec.rb index 4e0310daa..b7976fa73 100644 --- a/cookbooks/aws-parallelcluster-slurm/spec/unit/resources/block_topology_spec.rb +++ b/cookbooks/aws-parallelcluster-slurm/spec/unit/resources/block_topology_spec.rb @@ -154,6 +154,7 @@ def self.update(chef_run) cached(:chef_run) do runner(platform: platform, version: version, step_into: ['block_topology']) do |node| node.override['cluster']['p6egb200_block_sizes'] = nil + node.override['cluster']['slurm']['install_dir'] = slurm_install_dir end end cached(:resource) do @@ -161,6 +162,18 @@ def self.update(chef_run) chef_run.find_resource('block_topology', 'update') end + context "when queues are updated and topolog.conf does exists" do + before do + allow_any_instance_of(Object).to receive(:are_queues_updated?).and_return(true) + allow(File).to receive(:exist?).with("#{slurm_install_dir}/etc/topology.conf").and_return(true) + chef_run.node.override['cluster']['p6egb200_block_sizes'] = nil + end + + it 'returns cleanup' do + expect(resource.topology_generator_command_args).to eq(" --cleanup") + end + end + context "when queues are not updated and topolog.conf does not exists" do before do allow_any_instance_of(Object).to receive(:are_queues_updated?).and_return(false) @@ -172,6 +185,18 @@ def self.update(chef_run) end end + context "when queues are updated and topolog.conf does not exists" do + before do + allow_any_instance_of(Object).to receive(:are_queues_updated?).and_return(true) + allow(File).to receive(:exist?).with("#{slurm_install_dir}/etc/topology.conf").and_return(false) + chef_run.node.override['cluster']['p6egb200_block_sizes'] = block_sizes + end + + it 'returns block-sizes argument' do + expect(resource.topology_generator_command_args).to eq(" --block-sizes #{block_sizes}") + end + end + context "when block sizes is not nil" do before do chef_run.node.override['cluster']['p6egb200_block_sizes'] = block_sizes