summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--manifests/site.pp1
-rw-r--r--modules/losetup/files/dismantle-loop-device15
-rw-r--r--modules/losetup/files/loop@.service12
-rwxr-xr-xmodules/losetup/files/setup-loop-device16
-rw-r--r--modules/losetup/manifests/init.pp24
5 files changed, 68 insertions, 0 deletions
diff --git a/manifests/site.pp b/manifests/site.pp
index 467ab68..4abc5e4 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -3,6 +3,7 @@ node 'gandalf.adrift.space' {
addr => '3',
}
+ include ::losetup
include ::profiles::workstation
include ::profiles::gandalf_web
diff --git a/modules/losetup/files/dismantle-loop-device b/modules/losetup/files/dismantle-loop-device
new file mode 100644
index 0000000..be3f3a0
--- /dev/null
+++ b/modules/losetup/files/dismantle-loop-device
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+target_file="$1"
+safe_name="$(systemd-escape "$target_file")"
+
+set +x
+
+loop_device=$(readlink "/dev/loop-by-name/${safe_name}")
+rm "/dev/loop-by-name/${safe_name}"
+
+for part in "/dev/loop-by-name/${safe_name}"-p*; do
+ rm "$part"
+done
+
+losetup -d $loop_device
diff --git a/modules/losetup/files/loop@.service b/modules/losetup/files/loop@.service
new file mode 100644
index 0000000..e9dc008
--- /dev/null
+++ b/modules/losetup/files/loop@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Loopback device for %I
+
+[Service]
+ExecStart=/usr/libexec/setup-loop-device "%I"
+ExecStop=/usr/libexec/dismantle-loop-device "%I"
+#ExecStopPost=rm /dev/loop-by-name/"%i"*
+#ExecStart=echo %I
+ExecStartPre=mkdir -p /dev/loop-by-name
+# Cant't have any dashes in filename, due to escaping rules
+# ExecStartPre=/bin/sh -c "grep -vq '-' <<< "%i""
+RemainAfterExit=yes
diff --git a/modules/losetup/files/setup-loop-device b/modules/losetup/files/setup-loop-device
new file mode 100755
index 0000000..4215273
--- /dev/null
+++ b/modules/losetup/files/setup-loop-device
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+target_file="$1"
+safe_name="$(systemd-escape "$target_file")"
+
+set +x
+
+loop_device=$(losetup --find --show "$target_file")
+
+ln -s $loop_device "/dev/loop-by-name/${safe_name}"
+
+for part in "${loop_device}"p*; do
+ last_two=${part:$[${#part}-2]}
+ ln -s $part \
+ "/dev/loop-by-name/${safe_name}-${last_two}"
+done
diff --git a/modules/losetup/manifests/init.pp b/modules/losetup/manifests/init.pp
new file mode 100644
index 0000000..8d7f8d8
--- /dev/null
+++ b/modules/losetup/manifests/init.pp
@@ -0,0 +1,24 @@
+class losetup {
+ file { '/etc/systemd/system/loop@.service':
+ ensure => file,
+ source => "puppet:///modules/${module_name}/loop@.service",
+ }
+
+ # ensure_resource ('file', { path => '/usr/libexec', ensure => directory })
+ file { '/usr/libexec':
+ ensure => directory,
+ }
+
+ file {
+ default:
+ ensure => file,
+ mode => '0555',
+ ;
+'/usr/libexec/setup-loop-device':
+ source => "puppet:///modules/${module_name}/setup-loop-device",
+ ;
+'/usr/libexec/dismantle-loop-device':
+ source => "puppet:///modules/${module_name}/dismantle-loop-device",
+ ;
+ }
+}