deploy.sh: Factor out pkg deps into yaml files 51/48751/6
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Sat, 9 Dec 2017 17:20:16 +0000 (18:20 +0100)
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Tue, 12 Dec 2017 19:30:15 +0000 (20:30 +0100)
Instead of hardcoding the packages to install on the jumphost at
deploy time in `ci/deploy.sh`, move the requirements list to a
dedicated yaml file, so it is decoupled from actual code.

While at it, add missing deps:
- ipxe-qemu (AArch64 Ubuntu only);

Change-Id: I9ee5c0796b70f9d29427d608b6415333c8841e1e
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
ci/deploy.sh
docs/release/installation/installation.instruction.rst
mcp/scripts/requirements_deb.yaml [new file with mode: 0755]
mcp/scripts/requirements_rpm.yaml [new file with mode: 0755]

index eacfe8c..d995687 100755 (executable)
@@ -53,6 +53,7 @@ $(notify "OPTIONS:" 2)
   -h  Print this message and exit
   -l  Lab-name
   -p  Pod-name
+  -P  Skip installation of package dependencies
   -s  Deploy-scenario short-name
   -S  Storage dir for VM images
   -L  Deployment log path and file name
@@ -97,6 +98,10 @@ $(notify "Input parameters to the build script are:" 2)
 -L Deployment log path and name, eg. -L /home/jenkins/job.log.tar.gz
 -l Lab name as defined in the configuration directory, e.g. lf
 -p POD name as defined in the configuration directory, e.g. pod2
+-P Skip installing dependency distro packages on current host
+   This flag should only be used if you have kept back older packages that
+   would be upgraded and that is undesirable on the current system.
+   Note that without the required packages, deploy will fail.
 -s Deployment-scenario, this points to a short deployment scenario name, which
    has to be defined in config directory (e.g. os-odl-nofeature-ha).
 -S Storage dir for VM images, default is mcp/deploy/images
@@ -153,6 +158,7 @@ BASE_CONFIG_URI="file://${REPO_ROOT_PATH}/mcp/config"
 
 # Customize deploy workflow
 DRY_RUN=${DRY_RUN:-0}
+USE_EXISTING_PKGS=${USE_EXISTING_PKGS:-0}
 USE_EXISTING_INFRA=${USE_EXISTING_INFRA:-0}
 INFRA_CREATION_ONLY=${INFRA_CREATION_ONLY:-0}
 NO_DEPLOY_ENVIRONMENT=${NO_DEPLOY_ENVIRONMENT:-0}
@@ -170,7 +176,7 @@ source "${DEPLOY_DIR}/lib.sh"
 #
 set +x
 OPNFV_BRIDGE_IDX=0
-while getopts "b:B:dDfEFl:L:p:s:S:he" OPTION
+while getopts "b:B:dDfEFl:L:p:Ps:S:he" OPTION
 do
     case $OPTION in
         b)
@@ -223,6 +229,9 @@ do
                 DEPLOY_TYPE='virtual'
             fi
             ;;
+        P)
+            USE_EXISTING_PKGS=1
+            ;;
         s)
             DEPLOY_SCENARIO=${OPTARG}
             ;;
@@ -269,26 +278,23 @@ pushd "${DEPLOY_DIR}" > /dev/null
 # Prepare the deploy config files based on lab/pod information, deployment
 # scenario, etc.
 
