summaryrefslogtreecommitdiffstats
path: root/build/first-boot.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'build/first-boot.yaml')
-rw-r--r--build/first-boot.yaml53
1 files changed, 53 insertions, 0 deletions
diff --git a/build/first-boot.yaml b/build/first-boot.yaml
new file mode 100644
index 0000000..6cd874c
--- /dev/null
+++ b/build/first-boot.yaml
@@ -0,0 +1,53 @@
+heat_template_version: 2014-10-16
+
+description: >
+ This is an example showing how you can do firstboot configuration
+ of the nodes via cloud-init. To enable this, replace the default
+ mapping of OS::TripleO::NodeUserData in ../overcloud_resource_registry*
+
+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"
+ type: string
+ default: ""
+
+resources:
+ userdata:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: compute_kernel_args}
+
+ # Verify the logs on /var/log/cloud-init.log on the overcloud node
+ compute_kernel_args:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ config:
+ str_replace:
+ 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
+ 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
+ params:
+ $KERNEL_ARGS: {get_param: ComputeKernelArgs}
+
+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}