Merge "Add hugepages configuration task"

This commit is contained in:
Jenkins 2016-03-16 18:47:53 +00:00 committed by Gerrit Code Review
commit 7ffaea78d5
6 changed files with 128 additions and 0 deletions

View File

@ -8,3 +8,4 @@ fixtures:
mysql: "#{source_dir}/../mysql"
cinder: "#{source_dir}/../cinder"
openstacklib: "#{source_dir}/../openstacklib"
sysfs: "#{source_dir}/../sysfs"

View File

@ -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

View File

@ -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',
}

View File

@ -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: /

View File

@ -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

View File

@ -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