xci: scripts: start-new-vm.sh: Do not run multiple package manager processes 57/44557/2
authorMarkos Chandras <mchandras@suse.de>
Mon, 9 Oct 2017 10:18:41 +0000 (11:18 +0100)
committerMarkos Chandras <mchandras@suse.de>
Mon, 9 Oct 2017 12:17:59 +0000 (13:17 +0100)
Package managers get upset if multiple instances run in parallel since
the last one will fail to aquire some sort of DB locking and fail. As
such, lets fix that and only run one package manager process at any
time.

Change-Id: I4ab13f61eee861ef70cb4115403d0e239ec14308
Signed-off-by: Markos Chandras <mchandras@suse.de>
xci/scripts/vm/start-new-vm.sh

index 5112cf4..23d166d 100755 (executable)
@@ -45,6 +45,22 @@ usage() {
        """
 }
 
+wait_for_pkg_mgr() {
+       local pkg_mgr=$1
+       local _retries=30
+       while [[ $_retries -gt 0 ]]; do
+               if pgrep -a $pkg_mgr &> /dev/null; then
+                       echo "There is another $pkg_mgr process running... ($_retries retries left)"
+                       sleep 30
+                       (( _retries = _retries - 1 ))
+               else
+                       return 0
+               fi
+       done
+       echo "$pkg_mgr still running... Maybe stuck?"
+       exit 1
+}
+
 update_clean_vm_files() {
        local opnfv_url="http://artifacts.opnfv.org/releng/xci/images"
        local vm_cache=${XCI_CACHE_DIR}/clean_vm/images
@@ -108,13 +124,19 @@ if ! sudo -n "true"; then
        exit 1
 fi
 case ${ID,,} in
-       *suse) sudo zypper -q -n in virt-manager qemu-kvm qemu-tools libvirt-daemon docker libvirt-client libvirt-daemon-driver-qemu iptables ebtables dnsmasq
-                         ;;
-       centos) sudo yum install -q -y epel-release
-                       sudo yum install -q -y in virt-manager qemu-kvm qemu-kvm-tools qemu-img libvirt-daemon-kvm docker iptables ebtables dnsmasq
-                       ;;
-       ubuntu) sudo apt-get install -y -q=3 virt-manager qemu-kvm libvirt-bin qemu-utils docker.io docker iptables ebtables dnsmasq
-                       ;;
+       *suse)
+               wait_for_pkg_mgr zypper
+               sudo zypper -q -n in virt-manager qemu-kvm qemu-tools libvirt-daemon docker libvirt-client libvirt-daemon-driver-qemu iptables ebtables dnsmasq
+               ;;
+       centos)
+               wait_for_pkg_mgr yum
+               sudo yum install -q -y epel-release
+               sudo yum install -q -y in virt-manager qemu-kvm qemu-kvm-tools qemu-img libvirt-daemon-kvm docker iptables ebtables dnsmasq
+               ;;
+       ubuntu)
+               wait_for_pkg_mgr apt-get
+               sudo apt-get install -y -q=3 virt-manager qemu-kvm libvirt-bin qemu-utils docker.io docker iptables ebtables dnsmasq
+               ;;
 esac
 
 echo "Ensuring libvirt and docker services are running..."