diff --git a/dmctl b/dmctl index 056d188..6395a06 100755 --- a/dmctl +++ b/dmctl @@ -13,28 +13,14 @@ OPTIONS -d, --dump Exporter la machine -l, --load - Import la machine" + Import la machine + -a, --load-all + Importer toutes les machines" } -action= -args=( - --help '$exit_with display_help' - -d,--dump,-x,--export,-s,--save action=dump - -l,--load,-i,--import action=load -) -parse_args "$@"; set -- "${args[@]}" +function dump_machine() { + local name srcdir workdir destdir archive i -if [ -z "$action" ]; then - case "$1" in - d|dump|x|export|s|save) action=dump; shift;; - l|load|i|import) action=load; shift;; - *) die "Vous devez spécifier l'action à effectuer";; - esac -fi - -case "$action" in -dump) - ############################################################################ name="$1" [ -n "$name" ] || die "Vous devez spécifier le nom de la machine" @@ -64,10 +50,11 @@ s|DOCKER_MACHINE_HOME/certs/|DOCKER_MACHINE_HOME/machines/$name/|g tar czf "$archive" -C "$workdir" "$name" || die ac_clean "$workdir" - ;; +} + +function load_machine() { + local archive archivename destdir machinedir origdir workdir srcdir -load) - ############################################################################ archive="$1" [ -n "$archive" ] || die "Vous devez spécifier l'archive à importer" @@ -82,11 +69,16 @@ load) machinedir="$destdir/$name" origdir="$HOME/${name}-machine.orig" if [ -d "$machinedir" ]; then - ewarn "$name: une machine du même nom existe déjà" - ask_yesno "Voulez-vous l'écraser?" N || die + if [ -n "$NOCLOBBER" ]; then + ewarn "$name: cette machine existe déjà" + return + else + ewarn "$name: une machine du même nom existe déjà" + ask_yesno "Voulez-vous l'écraser?" N || die - [ -d "$origdir" ] && rm -rf "$origdir" - mv "$machinedir" "$origdir" + [ -d "$origdir" ] && rm -rf "$origdir" + mv "$machinedir" "$origdir" + fi fi ac_set_tmpdir workdir @@ -112,5 +104,43 @@ s|DOCKER_MACHINE_HOME|$HOME/.docker/machine|g fi ac_clean "$workdir" +} + +# faut-il ignorer les machines existantes +NOCLOBBER= + +action= +args=( + --help '$exit_with display_help' + -d,--dump,-x,--export,-s,--save action=dump + -l,--load,-i,--import action=load + -a,--all,--load-all,--import-all action=loadall +) +parse_args "$@"; set -- "${args[@]}" + +if [ -z "$action" ]; then + case "$1" in + d|dump|x|export|s|save) action=dump; shift;; + l|load|i|import) action=load; shift;; + a|all|loadall|importall) action=loadall; shift;; + *) die "Vous devez spécifier l'action à effectuer";; + esac +fi + +case "$action" in +dump) dump_machine "$1";; +load) load_machine "$1";; +loadall) + if [ $# -gt 0 ]; then + archives=("$@") + else + NOCLOBBER=1 + array_lsfiles archives . "*-machine.tar.gz" + fi + for archive in "${archives[@]}"; do + etitle "$archive" + load_machine "$archive" + eend + done ;; esac