diff --git a/utils/ansible/ftest/README.md b/utils/ansible/ftest/README.md index d01e21e61ea..f326be4c05f 100644 --- a/utils/ansible/ftest/README.md +++ b/utils/ansible/ftest/README.md @@ -67,15 +67,15 @@ The inventory should also contain a set of mandatory and optional variables. sub-cluster. - **daos\_source\_dir**: mandatory variable only used by the node of the *daos\_dev* group defining the path of the directory containing the DAOS source code. +- **daos\_ofi\_provider**: optional variable (default value: ofi+tcp;ofi_rxm) defining the network + provider to be used by the DAOS engines. It also defines which network rpms driver to install + (e.g. ib mellanox driver). - **daos\_ofi\_interface**: optional variable only used by the node of the daos\_dev group defining the network interface to use. When this variable is not defined, the network interface is arbitrarily selected by DAOS. - **daos\_hugepages\_nb**: optional variable (default value: 4096) only used by the nodes of the - *daos\_servers* group defining the number of hugepages to be allocated by the linux kernel. -- **daos\_avocado\_version**: optional variable (default value: "2.4.3") only used by the node of - the *daos\_dev* group defining the version of *avocado* to install. -- **daos\_avocado\_framework\_version**: optional variable (default value: "82.1") only used by the - node of the *daos\_dev* group defining the version of *avocado\_framework* to install. + *daos\_servers* group. This variable defines the number of hugepages to be allocated by the linux + kernel. Different file format (e.g. YAML, INI, etc.) and file tree structure are supported to define an ansible inventory. The following simple ansible inventory describe for example in one YAML file @@ -155,31 +155,11 @@ defined in the inventory. Usage of these two scripts will be detailed in the fol ## Installing DAOS Binaries Building and installing binaries could be done thanks to the generated bash script `daos-make.sh`. -This last script supports several options and the two sub-commands `install` and `update`. +This last script supports several options alllowing such as building dependencies or not. More details on the supported options could be found with running the command with the `--help` option. -The `install` sub-command should be used to install/reinstall from scratch all the DAOS binaries and -their dependencies such as the *spdk* or the *mercury* libraries. For example, the *foo* user could -use the following command line to install or reinstall the DAOS binaries and its dependencides into -the `/home/foo/daos/install` directory. - -```bash -/home/foo/daos/daos-make.sh -v -j 32 -f install -``` - -When the previous *install* step has been done and the DAOS source code tests have been updated, the -DAOS binaries could be build and reinstalled thanks to the `update` sub-command. This last one -should be far quicker than a full reinstall. - -```bash -/home/foo/daos/daos-make.sh -v -j 32 update -``` - -> :bulb: The option `-j 32` (i.e. one per core) seems to be a good compromise between compilation -> reliability and speed. - ## Launching Functional Tests Launching the DAOS functional tests could be done thanks to the generated bash script @@ -192,7 +172,6 @@ with running the command with the `--help` option. After successfully installing the DAOS binaries and dependencies, the user *foo* could run all the test(s) with the tag `hello_world` thanks to the following command line. - ```bash /home/foo/daos/daos-launch.sh -v -- --nvme=auto hello_world ``` diff --git a/utils/ansible/ftest/file/configure-nofile.sh b/utils/ansible/ftest/file/configure-nofile.sh new file mode 100644 index 00000000000..2426a166bd1 --- /dev/null +++ b/utils/ansible/ftest/file/configure-nofile.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set -x +set -u -e -o pipefail + +if [[ $(id -u) -ne 0 ]] ; then + echo "[ERROR] Could only be used by root" + exit 1 +fi + +sed -i -E -e "/DefaultLimitNOFILE/s/.*/DefaultLimitNOFILE=infinity:infinity/" /etc/systemd/system.conf + +cat > /etc/security/limits.d/daos-nofile.conf << EOF +# /etc/security/limits.d/daos-nofile.conf + +# +* hard nofile unlimited +* soft nofile unlimited +EOF + +systemctl daemon-reexec diff --git a/utils/ansible/ftest/file/enable-coredumps.sh b/utils/ansible/ftest/file/enable-coredumps.sh new file mode 100644 index 00000000000..0f703919d0d --- /dev/null +++ b/utils/ansible/ftest/file/enable-coredumps.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# set -x +set -u -e -o pipefail + +if [[ $(id -u) -ne 0 ]] ; then + echo "[ERROR] Could only be used by root" + exit 1 +fi + +sed -i -E -e "/DefaultLimitCORE/s/.*/DefaultLimitCORE=infinity:infinity/" /etc/systemd/system.conf + +cat > /etc/security/limits.d/daos-coredumps.conf << EOF +# /etc/security/limits.d/daos-coredumps.conf + +# +* hard core unlimited +* soft core unlimited +EOF + +cat > /etc/sysctl.d/daos-coredumps.conf << EOF +# /etc/sysctl.d/daos-coredumps.conf + +fs.suid_dumpable=1 +EOF +sysctl -q -w "fs.suid_dumpable=1" +sysctl -p + +cat > /etc/profile.d/daos-coredumps.sh << EOF +# Enable core dump +ulimit -c unlimited +EOF + +mkdir -p /etc/systemd/coredump.conf.d/ +cat > /etc/systemd/coredump.conf.d/daos-coredumps.conf << EOF +# /etc/systemd/coredump.conf.d/daos-coredumps.conf + +[Coredump] +Storage=external +Compress=yes +ProcessSizeMax=8G +ExternalSizeMax=8G +KeepFree=2G +EOF +systemctl daemon-reexec diff --git a/utils/ansible/ftest/inventory-sample.yml b/utils/ansible/ftest/inventory-sample.yml index 1ed11b68a8b..2a6307d3561 100644 --- a/utils/ansible/ftest/inventory-sample.yml +++ b/utils/ansible/ftest/inventory-sample.yml @@ -1,21 +1,40 @@ # Sample inventory of a DAOS functional platform running on the wolf cluster +# +# Detailed information on the content of this ansible inventory file is available in the README.md +# file of the directory containing this first file. -all: - vars: - daos_runtime_dir: /home/foo/daos - children: - daos_dev: - vars: - daos_source_dir: /home/foo/work/daos - daos_ofi_interface: eth0 - hosts: - wolf-666: - daos_servers: - vars: - daos_hugepages_nb: 8182 - hosts: - wolf-666: - wolf-999: - daos_clients: - hosts: - wolf-999: +# all: +# vars: +# # +# # Mandatory variable defining the shared directory used to install DAOS. +# daos_runtime_dir: /home/foo/daos +# # +# # Optional variable defining the network provider to use by the DAOS engines. This variable +# # is also used to define which network driver rpms have to be install. +# # default: ofi+tcp;ofi_rxm +# daos_ofi_provider: ofi+tcp;ofi_rxm +# children: +# daos_dev: +# vars: +# # +# # Mandatory variable defining the path of the directory containing the DAOS source code. +# daos_source_dir: /home/foo/work/daos +# # +# # Optional variable defining the network interface to use with the launch.py python +# # script. +# # default: None +# daos_ofi_interface: eth0 +# hosts: +# wolf-666: +# daos_servers: +# vars: +# # +# # Optional variable defining the number of hugepages to be allocated by the linux kernel. +# # default: 4096 +# daos_hugepages_nb: 8182 +# hosts: +# wolf-666: +# wolf-999: +# daos_clients: +# hosts: +# wolf-999: diff --git a/utils/ansible/ftest/tasks/daos_base.yml b/utils/ansible/ftest/tasks/daos_base.yml index 6ac6ac8f7d1..da555c5d19d 100644 --- a/utils/ansible/ftest/tasks/daos_base.yml +++ b/utils/ansible/ftest/tasks/daos_base.yml @@ -37,13 +37,28 @@ mode: '0755' recurse: true -- name: Create MPI module configuration file +- name: Copy bash script enable-coredumps.sh remote_user: root - file: - src: "{{ daos_openmpi_module_path }}" - path: /etc/modulefiles/mpi/mlnx_openmpi-x86_64 - state: link + copy: + src: file/enable-coredumps.sh + dest: /root/enable-coredumps.sh owner: root group: root - mode: '0755' - force: true + mode: '0644' + +- name: Enable CORE dump + remote_user: root + command: /bin/bash /root/enable-coredumps.sh + +- name: Copy bash script configure-nofile.sh + remote_user: root + copy: + src: file/configure-nofile.sh + dest: /root/configure-nofile.sh + owner: root + group: root + mode: '0644' + +- name: Configure Number of Open Files + remote_user: root + command: /bin/bash /root/configure-nofile.sh diff --git a/utils/ansible/ftest/tasks/daos_clients.yml b/utils/ansible/ftest/tasks/daos_clients.yml index 786720283ed..5b5116a04ff 100644 --- a/utils/ansible/ftest/tasks/daos_clients.yml +++ b/utils/ansible/ftest/tasks/daos_clients.yml @@ -69,3 +69,12 @@ group: root mode: '0644' backup: true + +- name: Update search path commands + remote_user: root + lineinfile: + path: /etc/security/pam_env.conf + state: present + regexp: '^PATH=' + line: "PATH={{ daos_runtime_dir }}/install/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/bin/syscfg:/root/bin" + backup: true diff --git a/utils/ansible/ftest/tasks/daos_dev.yml b/utils/ansible/ftest/tasks/daos_dev.yml index 9b604181e98..e54a7f1a911 100644 --- a/utils/ansible/ftest/tasks/daos_dev.yml +++ b/utils/ansible/ftest/tasks/daos_dev.yml @@ -44,17 +44,16 @@ group: daos_server mode: 0700 -- name: Install dependencies packages - include_tasks: "{{ item }}" - with_first_found: - - "{{ ansible_distribution | replace(' ', '_') }}{{ ansible_distribution_major_version}}/devs_dependencies.yml" - - name: Create DAOS runtime directory file: path: "{{ daos_runtime_dir }}" state: directory mode: '0755' - recurse: true + +- name: Install dependencies packages + include_tasks: "{{ item }}" + with_first_found: + - "{{ ansible_distribution | replace(' ', '_') }}{{ ansible_distribution_major_version}}/devs_dependencies.yml" - name: Install DAOS make helper script template: diff --git a/utils/ansible/ftest/tasks/daos_servers.yml b/utils/ansible/ftest/tasks/daos_servers.yml index faf4c6f3680..cb4dd022fb0 100644 --- a/utils/ansible/ftest/tasks/daos_servers.yml +++ b/utils/ansible/ftest/tasks/daos_servers.yml @@ -19,7 +19,7 @@ - name: Check Huge Pages remote_user: root daos_hugepages: - size: "{{ daos_hugepages_nb | default(4096) }}" + size: "{{ daos_hugepages_nb | default(daos_hugepages_nb_default) }}" - name: Add DAOS server groups remote_user: root @@ -84,4 +84,4 @@ owner: root group: root mode: 0755 - loop: "[''] + {{ range(0, 4, 1) | list }}" + loop: "{{ range(0, 4, 1) | list + [''] }}" diff --git a/utils/ansible/ftest/tasks/el8/clients_dependencies.yml b/utils/ansible/ftest/tasks/el8/clients_dependencies.yml index 5a801e15bbd..080290f4a1d 100644 --- a/utils/ansible/ftest/tasks/el8/clients_dependencies.yml +++ b/utils/ansible/ftest/tasks/el8/clients_dependencies.yml @@ -6,3 +6,11 @@ state: latest update_cache: true name: "{{ daos_base_deps.rpms + daos_client_deps.rpms }}" + +- name: Install MOFED rpms + remote_user: root + dnf: + state: latest + update_cache: true + name: "{{ mlnx_deps.rpms }}" + when: daos_ofi_provider | default(daos_ofi_provider_default) == "ofi+verbs;ofi_rxm" diff --git a/utils/ansible/ftest/tasks/el8/devs_dependencies.yml b/utils/ansible/ftest/tasks/el8/devs_dependencies.yml index 9510bed9b52..f3501b900b7 100644 --- a/utils/ansible/ftest/tasks/el8/devs_dependencies.yml +++ b/utils/ansible/ftest/tasks/el8/devs_dependencies.yml @@ -6,19 +6,3 @@ state: latest update_cache: true name: "{{ daos_base_deps.rpms + daos_dev_deps.rpms }}" - -- name: Install DAOS building dependencies - remote_user: root - command: - dnf builddep --nobest --assumeyes "{{ playbook_dir }}/file/daos.spec" - args: - warn: false - register: dnf_result - become: true - changed_when: '"Nothing to do" not in dnf_result.stdout' - -- name: Install python development dependencies - remote_user: root - pip: - state: present - name: "{{ daos_dev_deps.pips }}" diff --git a/utils/ansible/ftest/tasks/el8/servers_dependencies.yml b/utils/ansible/ftest/tasks/el8/servers_dependencies.yml index 5ef0d5d3af8..1d7f8f28fc3 100644 --- a/utils/ansible/ftest/tasks/el8/servers_dependencies.yml +++ b/utils/ansible/ftest/tasks/el8/servers_dependencies.yml @@ -6,3 +6,11 @@ state: latest update_cache: true name: "{{ daos_base_deps.rpms + daos_server_deps.rpms }}" + +- name: Install MOFED rpms + remote_user: root + dnf: + state: latest + update_cache: true + name: "{{ mlnx_deps.rpms }}" + when: daos_ofi_provider | default(daos_ofi_provider_default) == "ofi+verbs;ofi_rxm" diff --git a/utils/ansible/ftest/templates/daos-launch.sh.j2 b/utils/ansible/ftest/templates/daos-launch.sh.j2 index 56c1f65df04..632d6c2ebbc 100644 --- a/utils/ansible/ftest/templates/daos-launch.sh.j2 +++ b/utils/ansible/ftest/templates/daos-launch.sh.j2 @@ -1,12 +1,14 @@ #!/bin/bash # shellcheck disable=all # Jinja2 template can not be parsed with shellcheck -set -o pipefail +set -u -o pipefail -VERSION=0.1 -CWD="$(realpath "$(dirname $0)")" +VERSION=0.2 +CWD="$(realpath "${0%}")" +CWD="${CWD%/*}" DAOS_INSTALL_DIR="{{ daos_runtime_dir }}/install" +DAOS_VENV_DIR="{{ daos_runtime_dir }}/virtualenvs" DAOS_SOURCE_DIR="{{ daos_source_dir }}" {% if daos_ofi_interface is defined %} OFI_INTERFACE="{{ daos_ofi_interface }}" @@ -16,7 +18,7 @@ SERVERS_LIST="{{ groups["daos_servers"] | join(',') }}" CLIENTS_LIST="{{ groups["daos_clients"] | join(',') }}" {% endif %} -PYTHON_EXE=python3 +PYTHON_EXE=python CLUSH_EXE=clush MODULE_EXE=module @@ -43,6 +45,9 @@ TRACE_LEVEL_VERBOSE=1 TRACE_LEVEL_DEBUG=2 TRACE_LEVEL=$TRACE_LEVEL_STANDARD +START_CLEANUP="false" +END_CLEANUP="false" + function debug { if [[ $TRACE_LEVEL -ge $TRACE_LEVEL_DEBUG ]] @@ -146,13 +151,13 @@ function cleanup rmdir "\$target" done EOF - } | $CLUSH_EXE -l root -w $CLIENTS_LIST bash + } | run $CLUSH_EXE -l root -w $CLIENTS_LIST bash {% endif %} info "Clean up of servers $SERVERS_LIST" - $CLUSH_EXE -l root -w $SERVERS_LIST sudo systemctl stop daos_server - $CLUSH_EXE -l root -w $SERVERS_LIST rm -rf /var/run/daos_server - $CLUSH_EXE -l root -w $SERVERS_LIST mkdir -p /var/run/daos_server + run $CLUSH_EXE -l root -w $SERVERS_LIST sudo systemctl stop daos_server + run $CLUSH_EXE -l root -w $SERVERS_LIST rm -rf /var/run/daos_server + run $CLUSH_EXE -l root -w $SERVERS_LIST mkdir -p /var/run/daos_server info "Stopping all DAOS processes" {% if "daos_clients" in groups and groups["daos_clients"] | length > 0 %} @@ -160,7 +165,7 @@ function cleanup {% else %} CLUSH_NODESET="-w $SERVERS_LIST" {% endif %} - $CLUSH_EXE -l root $CLUSH_NODESET 'bash -c "killall -q -9 avocado orterun mpirun orted daos_server daos_io_server daos_agent || true"' + run $CLUSH_EXE -l root $CLUSH_NODESET 'bash -c "killall -q -9 avocado orterun mpirun orted daos_server daos_io_server daos_agent || true"' info "Cleaning mount points of servers" for host in {{ groups["daos_servers"] | join(' ') }} @@ -168,33 +173,33 @@ function cleanup for index in {0..3} do mountpoint="/mnt/daos$index" - if ssh root@$host mountpoint -q "$mountpoint" ; then + if run ssh root@$host mountpoint -q "$mountpoint" ; then info "Cleaning mount points $mountpoint of host $host" - ssh root@$host rm -fr $mountpoint/* - ssh root@$host umount $mountpoint + run ssh root@$host rm -fr $mountpoint/* + run ssh root@$host umount $mountpoint fi done for index in {0..1} do bdev="/dev/pmem$index" - if ssh root@$host test -b "$bdev" ; then + if run ssh root@$host test -b "$bdev" ; then info "Cleaning persistent memory $bdev of host $host" - ssh root@$host wipefs -a "$bdev" + run ssh root@$host wipefs -a "$bdev" fi done done info "Cleaning huge pages" - $CLUSH_EXE -l root -w $SERVERS_LIST ipcrm --all=shm - $CLUSH_EXE -l root -w $SERVERS_LIST /bin/rm -f "/dev/hugepages/spdk_*" + run $CLUSH_EXE -l root -w $SERVERS_LIST ipcrm --all=shm + run $CLUSH_EXE -l root -w $SERVERS_LIST /bin/rm -f "/dev/hugepages/spdk_*" } {% raw %} opts=() args=() for item in "$@" ; do - if [[ ${#args} -eq 0 && "$item" != "--" ]] ; then + if [[ ${#args[@]} -eq 0 && "$item" != "--" ]] ; then [[ ${item::1} == "-" ]] || fatal "unrecognized option \"$item\"" opts+=("$item") else @@ -209,49 +214,57 @@ eval set -- "$OPTIONS" while true do case "$1" in - -s|--start-cleanup) START_CLEANUP=true ; shift 1;; - -e|--end-cleanup) END_CLEANUP=true ; shift 1;; + -s|--start-cleanup) START_CLEANUP="true" ; shift 1;; + -e|--end-cleanup) END_CLEANUP="true" ; shift 1;; -h|--help) usage ; exit 0;; -V|--version) echo "daos-launch.sh version=$VERSION" ; exit 0 ;; - -v|--verbose) TRACE_LEVEL=$TRACE_LEVEL_VERBOSE ; shift 1 ;; - -D|--debug) TRACE_LEVEL=$TRACE_LEVEL_DEBUG ; set -x ; shift 1 ;; - -q|--quiet) TRACE_LEVEL=$TRACE_LEVEL_QUIET ; shift 1 ;; + -v|--verbose) TRACE_LEVEL="$TRACE_LEVEL_VERBOSE" ; shift 1 ;; + -D|--debug) TRACE_LEVEL="$TRACE_LEVEL_DEBUG" ; set -x ; shift 1 ;; + -q|--quiet) TRACE_LEVEL="$TRACE_LEVEL_QUIET" ; shift 1 ;; --) shift ; break ;; *) fatal "unrecognized option" ;; esac done -check_cmds $PYTHON_EXE $CLUSH_EXE $MODULE_EXE +check_cmds $CLUSH_EXE $MODULE_EXE -if [[ -n $START_CLEANUP ]] ; then +if "$START_CLEANUP" ; then cleanup fi -info "Setting simulation environment" -export PYTHONPATH="$DAOS_INSTALL_DIR/lib64/python3.6/site-packages:$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest/util" +info "Setting python simulation environment" +source "$DAOS_VENV_DIR/bin/activate" +if [[ ${PYTHONPATH:+x} ]] ; then + export PYTHONPATH="$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest/util:$PYTHONPATH" +else + export PYTHONPATH="$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest/util" +fi cd "$DAOS_SOURCE_DIR/utils/sl" source setup_local.sh -if $MODULE_EXE is-avail mpi/mpich-x86_64 ; then - $MODULE_EXE load mpi/mpich-x86_64 + +info "Setting MPI simulation environment" +if run $MODULE_EXE is-avail mpi/mpich-x86_64 ; then + run $MODULE_EXE load mpi/mpich-x86_64 fi info "Parametrization of the simulation" cd "$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest" {% if "daos_clients" in groups and groups["daos_clients"] | length > 0 %} -common_opts="-ar --test_servers=$SERVERS_LIST --test_clients=$CLIENTS_LIST" +common_opts="-ar --provider={{ daos_ofi_provider | default(daos_ofi_provider_default) }} --test_servers=$SERVERS_LIST --test_clients=$CLIENTS_LIST" {% else %} -common_opts="-ar --test_servers=$SERVERS_LIST" +common_opts="-ar --provider={{ daos_ofi_provider | default(daos_ofi_provider_default) }} --test_servers=$SERVERS_LIST" {% endif %} info "Starting functional test simulation" {% if daos_ofi_interface is defined %} -env OFI_INTERFACE=$OFI_INTERFACE $PYTHON_EXE launch.py $common_opts "${args[@]}" +run env OFI_INTERFACE=$OFI_INTERFACE $PYTHON_EXE launch.py $common_opts "${args[@]}" {% else %} -$PYTHON_EXE launch.py $common_opts "${args[@]}" +run $PYTHON_EXE launch.py $common_opts "${args[@]}" {% endif %} rc=$? +deactivate -if [[ -n $END_CLEANUP ]] ; then +if "$END_CLEANUP" ; then cleanup fi diff --git a/utils/ansible/ftest/templates/daos-launch_nlt.sh.j2 b/utils/ansible/ftest/templates/daos-launch_nlt.sh.j2 index c4009a0f2a5..82687901ed2 100644 --- a/utils/ansible/ftest/templates/daos-launch_nlt.sh.j2 +++ b/utils/ansible/ftest/templates/daos-launch_nlt.sh.j2 @@ -1,18 +1,20 @@ #!/bin/bash # shellcheck disable=all # Jinja2 template can not be parsed with shellcheck -set -o pipefail +set -u -o pipefail -VERSION=0.1 -CWD="$(realpath "$(dirname $0)")" +VERSION=0.2 +CWD="$(realpath "${0%}")" +CWD="${CWD%/*}" DAOS_INSTALL_DIR="{{ daos_runtime_dir }}/install" +DAOS_VENV_DIR="{{ daos_runtime_dir }}/virtualenvs" DAOS_SOURCE_DIR="{{ daos_source_dir }}" {% if daos_ofi_interface is defined %} OFI_INTERFACE="{{ daos_ofi_interface }}" {% endif %} -PYTHON_EXE=python3 +PYTHON_EXE=python MODULE_EXE=module ANSI_COLOR_BLACK=30 @@ -38,6 +40,9 @@ TRACE_LEVEL_VERBOSE=1 TRACE_LEVEL_DEBUG=2 TRACE_LEVEL=$TRACE_LEVEL_STANDARD +START_CLEANUP="false" +END_CLEANUP="false" + function debug { if [[ $TRACE_LEVEL -ge $TRACE_LEVEL_DEBUG ]] @@ -118,44 +123,44 @@ function run function cleanup { - info "Clean up of servers $SERVERS_LIST" - sudo systemctl stop daos_server - sudo rm -rf /var/run/daos_server - sudo mkdir -p /var/run/daos_server + info "Clean up of local server" + run sudo systemctl stop daos_server + run sudo rm -rf /var/run/daos_server + run sudo mkdir -p /var/run/daos_server info "Stopping all DAOS related processes" - sudo killall -q -9 avocado orterun mpirun orted daos_server daos_io_server daos_agent + run sudo killall -q -9 avocado orterun mpirun orted daos_server daos_io_server daos_agent - info "Cleaning mount points of servers" + info "Cleaning mount points of local server" for index in {0..3} do mountpoint="/mnt/daos$index" - if mountpoint -q "$mountpoint" ; then + if run mountpoint -q "$mountpoint" ; then info "Cleaning mount points $mountpoint of host $host" - sudo rm -fr $mountpoint/* - sudo umount $mountpoint + run sudo rm -fr $mountpoint/* + run sudo umount $mountpoint fi done for index in {0..1} do bdev="/dev/pmem$index" - if test -b "$bdev" ; then + if run test -b "$bdev" ; then info "Cleaning persistent memory $bdev of host $host" - sudo wipefs -a "$bdev" + run sudo wipefs -a "$bdev" fi done info "Cleaning huge pages" - sudo ipcrm --all=shm - sudo /bin/rm -f "/dev/hugepages/spdk_*" + run sudo ipcrm --all=shm + run sudo /bin/rm -f "/dev/hugepages/spdk_*" } {% raw %} opts=() args=() for item in "$@" ; do - if [[ ${#args} -eq 0 && "$item" != "--" ]] ; then + if [[ ${#args[@]} -eq 0 && "$item" != "--" ]] ; then [[ ${item::1} == "-" ]] || fatal "unrecognized option \"$item\"" opts+=("$item") else @@ -170,46 +175,58 @@ eval set -- "$OPTIONS" while true do case "$1" in - -s|--start-cleanup) START_CLEANUP=true ; shift 1;; - -e|--end-cleanup) END_CLEANUP=true ; shift 1;; + -s|--start-cleanup) START_CLEANUP="true" ; shift 1;; + -e|--end-cleanup) END_CLEANUP="true" ; shift 1;; -h|--help) usage ; exit 0;; -V|--version) echo "daos-launch.sh version=$VERSION" ; exit 0 ;; - -v|--verbose) TRACE_LEVEL=$TRACE_LEVEL_VERBOSE ; shift 1 ;; - -D|--debug) TRACE_LEVEL=$TRACE_LEVEL_DEBUG ; set -x ; shift 1 ;; - -q|--quiet) TRACE_LEVEL=$TRACE_LEVEL_QUIET ; shift 1 ;; + -v|--verbose) TRACE_LEVEL="$TRACE_LEVEL_VERBOSE" ; shift 1 ;; + -D|--debug) TRACE_LEVEL="$TRACE_LEVEL_DEBUG" ; set -x ; shift 1 ;; + -q|--quiet) TRACE_LEVEL="$TRACE_LEVEL_QUIET" ; shift 1 ;; --) shift ; break ;; *) fatal "unrecognized option" ;; esac done -check_cmds $PYTHON_EXE $CLUSH_EXE $MODULE_EXE +check_cmds $MODULE_EXE -if [[ -n $START_CLEANUP ]] ; then +if "$START_CLEANUP" ; then cleanup info "Cleaning NLT logs" - /bin/rm -f "$DAOS_SOURCE_DIR"/dnt.* "$DAOS_SOURCE_DIR"/nlt-* "$DAOS_SOURCE_DIR"/vgcore.* + run /bin/rm -f "$DAOS_SOURCE_DIR"/dnt.* "$DAOS_SOURCE_DIR"/nlt-* "$DAOS_SOURCE_DIR"/vgcore.* fi -info "Setting simulation environment" -export PYTHONPATH="$DAOS_INSTALL_DIR/lib64/python3.6/site-packages:$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest/util" +info "Setting python simulation environment" +source "$DAOS_VENV_DIR/bin/activate" +if [[ ${PYTHONPATH:+x} ]] ; then + export PYTHONPATH="$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest/util:$PYTHONPATH" +else + export PYTHONPATH="$DAOS_INSTALL_DIR/lib/daos/TESTING/ftest/util" +fi cd "$DAOS_SOURCE_DIR/utils/sl" source setup_local.sh -if $MODULE_EXE is-avail mpi/mpich-x86_64 ; then - $MODULE_EXE load mpi/mpich-x86_64 + +info "Setting MPI simulation environment" +if run $MODULE_EXE is-avail mpi/mpich-x86_64 ; then + run $MODULE_EXE load mpi/mpich-x86_64 fi +info "Fixing daos_server_helper" +run sudo -E "$DAOS_SOURCE_DIR/utils/setup_daos_server_helper.sh" +run chmod -x "$DAOS_INSTALL_DIR/bin/daos_server_helper" + info "Starting NLT tests" pushd "$DAOS_SOURCE_DIR" > /dev/null {% if daos_ofi_interface is defined %} -env OFI_INTERFACE=$OFI_INTERFACE $PYTHON_EXE utils/node_local_test.py $common_opts "${args[@]}" +run env OFI_INTERFACE=$OFI_INTERFACE $PYTHON_EXE utils/node_local_test.py "${args[@]}" {% else %} -$PYTHON_EXE launch.py $common_opts "${args[@]}" +run $PYTHON_EXE utils/node_local_test.py "${args[@]}" {% endif %} rc=$? popd > /dev/null +deactivate -if [[ -n $END_CLEANUP ]] ; then +if "$END_CLEANUP" ; then cleanup fi diff --git a/utils/ansible/ftest/templates/daos-make.sh.j2 b/utils/ansible/ftest/templates/daos-make.sh.j2 index 4ad23399ed5..e1bde6a59b5 100644 --- a/utils/ansible/ftest/templates/daos-make.sh.j2 +++ b/utils/ansible/ftest/templates/daos-make.sh.j2 @@ -1,25 +1,30 @@ #!/bin/bash # shellcheck disable=all # Jinja2 template can not be parsed with shellcheck -set -o pipefail +set -u -o pipefail -VERSION=0.3 -CWD="$(realpath "$(dirname $0)")" -declare -A VALID_CMDS=([install]=true [update]=true) +VERSION=0.4 +CWD="$(realpath "${0%}")" +CWD="${CWD%/*}" DAOS_INSTALL_DIR="{{ daos_runtime_dir }}/install" +DAOS_VENV_DIR="{{ daos_runtime_dir }}/virtualenvs" DAOS_SOURCE_DIR="{{ daos_source_dir }}" SERVERS_LIST="{{ groups["daos_servers"] | join(',') }}" {% if "daos_clients" in groups and groups["daos_clients"] | length > 0 %} CLIENTS_LIST="{{ groups["daos_clients"] | join(',') }}" {% endif %} -SCONS_EXE=scons-3 +SCONS_EXE=scons +SSH_EXE=ssh CLUSH_EXE=clush +NODESET_EXE=nodeset MODULE_EXE=module CMAKE_EXE=cmake3 MAKE_EXE=make WGET_EXE=wget +PYTHON_EXE=python3.11 +PIP_EXE=pip CLUSH_OPTS="-bL -S" @@ -51,7 +56,10 @@ TRACE_LEVEL_VERBOSE=1 TRACE_LEVEL_DEBUG=2 TRACE_LEVEL=$TRACE_LEVEL_STANDARD +DAOS_BUILD_DEPS=false +DAOS_BUILD_TYPE=debug JOBS_NB=1 +FORCE_INSTALL=false function debug { @@ -97,6 +105,7 @@ function fatal function check_cmds { + hash -r for cmd in $@ do { hash $cmd > "/dev/null" 2>&1 ; } || { fatal "$cmd command not installed" ; } @@ -106,7 +115,7 @@ function check_cmds function usage { cat <<- EOF - usage: daos-make.sh [OPTIONS] CMD + usage: daos-make.sh [OPTIONS] Build and install DAOS for running avocado functional tests @@ -116,17 +125,16 @@ function usage --vol-daos Path of vol-daos source tree --mpifileutils Path of mpi file utils source tree --ior Path of ior file utils source tree + --fio Path of fio file utils source tree + -b, --build-type DAOS build type: debug, release or dev + -d, --deps Build DAOS dependencies -j, --jobs Allow N jobs at once; one job with no arg - -f, --force Overwrite the current install of DAOS + -f, --force Overwrite the current install of DAOS and deps -h, --help Show this help message and exit -V, --version Show version number -q, --quiet Quiet mode -v, --verbose Verbose mode -D, --debug Debug mode - - Commands: - install Build and install DAOS - update Update current install of DAOS EOF } @@ -140,7 +148,7 @@ function run fi } -OPTIONS=$(getopt -o "j:fhVvDq" --long "mpich:,hdf5:,vol-daos:,mpifileutils:,ior:,jobs:,force,help,version,verbose,debug,quiet" -- "$@") || exit 1 +OPTIONS=$(getopt -o "b:dj:fhVvDq" --long "mpich:,hdf5:,vol-daos:,mpifileutils:,ior:,fio:,build-type:,deps,jobs:,force,help,version,verbose,debug,quiet" -- "$@") || exit 1 eval set -- "$OPTIONS" while true do @@ -150,6 +158,9 @@ do --vol-daos) VOL_DAOS_PATH="$2" ; shift 2 ;; --mpifileutils) MPI_FILE_UTILS_PATH="$2" ; shift 2 ;; --ior) IOR_PATH="$2" ; shift 2 ;; + --fio) FIO_PATH="$2" ; shift 2 ;; + -b|--build-type) DAOS_BUILD_TYPE="$2" ; shift 2 ;; + -d|--deps) DAOS_BUILD_DEPS=true ; shift 1 ;; -j|--jobs) JOBS_NB="$2" ; shift 2 ;; -f|--force) FORCE_INSTALL=true ; shift 1;; -h|--help) usage ; exit 0;; @@ -162,32 +173,29 @@ do esac done -[[ $1 ]] || fatal "Command not defined: use install or update" -CMD="$1" -[[ ${VALID_CMDS[$CMD]} == true ]] || fatal "Invalid command \"$CMD\": use install or update" - -check_cmds $SCONS_EXE $MODULE_EXE $CLUSH_EXE $WGET_EXE $MAKE_EXE $CMAKE_EXE +check_cmds $SSH_EXE $WGET_EXE $CLUSH_EXE $NODESET_EXE $MODULE_EXE $MAKE_EXE $CMAKE_EXE set -e -info "Mount of home partition" +info "Checking of home partition" {% if "daos_clients" in groups and groups["daos_clients"] | length > 0 %} -run $CLUSH_EXE $CLUSH_OPTS -l root -w $CLIENTS_LIST -w $SERVERS_LIST mountpoint --quiet "$HOME" +for host in $($NODESET_EXE -e $CLIENTS_LIST $SERVERS_LIST) {% else %} -run $CLUSH_EXE $CLUSH_OPTS -w $SERVERS_LIST mountpoint --quiet "$HOME" +for host in $($NODESET_EXE -e $SERVERS_LIST) {% endif %} - -for dir in "$DAOS_INSTALL_DIR" "$DAOS_SOURCE_DIR/build" do - if [[ -d "$dir" && "$CMD" == install ]]; then - [[ -n "$FORCE_INSTALL" ]] || fatal "DAOS already installed: use install --force or update." - info "Removing old DAOS install directory $dir" + run $SSH_EXE root@$host mountpoint --quiet "$HOME" || fatal "Home directory '$home' not mounted on $host" +done + +if "$FORCE_INSTALL" ; then + for dir in "$DAOS_INSTALL_DIR" "$DAOS_VENV_DIR" "$DAOS_SOURCE_DIR/build" + do + info "Removing old DAOS directory $dir" if ! run /bin/rm -fr "$dir" ; then fatal "Old install directory $dir could not be removed" fi - - fi -done + done +fi if [[ ! -d "$DAOS_INSTALL_DIR" ]] ; then info "Creating DAOS install directory $DAOS_INSTALL_DIR" @@ -196,21 +204,52 @@ if [[ ! -d "$DAOS_INSTALL_DIR" ]] ; then fi fi -cd "$DAOS_SOURCE_DIR" -SCONS_OPTS="-j $JOBS_NB --implicit-deps-changed" -case $CMD in - install) SCONS_OPTS="$SCONS_OPTS --build-deps=yes --config=force" ;; - update) SCONS_OPTS="$SCONS_OPTS --build-deps=no" ;; - *) fatal "Unexpected case" ;; -esac - -info "Building and installing DAOS from source tree $PWD to $DAOS_INSTALL_DIR" -if ! run env MPI_PKG=any "$SCONS_EXE" BUILD_TYPE=debug PREFIX="$DAOS_INSTALL_DIR" install $SCONS_OPTS ; then - fatal "DAOS could not be properly build and/or installed" +if [[ ! -d "$DAOS_VENV_DIR" ]] ; then + info "Creating DAOS python virtualenv directory $DAOS_VENV_DIR" + if ! run mkdir -p "$DAOS_VENV_DIR" ; then + fatal "DAOS python virtualenv directory $DAOS_VENV_DIR could not be created" + fi fi +if [[ ! -f "$DAOS_VENV_DIR/bin/activate" ]] ; then + info "Creating DAOS python virtualenv $DAOS_VENV_DIR" + run $PYTHON_EXE -m venv "$DAOS_VENV_DIR" +fi +info "Installing DAOS python virtualenv $DAOS_VENV_DIR" +source "$DAOS_VENV_DIR/bin/activate" +run $PIP_EXE install --upgrade pip +run $PIP_EXE install -r "$DAOS_SOURCE_DIR/requirements.txt" + +SCONS_OPTS="--directory="$DAOS_SOURCE_DIR" --jobs=$JOBS_NB" + +if "$DAOS_BUILD_DEPS" ; then + info "Building DAOS dependencies from source tree $DAOS_SOURCE_DIR" + if ! run "$SCONS_EXE" BUILD_TYPE="$DAOS_BUILD_TYPE" PREFIX="$DAOS_INSTALL_DIR" $SCONS_OPTS --build-deps=only ; then + fatal "DAOS dependencies could not be properly build" + fi +fi + +info "Building DAOS from source tree $DAOS_SOURCE_DIR" +# NOTE Dependencies will not be build as 'no' is default value of the --build-deps option +if ! run env MPI_PKG=any "$SCONS_EXE" BUILD_TYPE="$DAOS_BUILD_TYPE" PREFIX="$DAOS_INSTALL_DIR" $SCONS_OPTS ; then + fatal "DAOS could not be properly build" +fi + +info "Installing DAOS to $DAOS_INSTALL_DIR" +source "$DAOS_VENV_DIR/bin/activate" +if ! run "$SCONS_EXE" install $SCONS_OPTS ; then + fatal "DAOS could not be properly installed" +fi + +deactivate + info "Finalizing install of ftest setup scripts" -run ln -vfs "$DAOS_SOURCE_DIR/.build_vars.sh" "$DAOS_SOURCE_DIR/utils/sl/.build_vars-Linux.sh" +for file_path in "$DAOS_SOURCE_DIR"/.build_vars* +do + file_name=$(basename $file_path) + rm -fv "$DAOS_INSTALL_DIR/lib/daos/$file_name" + run cp -av "$file_path" "$DAOS_INSTALL_DIR/lib/daos/$file_name" +done info "Finalizing spdk install" for item in $(find "$DAOS_INSTALL_DIR/share/daos" -type f) @@ -242,14 +281,14 @@ run $CLUSH_EXE $CLUSH_OPTS -l root -w $SERVERS_LIST rm -f /etc/ld.so.cache run $CLUSH_EXE $CLUSH_OPTS -l root -w $SERVERS_LIST ldconfig {% endif %} -if [[ $MPICH_PATH ]] ; then +if [[ ${MPICH_PATH:+x} ]] ; then info "Building and installing MPICH from source tree $MPICH_PATH to $DAOS_INSTALL_DIR" if [[ ! -f "$MPICH_PATH/mpich-doxygen.in" ]] ; then fatal "Invalid MPICH directory: path=$MPICH_PATH" fi - if [[ "$CMD" == install && -n "$FORCE_INSTALL" ]] ; then + if "$FORCE_INSTALL" ; then info "Removing old MPICH install" if ! run rm -fr "$MPICH_PATH/build" "$MPICH_PATH/configure" ; then fatal "Old install of MPICH could not be removed" @@ -336,24 +375,24 @@ if [[ $MPICH_PATH ]] ; then mkdir -p /usr/share/modulefiles/mpi ln -fs "$DAOS_INSTALL_DIR/share/modulefiles/mpich-x86_64" /usr/share/modulefiles/mpi/mpich-x86_64 EOF - } | run $CLUSH_EXE $CLUSH_OPTS -l root -w $CLIENTS_LIST bash -s + } | run $CLUSH_EXE $CLUSH_OPTS -l root -w $CLIENTS_LIST -w $SERVERS_LIST bash -s fi -if [[ $HDF5_PATH ]] ; then +if [[ ${HDF5_PATH:+x} ]] ; then info "Building and installing HDF5 from source tree $HDF5_PATH to $DAOS_INSTALL_DIR" if [[ ! -f "$HDF5_PATH/config/libhdf5.pc.in" ]] ; then fatal "Invalid HDF5 directory: path=$HDF5_PATH" fi - if [[ "$CMD" == install && -n "$FORCE_INSTALL" ]] ; then + if "$FORCE_INSTALL" ; then info "Removing old HDF5 install" if ! run rm -fr "$HDF5_PATH/build" "$HDF5_PATH/configure" ; then fatal "Old install of HDF5 could not be removed" fi fi - $MODULE_EXE load mpi/mpich-x86_64 + run $MODULE_EXE load mpi/mpich-x86_64 if [[ ! -f "$HDF5_PATH/configure" ]] ; then pushd "$HDF5_PATH" > /dev/null @@ -382,21 +421,21 @@ if [[ $HDF5_PATH ]] ; then popd > /dev/null fi -if [[ $VOL_DAOS_PATH ]] ; then +if [[ ${VOL_DAOS_PATH:+x} ]] ; then info "Building and installing DAOS HDF5 Volume from source tree $VOL_DAOS_PATH to $DAOS_INSTALL_DIR" if [[ ! -f "$VOL_DAOS_PATH/CMake/hdf5_vol_daos.pc.in" ]] ; then fatal "Invalid DAOS HDF5 Volume directory: path=$VOL_DAOS_PATH" fi - if [[ "$CMD" == install && -n "$FORCE_INSTALL" ]] ; then + if "$FORCE_INSTALL" ; then info "Removing old DAOS HDF5 Volume install" if ! run rm -fr "$VOL_DAOS_PATH/build" ; then fatal "Old install of HDF5 could not be removed" fi fi - $MODULE_EXE load mpi/mpich-x86_64 + run $MODULE_EXE load mpi/mpich-x86_64 run mkdir -p "$VOL_DAOS_PATH/build" pushd "$VOL_DAOS_PATH/build" > /dev/null @@ -428,21 +467,21 @@ if [[ $VOL_DAOS_PATH ]] ; then popd > /dev/null fi -if [[ $MPI_FILE_UTILS_PATH ]] ; then +if [[ ${MPI_FILE_UTILS_PATH:+x} ]] ; then info "Building and installing MPI File Utils from source tree $MPI_FILE_UTILS_PATH to $DAOS_INSTALL_DIR" if [[ ! -f "$MPI_FILE_UTILS_PATH/mpifileutils.spec" ]] ; then fatal "Invalid MPI File Utils directory: path=$MPI_FILE_UTILS_PATH" fi - if [[ "$CMD" == install && -n "$FORCE_INSTALL" ]] ; then + if "$FORCE_INSTALL" ; then info "Removing old MPI File Utils install" if ! run rm -fr "$MPI_FILE_UTILS_PATH/deps" "$MPI_FILE_UTILS_PATH/build" "$MPI_FILE_UTILS_PATH/configure" ; then fatal "Old install of MPI File Utils could not be removed" fi fi - $MODULE_EXE load mpi/mpich-x86_64 + run $MODULE_EXE load mpi/mpich-x86_64 run mkdir -p "$MPI_FILE_UTILS_PATH/deps" "$MPI_FILE_UTILS_PATH/build" @@ -499,21 +538,21 @@ if [[ $MPI_FILE_UTILS_PATH ]] ; then popd > /dev/null fi -if [[ $IOR_PATH ]] ; then +if [[ ${IOR_PATH:+x} ]] ; then info "Building and installing IOR from source tree $IOR_PATH to $DAOS_INSTALL_DIR" if [[ ! -f "$IOR_PATH/src/ior.c" ]] ; then fatal "Invalid IOR directory: path=$IOR_PATH" fi - if [[ "$CMD" == install && -n "$FORCE_INSTALL" ]] ; then + if "$FORCE_INSTALL" ; then info "Removing old IOR install" if ! run rm -fr "$IOR_PATH/build" "$IOR_PATH/configure" ; then fatal "Old install of IOR could not be removed" fi fi - $MODULE_EXE load mpi/mpich-x86_64 + run $MODULE_EXE load mpi/mpich-x86_64 if [[ ! -f "$IOR_PATH/configure" ]] ; then pushd "$IOR_PATH" > /dev/null @@ -539,6 +578,52 @@ if [[ $IOR_PATH ]] ; then popd > /dev/null fi +if [[ ${FIO_PATH:+x} ]] ; then + info "Building and installing FIO from source tree $FIO_PATH to $DAOS_INSTALL_DIR" + + if [[ ! -f "$FIO_PATH/fio.c" ]] ; then + fatal "Invalid FIO: path=$FIO_PATH" + fi + + if "$FORCE_INSTALL" ; then + info "Removing old FIO install" + if ! run rm -fr "$FIO_PATH/build" ; then + fatal "Old install of FIO could not be removed" + fi + fi + + run mkdir -p "$FIO_PATH/build" + pushd "$FIO_PATH/build" > /dev/null + + if [[ ! -f "$FIO_PATH/build/Makefile" ]] ; then + run env CFLAGS="-I$DAOS_INSTALL_DIR/include" LDFLAGS="-L$DAOS_INSTALL_DIR/lib64" ../configure --prefix="$DAOS_INSTALL_DIR" + fi + + run env CFLAGS="-g -O0" make -j $(nproc) install + + popd > /dev/null + + pushd "$FIO_PATH/doc" > /dev/null + + FIO_VENV_DIR="$FIO_PATH/build/virtualenvs" + if [[ ! -f "$FIO_VENV_DIR/bin/activate" ]] ; then + info "Creating FIO python virtualenv $FIO_VENV_DIR" + run $PYTHON_EXE -m venv "$FIO_VENV_DIR" + fi + + info "Installing FIO python virtualenv $FIO_VENV_DIR" + source "$FIO_VENV_DIR/bin/activate" + run $PIP_EXE install --upgrade pip + run $PIP_EXE install sphinx + + run make man + run install -v output/man/fio.1 $DAOS_INSTALL_DIR/man/man1/fio.1 + + deactivate + + popd +fi + info "Updating dynamic linker configuration" {% if "daos_clients" in groups and groups["daos_clients"] | length > 0 %} run $CLUSH_EXE $CLUSH_OPTS -l root -w $SERVERS_LIST -w $CLIENTS_LIST rm -f /etc/ld.so.cache diff --git a/utils/ansible/ftest/vars/Rocky8.yml b/utils/ansible/ftest/vars/Rocky8.yml index aecb5478787..4f15333022c 100644 --- a/utils/ansible/ftest/vars/Rocky8.yml +++ b/utils/ansible/ftest/vars/Rocky8.yml @@ -6,11 +6,14 @@ daos_openmpi_module_path: /usr/share/modulefiles/mpi/openmpi-x86_64 daos_base_deps: rpms: - bash + - capstone - gdb - glibc - jq - lbzip2 - - mercury + - numactl + - numactl-libs + - numatop - platform-python - python36 - systemd @@ -18,27 +21,34 @@ daos_base_deps: daos_dev_deps: rpms: + - argobots-devel + - capstone-devel + - bzip2-devel + - clustershell - cmake - createrepo + - daos-raft-devel - dnf-plugins-core + - fuse3-devel + - gcc-c++ + - gcc-gfortran + - golang - libaec-devel - - meson + - libattr-devel + - libcmocka-devel + - libevent-devel + - libyaml-devel + - openssl-devel + - python3.11 + - python3.11-devel - python3-clustershell + - python3-pip + - python3-wheel - rpmdevtools - rpm-build + - spdk-devel + - valgrind-devel - wget - - libattr-devel - - bzip2-devel - pips: - - "avocado=={{ daos_avocado_version | default(daos_avocado_version_default) }}" - - "avocado-framework=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - "avocado-framework-plugin-glib=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - "avocado-framework-plugin-golang=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - "avocado-framework-plugin-loader-yaml=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - "avocado-framework-plugin-result-html=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - "avocado-framework-plugin-result-upload=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - "avocado-framework-plugin-varianter-yaml-to-mux=={{ daos_avocado_framework_version | default(daos_avocado_framework_version_default) }}" - - pyelftools daos_client_deps: rpms: @@ -48,6 +58,7 @@ daos_client_deps: - libaec - libuuid - lz4-libs + - numactl-devel - systemd - util-linux @@ -56,11 +67,13 @@ daos_server_deps: - compat-hwloc1 - dpdk - ipmctl - - libfabric - libipmctl - libpmemobj - libuuid - lz4-libs - ndctl - - numactl-libs - spdk-tools + +mlnx_deps: + rpms: + - mlnx-ofed-all diff --git a/utils/ansible/ftest/vars/defaults.yml b/utils/ansible/ftest/vars/defaults.yml index ef679445e25..bfde27902e4 100644 --- a/utils/ansible/ftest/vars/defaults.yml +++ b/utils/ansible/ftest/vars/defaults.yml @@ -1,4 +1,4 @@ -# Install dependencies of a development node +# Default variable -daos_avocado_version_default: 2.4.3 -daos_avocado_framework_version_default: 82 +daos_ofi_provider_default: ofi+tcp;ofi_rxm +daos_hugepages_nb_default: 4096