heat_template_version: wallaby description: Template file to add a swap partition to a node. parameters: servers: type: json swap_partition_label: type: string description: Swap partition label default: 'swap1' resources: SwapConfig: type: OS::Heat::SoftwareConfig properties: group: script config: | #!/bin/bash set -eux if [ -e "/dev/disk/by-label/${swap_partition_label}" ]; then swap_partition=$(realpath /dev/disk/by-label/${swap_partition_label}) if ! grep -qe "${swap_partition}" /etc/fstab; then echo "$swap_partition swap swap defaults 0 0" | tee -a /etc/fstab fi else for item in $(lsblk -f --output FSTYPE,UUID | awk '/swap/ {print $2}'); do if ! grep -qe "${item}" /etc/fstab; then echo -e "UUID=${item} swap swap defaults 0 0" | tee -a /etc/fstab fi done fi swapon -a inputs: - name: swap_partition_label description: Swap partition label default: 'swap1' {% for role in roles %} {{role.name}}SwapDeployment: type: OS::Heat::SoftwareDeploymentGroup properties: name: {{role.name}}SwapDeployment config: {get_resource: SwapConfig} servers: {get_param: [servers, {{role.name}}]} input_values: swap_partition_label: {get_param: swap_partition_label} actions: ["CREATE"] {% endfor %}