heat_template_version: 2014-10-16

description: >
  Extra config to add swap space to nodes.

# Parameters passed from the parent template - note if you maintain
# out-of-tree templates they may require additional parameters if the
# in-tree templates add a new role.
parameters:
  controller_servers:
    type: json
  compute_servers:
    type: json
  blockstorage_servers:
    type: json
  objectstorage_servers:
    type: json
  cephstorage_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
        swap_partition=$(realpath /dev/disk/by-label/$swap_partition_label)
        swapon $swap_partition
        echo "$swap_partition swap swap defaults 0 0" >> /etc/fstab
      inputs:
        - name: swap_partition_label
          description: Swap partition label
          default: 'swap1'

  ControllerSwapDeployment:
    type: OS::Heat::SoftwareDeploymentGroup
    properties:
      config: {get_resource: SwapConfig}
      servers: {get_param: controller_servers}
      input_values:
        swap_partition_label: {get_param: swap_partition_label}
      actions: ["CREATE"]

  ComputeSwapDeployment:
    type: OS::Heat::SoftwareDeploymentGroup
    properties:
      config: {get_resource: SwapConfig}
      servers: {get_param: compute_servers}
      input_values:
        swap_partition_label: {get_param: swap_partition_label}
      actions: ["CREATE"]

  BlockStorageSwapDeployment:
    type: OS::Heat::SoftwareDeploymentGroup
    properties:
      config: {get_resource: SwapConfig}
      servers: {get_param: blockstorage_servers}
      input_values:
        swap_partition_label: {get_param: swap_partition_label}
      actions: ["CREATE"]

  ObjectStorageSwapDeployment:
    type: OS::Heat::SoftwareDeploymentGroup
    properties:
      config: {get_resource: SwapConfig}
      servers: {get_param: objectstorage_servers}
      input_values:
        swap_partition_label: {get_param: swap_partition_label}
      actions: ["CREATE"]

  CephStorageSwapDeployment:
    type: OS::Heat::SoftwareDeploymentGroup
    properties:
      config: {get_resource: SwapConfig}
      servers: {get_param: cephstorage_servers}
      input_values:
        swap_partition_label: {get_param: swap_partition_label}
      actions: ["CREATE"]

outputs:
  config_identifier:
    value: none

Add an environment to use a swap partition
Add an environment to use a swap partition

This environment can be used with AllNodesExtraConfig to enable swap on
a device with the given label as specified by the swap_partition_label
parameter.

If Ironic is used to create the swap partition, the partition will have
a label of swap1, so that's a reasonable default for the parameter.

The partition is also written to /etc/fstab as a swap mount so that it
will be enabled on reboot.

Change-Id: I5cd68c13dbfe53eecf6c6ad93151eadc980a902d