-# Install required packages
-[ -n "$(command -v apt-get)" ] && sudo apt-get install -y \
-  git make rsync mkisofs curl virtinst cpu-checker qemu-kvm uuid-runtime \
-  libvirt-bin cloud-guest-utils e2fsprogs kpartx
-[ -n "$(command -v yum)" ] && sudo yum install -y --skip-broken \
-  git make rsync genisoimage curl virt-install qemu-kvm util-linux \
-  libvirt cloud-utils-growpart e2fsprogs kpartx
-
-# For baremetal, python is indirectly required for PDF parsing
-if [ "${DEPLOY_TYPE}" = 'baremetal' ]; then
-  [ -n "$(command -v apt-get)" ] && sudo apt-get install -y \
-    python python-ipaddress python-jinja2 python-yaml
-  [ -n "$(command -v yum)" ] && sudo yum install -y --skip-broken \
-    python python-ipaddress python-jinja2 python-yaml
-fi
-
-# AArch64 VMs use AAVMF (guest UEFI)
-if [ "$(uname -m)" = 'aarch64' ]; then
-  [ -n "$(command -v apt-get)" ] && sudo apt-get install -y qemu-efi
-  [ -n "$(command -v yum)" ] && sudo yum install -y --skip-broken AAVMF
+# Install required packages on jump server
+if [ ${USE_EXISTING_PKGS} -eq 1 ]; then
+    notify "[NOTE] Skipping distro pkg installation\n" 2 1>&2
+else
+    notify "[NOTE] Installing required distro pkgs\n" 2 1>&2
+    if [ -n "$(command -v apt-get)" ]; then
+      pkg_type='deb'; pkg_cmd='sudo apt-get install -y'
+    else
+      pkg_type='rpm'; pkg_cmd='sudo yum install -y --skip-broken'
+    fi
+    eval "$(parse_yaml "./requirements_${pkg_type}.yaml")"
+    for section in 'common' "${DEPLOY_TYPE}" "$(uname -m)"; do
+      section_var="requirements_pkg_${section}[*]"
+      pkg_list+=${!section_var}
+    done
+    # shellcheck disable=SC2086
+    ${pkg_cmd} ${pkg_list}
 fi
 
 if ! virsh list >/dev/null 2>&1; then
index 502c750..53ef809 100644 (file)
@@ -191,10 +191,14 @@ installed on the Jumpserver:
    - CentOS 7 (recommended by Pharos specification);
    - Ubuntu Xenial;
 
-**NOTE:** The install script expects 'libvirt' to be installed and running
-on the Jumpserver. In case the packages are missing, the script will install
+**NOTE:** The install script will automatically install all required distro
+package dependencies on the Jumpserver, unless explicitly asked not to
+(via `-P` deploy arg). This includes Python, QEMU, libvirt etc.
+
+**NOTE:** The install script expects 'libvirt' to be already running on the
+Jumpserver. In case libvirt packages are missing, the script will install
 them; but depending on the OS distribution, the user might have to start the
-'libvirtd' service manually.
+'libvirtd' service manually, then run the deploy script again.
 
 ==========================================
 OPNFV Software Installation and Deployment
diff --git a/mcp/scripts/requirements_deb.yaml b/mcp/scripts/requirements_deb.yaml
new file mode 100755 (executable)
index 0000000..84b75ee
--- /dev/null
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+requirements_pkg:
+  # Common pkgs required for all deploys, no matter the type, arch etc.
+  common:
+    - cloud-guest-utils
+    - cpu-checker
+    - curl
+    - e2fsprogs
+    - git
+    - kpartx
+    - libvirt-bin
+    - make
+    - mkisofs
+    - qemu-kvm
+    - rsync
+    - uuid-runtime
+    - virtinst
+  # Optional, arch-specific requirements, matched by key name = $(uname -m)
+  aarch64:
+    # AArch64 VMs use AAVMF (guest UEFI)
+    - ipxe-qemu
+    - qemu-efi
+  # Optional, deploy-type-specific requirements
+  baremetal:
+    # For baremetal, python is indirectly required for PDF parsing
+    - python
+    - python-ipaddress
+    - python-jinja2
+    - python-yaml
diff --git a/mcp/scripts/requirements_rpm.yaml b/mcp/scripts/requirements_rpm.yaml
new file mode 100755 (executable)
index 0000000..7a6ec38
--- /dev/null
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2017 Mirantis Inc., Enea AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+requirements_pkg:
+  # Common pkgs required for all deploys, no matter the type, arch etc.
+  common:
+    - cloud-utils-growpart
+    - curl
+    - e2fsprogs
+    - genisoimage
+    - git
+    - kpartx
+    - libvirt
+    - make
+    - qemu-kvm
+    - rsync
+    - util-linux
+    - virt-install
+  # Optional, arch-specific requirements, matched by key name = $(uname -m)
+  aarch64:
+    # AArch64 VMs use AAVMF (guest UEFI)
+    - AAVMF
+  # Optional, deploy-type-specific requirements
+  baremetal:
+    # For baremetal, python is indirectly required for PDF parsing
+    - python
+    - python-ipaddress
+    - python-jinja2
+    - python-yaml