Merge "Add hugepages configuration task"
This commit is contained in:
commit
7ffaea78d5
|
@ -8,3 +8,4 @@ fixtures:
|
|||
mysql: "#{source_dir}/../mysql"
|
||||
cinder: "#{source_dir}/../cinder"
|
||||
openstacklib: "#{source_dir}/../openstacklib"
|
||||
sysfs: "#{source_dir}/../sysfs"
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
module Puppet::Parser::Functions
|
||||
newfunction(:map_sysfs_hugepages,
|
||||
:type => :rvalue,
|
||||
:arity => 1,
|
||||
:doc => <<-'ENDOFDOC'
|
||||
|
||||
@desc Map sysfs options from hugepages data
|
||||
|
||||
@params hugepages's array
|
||||
[
|
||||
{ 'count' => 512, 'numa_id' => 0, 'size' => 2048 },
|
||||
{ 'count' => 8, 'numa_id' => 1, 'size' => 1048576 }
|
||||
]
|
||||
|
||||
@return mapped hash of sysfs opts
|
||||
{
|
||||
'node0/hugepages/hugepages-2048kB' => 512,
|
||||
'node1/hugepages/hugepages-1048576kB' => 8,
|
||||
'default' => 0
|
||||
}
|
||||
|
||||
@example map_sysfs_hugepages(hiera('hugepages'))
|
||||
|
||||
ENDOFDOC
|
||||
) do |args|
|
||||
|
||||
hugepages_config = args.flatten
|
||||
required_opts = ['count', 'numa_id', 'size']
|
||||
sysfs_hugepages = {}
|
||||
|
||||
hugepages_config.each do |hpg|
|
||||
raise(
|
||||
Puppet::ParseError,
|
||||
"map_sysfs_hugepages(): expected a hash with #{required_opts}, got #{hpg}"
|
||||
) unless hpg.is_a? Hash and required_opts.all? { |opt| hpg.key? opt }
|
||||
|
||||
hpg_path = sprintf(
|
||||
'node%u/hugepages/hugepages-%ukB',
|
||||
hpg['numa_id'],
|
||||
hpg['size']
|
||||
)
|
||||
sysfs_hugepages[hpg_path] = hpg['count']
|
||||
end
|
||||
|
||||
# no allocations by default
|
||||
sysfs_hugepages.merge({'default' => 0})
|
||||
end
|
||||
end
|
|
@ -0,0 +1,12 @@
|
|||
notice('MODULAR: allocate_hugepages.pp')
|
||||
|
||||
$hugepages = hiera('hugepages', [])
|
||||
|
||||
include sysfs
|
||||
|
||||
sysfs_config_value { 'hugepages':
|
||||
ensure => 'present',
|
||||
name => '/etc/sysfs.d/hugepages.conf',
|
||||
value => map_sysfs_hugepages($hugepages),
|
||||
sysfs => '/sys/devices/system/node/node*/hugepages/hugepages-*kB/nr_hugepages',
|
||||
}
|
|
@ -101,3 +101,15 @@
|
|||
puppet_modules: /etc/puppet/modules
|
||||
timeout: 3600
|
||||
cwd: /
|
||||
|
||||
- id: allocate_hugepages
|
||||
type: puppet
|
||||
version: 2.0.0
|
||||
role: '*'
|
||||
requires: [setup_repositories]
|
||||
required_for: [globals]
|
||||
parameters:
|
||||
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/roles/allocate_hugepages.pp
|
||||
puppet_modules: /etc/puppet/modules
|
||||
timeout: 300
|
||||
cwd: /
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'map_sysfs_hugepages' do
|
||||
|
||||
let :input_data do
|
||||
[
|
||||
{ 'count' => 512, 'numa_id' => 0, 'size' => 2048 },
|
||||
{ 'count' => 8, 'numa_id' => 1, 'size' => 1048576 }
|
||||
]
|
||||
end
|
||||
|
||||
let :mapped_options do
|
||||
{
|
||||
'node0/hugepages/hugepages-2048kB' => 512,
|
||||
'node1/hugepages/hugepages-1048576kB' => 8,
|
||||
'default' => 0
|
||||
}
|
||||
end
|
||||
|
||||
it { is_expected.not_to eq(nil) }
|
||||
it { is_expected.to run.with_params().and_raise_error(ArgumentError, /Wrong number of arguments given/) }
|
||||
|
||||
it { is_expected.to run.with_params('string').and_raise_error(Puppet::ParseError, /expected a hash with/) }
|
||||
it { is_expected.to run.with_params({}).and_raise_error(Puppet::ParseError, /expected a hash with/) }
|
||||
it { is_expected.to run.with_params([{'count' => 512, 'numa_id' => 0}]).and_raise_error(Puppet::ParseError, /expected a hash with/) }
|
||||
it { is_expected.to run.with_params([{'count' => 64, 'size' => 2048}]).and_raise_error(Puppet::ParseError, /expected a hash with/) }
|
||||
|
||||
it { is_expected.to run.with_params(input_data).and_return(mapped_options) }
|
||||
|
||||
end
|
|
@ -0,0 +1,25 @@
|
|||
require 'spec_helper'
|
||||
require 'shared-examples'
|
||||
manifest = 'roles/allocate_hugepages.pp'
|
||||
|
||||
describe manifest do
|
||||
shared_examples 'catalog' do
|
||||
hugepages = Noop.hiera 'hugepages', []
|
||||
mapped_sysfs_hugepages = hugepages.empty? ? { 'default' => 0 } : {
|
||||
'node0/hugepages/hugepages-2048kB' => 512,
|
||||
'node1/hugepages/hugepages-1048576kB' => 8,
|
||||
'default' => 0
|
||||
}
|
||||
|
||||
it "should allocate defined hugepages" do
|
||||
should contain_class('sysfs')
|
||||
should contain_sysfs_config_value('hugepages').with(
|
||||
'ensure' => 'present',
|
||||
'name' => '/etc/sysfs.d/hugepages.conf',
|
||||
'value' => mapped_sysfs_hugepages,
|
||||
'sysfs' => '/sys/devices/system/node/node*/hugepages/hugepages-*kB/nr_hugepages',
|
||||
)
|
||||
end
|
||||
end
|
||||
test_ubuntu_and_centos manifest
|
||||
end
|
Loading…
Reference in New Issue