--- Makefile.am | 2 +- configure.ac | 1 + examples/lxcconvert/Makefile.am | 19 ++++++++++ examples/lxcconvert/virt-lxc-convert | 67 ++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 examples/lxcconvert/Makefile.am create mode 100644 examples/lxcconvert/virt-lxc-convert diff --git a/Makefile.am b/Makefile.am index 9847ff0..0ef983f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,7 +23,7 @@ SUBDIRS = . gnulib/lib include src daemon tools docs gnulib/tests \ tests po examples/object-events examples/hellolibvirt \ examples/dominfo examples/domsuspend examples/apparmor \ examples/xml/nwfilter examples/openauth examples/systemtap \ - tools/wireshark + examples/lxcconvert tools/wireshark ACLOCAL_AMFLAGS = -I m4 diff --git a/configure.ac b/configure.ac index 62b74c5..f970de0 100644 --- a/configure.ac +++ b/configure.ac @@ -2695,6 +2695,7 @@ AC_CONFIG_FILES([\ examples/hellolibvirt/Makefile \ examples/systemtap/Makefile \ examples/xml/nwfilter/Makefile \ + examples/lxcconvert/Makefile \ tools/wireshark/Makefile \ tools/wireshark/src/Makefile]) AC_OUTPUT diff --git a/examples/lxcconvert/Makefile.am b/examples/lxcconvert/Makefile.am new file mode 100644 index 0000000..c5ae537 --- /dev/null +++ b/examples/lxcconvert/Makefile.am @@ -0,0 +1,19 @@ +## Copyright (C) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library 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 +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library. If not, see +## <http://www.gnu.org/licenses/>. + +EXTRA_DIST= \ + virt-lxc-convert + diff --git a/examples/lxcconvert/virt-lxc-convert b/examples/lxcconvert/virt-lxc-convert new file mode 100644 index 0000000..ea32ff4 --- /dev/null +++ b/examples/lxcconvert/virt-lxc-convert @@ -0,0 +1,67 @@ +#!/usr/bin/env sh + +function show_help() +{ + cat << EOF +$0 /path/to/lxc/config/file + +Wrapper around virsh domxml-from-native to ease conversion of LXC +containers configuration to libvirt domain XML. +EOF +} + +if test "$#" != 1; then + show_help + exit 1 +fi + +conf=$1 + + +conf_new=/tmp/config-$$ +domain_new=/tmp/config-$$.xml + +cp $conf $conf_new + +# Do we have lxc.mount, and is it pointing to a readable file? +fstab=`grep 'lxc.mount[[:space:]]*=' $conf_new | sed -e 's/[[:space:]]\+=[[:space:]]\+/=/' | cut -f 2 -d '='` +if test \( -n "$fstab" \) -a \( -r "$fstab" \); then + sed -i -e 's/^lxc.mount[[:space:]]*=.*$//' $conf_new + sed -e 's/^\([^#]\)/lxc.mount.entry = \1/' $fstab | cat $conf_new - >${conf_new}.tmp + mv ${conf_new}.tmp $conf_new +fi + +memory=`free | grep 'Mem:' | sed -e 's: \+: :g' | cut -f 2 -d ' '` +default_tmpfs="size=$((memory/2))" + +# Do we have tmpfs without size param? +grep -e 'lxc.mount.entry[[:space:]]*=[[:space:]]*tmpfs[[:space:]]' $conf_new | while read line; do + has_size=`echo $line | grep -v -e 'size='` + # Add the default size here (50%) if no size is given + if test -n "$has_size"; then + sed -i -e "\;$line;s/\([[:space:]]\+[0-9][[:space:]]\+[0-9][::space::]*$\)/,$default_tmpfs\1/" $conf_new + fi + # Convert relative sizes + has_rel_size=`echo $line | grep -e 'size=[0-9]\+%'` + if test -n "$has_rel_size"; then + percent=`echo "$line" | sed -e 's:size=\([0-9]\+\)%:\n\1%\n:' | grep '\%' | sed -e 's/%//'` + size="$((memory*percent/100))" + sed -i -e "\;$line;s/size=[0-9]\+%/size=${size}/" $conf_new + fi +done + +# Do we have any memory limit set? +mem_limit=`grep 'lxc.cgroup.memory.limit_in_bytes[[:space:]]*=' $conf_new` +if test -z "$mem_limit"; then + sed -i -e "1s:^:lxc.cgroup.memory.limit_in_bytes = $memory\n:" $conf_new +fi + +virsh -c lxc:/// domxml-from-native lxc-tools $conf_new >$domain_new + +cat $domain_new + +# Remove the temporary config +rm $conf_new +rm $domain_new + +exit 0 -- 1.9.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list