X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=build%2Ffirst-boot.yaml;h=582981c096f2b955c0dc634c8c83ddb5939fe87b;hb=e675928d02d66928f291b83ef805b56a5fc41010;hp=d4ac5df6b9fd870746496d3e65889bdfaafdf09e;hpb=c9bde98a9729dbc442ce8c0cdbc29c7d35167db6;p=apex.git diff --git a/build/first-boot.yaml b/build/first-boot.yaml index d4ac5df6..582981c0 100644 --- a/build/first-boot.yaml +++ b/build/first-boot.yaml @@ -1,3 +1,4 @@ +--- heat_template_version: 2014-10-16 description: > @@ -9,8 +10,19 @@ parameters: 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: "" @@ -19,7 +31,7 @@ resources: 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: @@ -30,24 +42,52 @@ resources: 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 + + if [ "$need_reboot" == "true" ]; then + reboot 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 - rm -f /etc/sysconfig/network-scripts/ifcfg-* - reboot 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}