coren has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/166351

Change subject: Labs: allow for growing volumes
......................................................................

Labs: allow for growing volumes

Also update role::labs::biglog to extend /var/log rather than
create a new volume (necessary for the new images)

Change-Id: I00abd321f3b1c06ce7a563bd3ace28bb9b3bd2d6
---
M manifests/role/labsbiglogs.pp
A modules/labs_lvm/files/extend-instance-vol
A modules/labs_lvm/manifests/extend.pp
M modules/labs_lvm/manifests/init.pp
M modules/labs_lvm/manifests/volume.pp
5 files changed, 83 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/51/166351/1

diff --git a/manifests/role/labsbiglogs.pp b/manifests/role/labsbiglogs.pp
index 9ca9bf0..257b2b6 100644
--- a/manifests/role/labsbiglogs.pp
+++ b/manifests/role/labsbiglogs.pp
@@ -3,5 +3,5 @@
     $size = '8G'
 ) {
     include labs_lvm
-    labs_lvm::volume { 'logfile-disk': mountat => '/var/log', size => $size }
+    labs_lvm::extend { '/var/log': size => $size }
 }
diff --git a/modules/labs_lvm/files/extend-instance-vol 
b/modules/labs_lvm/files/extend-instance-vol
new file mode 100755
index 0000000..67fdf0f
--- /dev/null
+++ b/modules/labs_lvm/files/extend-instance-vol
@@ -0,0 +1,31 @@
+#! /bin/bash
+
+mount="$1"; shift
+size="$1"; shift
+sopt="-L $size"
+
+if (/bin/echo "$size"|/bin/grep -q '%'); then
+  sopt="-l $size"
+fi
+
+if ! mountpoint -q "$mount"; then
+  echo "$0: $mount is not a mountpoint" >&2
+  exit 1
+fi
+
+volume=$(grep "\S* $mount " /proc/mounts | cut -d ' ' -f 1 | tail -n 1)
+if [ "x$volume" = "x" -o ! -b "$volume" ]; then
+  echo "$0: unable to find device for $mount" >&2
+  exit 1
+fi
+if ! /sbin/lvs "$volume" >/dev/null 2>&1; then
+  echo "$0: $mount is not a logical volume" >&2
+  exit 1
+fi
+
+if /sbin/lvextend -t $sopt "$volume" >/dev/null 2>&1; then
+  /sbin/lvextend -r $sopt "$volume"
+  exit
+fi
+
+exit 0
diff --git a/modules/labs_lvm/manifests/extend.pp 
b/modules/labs_lvm/manifests/extend.pp
new file mode 100644
index 0000000..7e9dae1
--- /dev/null
+++ b/modules/labs_lvm/manifests/extend.pp
@@ -0,0 +1,36 @@
+# resource: labs_lvm::volume
+#
+# labs_lvm::volume allocates a LVM volume from the volume group
+# created by the labs_lvm class.
+#
+# Parameters:
+#   mountat  => point where the volume is to be mounted; defaults
+#               to the title
+#   size     => desired size of the volume, using the lvcreate(8)
+#               syntax.  This can only /extend/ the volume size.
+#
+# Requires:
+#   The node must have included the labs_lvm class.
+#
+# Sample Usage:
+#   labs_lvm::volume { 'storage': mountat => '/mnt' }
+#
+
+define labs_lvm::extend(
+    $mountat    = $title,
+    $mountowner = 'root',
+    $mountgroup = 'root',
+    $mountmode  = '755',
+    $size       = '100%FREE',
+) {
+
+    exec { "extend-vd-$mountat":
+        logoutput   => 'on_failure',
+        require     => [
+                         File['/usr/local/sbin/extend-instance-vol'],
+                       ],
+        command     => "/usr/local/sbin/extend-instance-vol '$mountat' 
'$size'",
+    }
+
+}
+
diff --git a/modules/labs_lvm/manifests/init.pp 
b/modules/labs_lvm/manifests/init.pp
index a4a0e7c..85eb8e1 100644
--- a/modules/labs_lvm/manifests/init.pp
+++ b/modules/labs_lvm/manifests/init.pp
@@ -35,6 +35,15 @@
         group       => 'root',
     }
 
+    file { '/usr/local/sbin/extend-instance-vol':
+        ensure      => file,
+        source      => 'puppet:///modules/labs_lvm/extend-instance-vol',
+        require     => Package['lvm2'],
+        mode        => 0544,
+        owner       => 'root',
+        group       => 'root',
+    }
+
     exec { 'create-volume-group':
         logoutput   => 'on_failure',
         unless      => '/sbin/vgdisplay -c vd',
diff --git a/modules/labs_lvm/manifests/volume.pp 
b/modules/labs_lvm/manifests/volume.pp
index 7336cf3..7b4cc4a 100644
--- a/modules/labs_lvm/manifests/volume.pp
+++ b/modules/labs_lvm/manifests/volume.pp
@@ -39,7 +39,7 @@
 ) {
     exec { "create-vd-$volname":
         creates     => "/dev/vd/$volname",
-        unless      => "/sbin/lvdisplay -c vd/$volname",
+        unless      => "/bin/mountpoint -q '$mountat'",
         logoutput   => 'on_failure',
         require     => [
                          File['/usr/local/sbin/make-instance-vol'],
@@ -67,5 +67,10 @@
                        ],
     }
 
+    labs_lvm::extend { $mountat:
+        size       => $size,
+        require    => [ Mount[$mountat] ],
+    }
+
 }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/166351
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I00abd321f3b1c06ce7a563bd3ace28bb9b3bd2d6
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: coren <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to