# Copyright (C) 2015 Kristoffer Gronlund
#
# License: GNU General Public License (GPL)
version: 2.2
category: File System
shortdesc: Cluster-aware LVM (auto activation)
longdesc: |
  Configures a resource to manage the activation of a volume
  group. Before adding this resource, you need to proceed as below
  to create new VG and LVs. Refer to manpage lvmlockd(8) for more
  detailed steps.

  - create VG on shared devices:
    vgcreate --shared <vgname> <devices>

  - create an LV:
    lvcreate -an -L <size> -n <lvname> <vgname>

  For LVs in shared VG, there are two activation modes: "exclusive"
  and "shared". With the "exclusive" mode, a LV activated on one
  host cannot be activated on another, which is the default option.
  With the "shared" mode, a LV can be activated concurrently on
  multiple hosts, and cluster filesystem like OCFS2 can use it.

  If the resource is created with activation_mode="shared", it will
  be added to the cLVM group resource. The cLVM group resource is
  assumed to be named g-clvm. This is the name of the resource created
  by the clvm wizard.

parameters:
  - name: id
    shortdesc: Volume group instance ID
    longdesc: Unique ID for the volume group instance in the cluster.
    required: true
    unique: true
    type: resource
    value: vg1

  - name: vgname
    shortdesc: Volume Group Name
    longdesc: LVM volume group name.
    required: true
    type: string
    value: vg1

  - name: activation_mode
    shortdesc: LVM activation mode
    longdesc: |
      How a VG/LV is activated in cluster, either "exclusive" (default) or "shared".
      It depends on the filesystem you need to create on the LV to choose the
      activation mode. For local filesystem like ext4, you need "exclusive" activation.
      For cluster filesystem like OCFS2, you need "shared" activation.
    required: false
    type: string
    value: exclusive

  - name: clvm-group
    shortdesc: cLVM Resource Group ID
    longdesc: ID of the cLVM resource group.
    type: resource
    required: false
    value: g-clvm

actions:
  - cib: |
      primitive {{id}} ocf:heartbeat:LVM-activate
        params vgname="{{vgname}}" vg_access_mode="lvmlockd" activation_mode="{{activation_mode}}"
        op start timeout=60s
        op stop timeout=60s
        op monitor interval=30s timeout=90s

  - crm: configure modgroup {{clvm-group}} add {{id}}
    shortdesc: Add volume group to the cLVM group resource
    when: activation_mode == "shared"
