From b22b581b671fa9816f82efda3dc1d60f246f499e Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Mon, 31 Mar 2014 14:26:14 +0200 Subject: [PATCH] first version of __dog_vdi Signed-off-by: Nico Schottelius --- cdist/conf/type/__dog_vdi/gencode-remote | 53 +++++++++++++------ cdist/conf/type/__dog_vdi/man.text | 22 +++++--- cdist/conf/type/__dog_vdi/manifest | 28 ++++++++++ .../type/__dog_vdi/parameter/default/format | 1 - cdist/conf/type/__dog_vdi/parameter/optional | 2 +- cdist/conf/type/__dog_vdi/parameter/required | 1 - 6 files changed, 81 insertions(+), 26 deletions(-) create mode 100644 cdist/conf/type/__dog_vdi/manifest delete mode 100644 cdist/conf/type/__dog_vdi/parameter/default/format delete mode 100644 cdist/conf/type/__dog_vdi/parameter/required diff --git a/cdist/conf/type/__dog_vdi/gencode-remote b/cdist/conf/type/__dog_vdi/gencode-remote index 6e4bb4d0..56e4108a 100644 --- a/cdist/conf/type/__dog_vdi/gencode-remote +++ b/cdist/conf/type/__dog_vdi/gencode-remote @@ -1,19 +1,42 @@ -################################################################################ -# State: absent is handled by manifest - we need only to do stuff if image is -# not existing and state != absent +#!/bin/sh # -state="$(cat "$__object/parameter/state")" -[ "$state" = "absent" ] && exit 0 - -exists="$(cat "$__object/explorer/exists")" -[ "$exists" ] && exit 0 - -################################################################################ -# Still there? Create image +# 2014 Nico Schottelius (nico-cdist at schottelius.org) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . # -format="$(cat "$__object/parameter/format")" -size="$(cat "$__object/parameter/size")" -diskimage="/$__object_id" +state_should="$(cat "$__object/parameter/state")" +num_vdi_lines=$(wc -l < "$__object/explorer/list") +name="$__object_id" -echo qemu-img create -f \"$format\" \"$diskimage\" \"$size\" + +if [ "$num_vdi_lines" = 1 ]; then + state_is=present +else + state_is=absent +fi + +[ "$state_is" = "$state_should" ] && exit 0 + +case "$state_should" in + present) + size="$(cat "$__object/parameter/size")" + echo "dog vdi create '$name' '$size'" + ;; + absent) + echo "dog vdi delete '$name'" + ;; +esac diff --git a/cdist/conf/type/__dog_vdi/man.text b/cdist/conf/type/__dog_vdi/man.text index 444ab15d..d7cc6f88 100644 --- a/cdist/conf/type/__dog_vdi/man.text +++ b/cdist/conf/type/__dog_vdi/man.text @@ -10,20 +10,19 @@ cdist-type__dog_vdi - Manage Sheepdog VM images DESCRIPTION ----------- -The dog program is used to create qemu images for -qemu and (qemu-)kvm. - - -REQUIRED PARAMETERS -------------------- -size:: - Size of the image in dog vdi compatible units. +The dog program is used to create images for sheepdog +to be used in qemu. OPTIONAL PARAMETERS ------------------- state:: Either "present" or "absent", defaults to "present" +size:: + Size of the image in dog vdi compatible units. + + Required if state == present. + EXAMPLES @@ -33,8 +32,14 @@ EXAMPLES # Create a 50G size image __dog_vdi nico-privat.sky.ungleich.ch --size 50G +# Create a 50G size image (more explicit) +__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state present + # Remove image __dog_vdi nico-privat.sky.ungleich.ch --state absent + +# Remove image - keeping --size is ok +__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state absent -------------------------------------------------------------------------------- @@ -42,6 +47,7 @@ SEE ALSO -------- - cdist-type(7) - dog(8) +- qemu(1) COPYING diff --git a/cdist/conf/type/__dog_vdi/manifest b/cdist/conf/type/__dog_vdi/manifest new file mode 100644 index 00000000..cd022f28 --- /dev/null +++ b/cdist/conf/type/__dog_vdi/manifest @@ -0,0 +1,28 @@ +#!/bin/sh +# +# 2014 Nico Schottelius (nico-cdist at schottelius.org) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + +state_should="$(cat "$__object/parameter/state")" + +if [ "$state_should" = "present" ]; then + if [ ! -f "$__object/parameter/size" ]; then + echo "Size is required when state is present" >&2 + exit 1 + fi +fi diff --git a/cdist/conf/type/__dog_vdi/parameter/default/format b/cdist/conf/type/__dog_vdi/parameter/default/format deleted file mode 100644 index e0a90ab9..00000000 --- a/cdist/conf/type/__dog_vdi/parameter/default/format +++ /dev/null @@ -1 +0,0 @@ -qcow2 diff --git a/cdist/conf/type/__dog_vdi/parameter/optional b/cdist/conf/type/__dog_vdi/parameter/optional index 71b9a32b..c3ac4490 100644 --- a/cdist/conf/type/__dog_vdi/parameter/optional +++ b/cdist/conf/type/__dog_vdi/parameter/optional @@ -1,2 +1,2 @@ -format state +size diff --git a/cdist/conf/type/__dog_vdi/parameter/required b/cdist/conf/type/__dog_vdi/parameter/required deleted file mode 100644 index 2a613ba5..00000000 --- a/cdist/conf/type/__dog_vdi/parameter/required +++ /dev/null @@ -1 +0,0 @@ -size