+---
heat_template_version: 2014-10-16
description: >
ComputeKernelArgs:
description: >
Space seprated list of Kernel args to be update to grub.
- The given args will be appended to existing args of GRUB_CMDLINE_LINUX in file /etc/default/grub
- Example: "intel_iommu=on default_hugepagesz=2MB hugepagesz=2MB hugepages=2048"
+ The given args will be appended to existing args of
+ GRUB_CMDLINE_LINUX in file /etc/default/grub
+ Example:
+ "intel_iommu=on default_hugepagesz=2MB hugepagesz=2MB hugepages=2048"
+ type: string
+ default: ""
+ KVMForNFVKernelRPM:
+ description: >
+ Name of the kvmfornfv kernel rpm.
+ Example: "kvmfornfv_kernel.rpm"
+ type: string
+ default: ""
+ ComputeHostnameFormat:
type: string
default: ""
type: OS::Heat::MultipartMime
properties:
parts:
- - config: {get_resource: compute_kernel_args}
+ - config: {get_resource: compute_kernel_args}
# Verify the logs on /var/log/cloud-init.log on the overcloud node
compute_kernel_args:
template: |
#!/bin/bash
set -x
- sed 's/^\(GRUB_CMDLINE_LINUX=".*\)"/\1 $KERNEL_ARGS"/g' -i /etc/default/grub ;
- grub2-mkconfig -o /etc/grub2.cfg
- hugepage_count=`echo $KERNEL_ARGS | grep -oP ' ?hugepages=\K[0-9]+'`
- if [ -z "$hugepage_count" ]; then
- hugepage_count=1024
+ need_reboot='false'
+
+ if [ -n "$KERNEL_ARGS" ]; then
+ sed 's/^\(GRUB_CMDLINE_LINUX=".*\)"/\1 $KERNEL_ARGS"/g' \
+ -i /etc/default/grub ;
+ grub2-mkconfig -o /etc/grub2.cfg
+ hugepage_count=$(echo $KERNEL_ARGS | \
+ grep -oP ' ?hugepages=\K[0-9]+')
+ if [ -z "$hugepage_count" ]; then
+ hugepage_count=1024
+ fi
+ echo vm.hugetlb_shm_group=0 >> /usr/lib/sysctl.d/00-system.conf
+ HPAGE_CT=$(printf "%.0f" $(echo 2.2*$hugepage_count | bc))
+ echo vm.max_map_count=$HPAGE_CT >> \
+ /usr/lib/sysctl.d/00-system.conf
+ HPAGE_CT=$(($hugepage_count * 2 * 1024 * 1024))
+ echo kernel.shmmax=$HPAGE_CT >> /usr/lib/sysctl.d/00-system.conf
+ need_reboot='true'
+ fi
+
+ if [ -n "$KVMFORNFV_KERNEL_RPM" ]; then
+ FORMAT=$COMPUTE_HOSTNAME_FORMAT
+ if [[ -z $FORMAT ]] ; then
+ FORMAT="compute" ;
+ else
+ # Assumption: only %index% and %stackname% are
+ # the variables in Host name format
+ FORMAT=$(echo $FORMAT | sed 's/\%index\%//g');
+ FORMAT=$(echo $FORMAT | sed 's/\%stackname\%//g');
+ fi
+ if [[ $(hostname) == *$FORMAT* ]] ; then
+ yum install -y /root/$KVMFORNFV_KERNEL_RPM
+ grub2-mkconfig -o /etc/grub2.cfg
+ sleep 5
+ need_reboot='true'
+ fi
fi
- echo vm.hugetlb_shm_group=0 >> /usr/lib/sysctl.d/00-system.conf
- echo vm.max_map_count=$(printf "%.0f" $(echo 2.2*$hugepage_count | bc)) >> /usr/lib/sysctl.d/00-system.conf
- echo kernel.shmmax=$(($hugepage_count * 2 * 1024 * 1024)) >> /usr/lib/sysctl.d/00-system.conf
- reboot
+ if [ "$need_reboot" == "true" ]; then
+ reboot
+ fi
params:
$KERNEL_ARGS: {get_param: ComputeKernelArgs}
+ $KVMFORNFV_KERNEL_RPM: {get_param: KVMForNFVKernelRPM}
+ $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}
outputs:
- # This means get_resource from the parent template will get the userdata, see:
- # http://docs.openstack.org/developer/heat/template_guide/composition.html#making-your-template-resource-more-transparent
- # Note this is new-for-kilo, an alternative is returning a value then using
- # get_attr in the parent template instead.
OS::stack_id:
value: {get_resource: userdata}