[arch-commits] Commit in ceph/repos/community-staging-x86_64 (58 files)

Evangelos Foutras foutrelis at gemini.archlinux.org
Thu Dec 2 23:23:03 UTC 2021


    Date: Thursday, December 2, 2021 @ 23:23:02
  Author: foutrelis
Revision: 1062933

archrelease: copy trunk to community-staging-x86_64

Added:
  ceph/repos/community-staging-x86_64/PKGBUILD
    (from rev 1062932, ceph/trunk/PKGBUILD)
  ceph/repos/community-staging-x86_64/backport_mgr_disabled_modules_workaround_PR34846.patch
    (from rev 1062932, ceph/trunk/backport_mgr_disabled_modules_workaround_PR34846.patch)
  ceph/repos/community-staging-x86_64/boost-1.67.patch
    (from rev 1062932, ceph/trunk/boost-1.67.patch)
  ceph/repos/community-staging-x86_64/ceph-12.2.4-boost-build-none-options.patch
    (from rev 1062932, ceph/trunk/ceph-12.2.4-boost-build-none-options.patch)
  ceph/repos/community-staging-x86_64/ceph-13.2.0-cflags.patch
    (from rev 1062932, ceph/trunk/ceph-13.2.0-cflags.patch)
  ceph/repos/community-staging-x86_64/ceph-13.2.2-dont-install-sysvinit-script.patch
    (from rev 1062932, ceph/trunk/ceph-13.2.2-dont-install-sysvinit-script.patch)
  ceph/repos/community-staging-x86_64/ceph-14.2.0-cflags.patch
    (from rev 1062932, ceph/trunk/ceph-14.2.0-cflags.patch)
  ceph/repos/community-staging-x86_64/ceph-14.2.0-cython-0.29.patch
    (from rev 1062932, ceph/trunk/ceph-14.2.0-cython-0.29.patch)
  ceph/repos/community-staging-x86_64/ceph-14.2.0-link-crc32-statically.patch
    (from rev 1062932, ceph/trunk/ceph-14.2.0-link-crc32-statically.patch)
  ceph/repos/community-staging-x86_64/ceph-15.2.0-rocksdb-cmake.patch
    (from rev 1062932, ceph/trunk/ceph-15.2.0-rocksdb-cmake.patch)
  ceph/repos/community-staging-x86_64/ceph-15.2.4-system-uring.patch
    (from rev 1062932, ceph/trunk/ceph-15.2.4-system-uring.patch)
  ceph/repos/community-staging-x86_64/ceph-15.2.5-missing-includes.patch
    (from rev 1062932, ceph/trunk/ceph-15.2.5-missing-includes.patch)
  ceph/repos/community-staging-x86_64/ceph.sysusers
    (from rev 1062932, ceph/trunk/ceph.sysusers)
  ceph/repos/community-staging-x86_64/disable-broken-mgr-dashboard-test.patch
    (from rev 1062932, ceph/trunk/disable-broken-mgr-dashboard-test.patch)
  ceph/repos/community-staging-x86_64/disable-empty-readable.sh-test.patch
    (from rev 1062932, ceph/trunk/disable-empty-readable.sh-test.patch)
  ceph/repos/community-staging-x86_64/exclude-frontend-from-mgr-dashboard-cov.patch
    (from rev 1062932, ceph/trunk/exclude-frontend-from-mgr-dashboard-cov.patch)
  ceph/repos/community-staging-x86_64/fix-ceph_disk-python-interpreter.patch
    (from rev 1062932, ceph/trunk/fix-ceph_disk-python-interpreter.patch)
  ceph/repos/community-staging-x86_64/fix-mgr-dashboard-frontend-unittests-dist-stuff.patch
    (from rev 1062932, ceph/trunk/fix-mgr-dashboard-frontend-unittests-dist-stuff.patch)
  ceph/repos/community-staging-x86_64/fix-mgr-dashboard-partial_dict.patch
    (from rev 1062932, ceph/trunk/fix-mgr-dashboard-partial_dict.patch)
  ceph/repos/community-staging-x86_64/fix-python2-paths.patch
    (from rev 1062932, ceph/trunk/fix-python2-paths.patch)
  ceph/repos/community-staging-x86_64/fix-tox-test-commands.patch
    (from rev 1062932, ceph/trunk/fix-tox-test-commands.patch)
  ceph/repos/community-staging-x86_64/fix_snappy_namespace_uint.patch
    (from rev 1062932, ceph/trunk/fix_snappy_namespace_uint.patch)
  ceph/repos/community-staging-x86_64/glibc2.32-strsignal-compat-backported.patch
    (from rev 1062932, ceph/trunk/glibc2.32-strsignal-compat-backported.patch)
  ceph/repos/community-staging-x86_64/mgr-dashboard-update-pylint-to-2.6.0.patch
    (from rev 1062932, ceph/trunk/mgr-dashboard-update-pylint-to-2.6.0.patch)
  ceph/repos/community-staging-x86_64/qa-src-update-mypy-to-0.782.patch
    (from rev 1062932, ceph/trunk/qa-src-update-mypy-to-0.782.patch)
  ceph/repos/community-staging-x86_64/remove-distro-version-detection.patch
    (from rev 1062932, ceph/trunk/remove-distro-version-detection.patch)
  ceph/repos/community-staging-x86_64/suppress-pylint-warnings.patch
    (from rev 1062932, ceph/trunk/suppress-pylint-warnings.patch)
  ceph/repos/community-staging-x86_64/use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch
    (from rev 1062932, ceph/trunk/use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch)
  ceph/repos/community-staging-x86_64/use-threadsafe-death-tests-objectstore-memstore.patch
    (from rev 1062932, ceph/trunk/use-threadsafe-death-tests-objectstore-memstore.patch)
Deleted:
  ceph/repos/community-staging-x86_64/PKGBUILD
  ceph/repos/community-staging-x86_64/backport_mgr_disabled_modules_workaround_PR34846.patch
  ceph/repos/community-staging-x86_64/boost-1.67.patch
  ceph/repos/community-staging-x86_64/ceph-12.2.4-boost-build-none-options.patch
  ceph/repos/community-staging-x86_64/ceph-13.2.0-cflags.patch
  ceph/repos/community-staging-x86_64/ceph-13.2.2-dont-install-sysvinit-script.patch
  ceph/repos/community-staging-x86_64/ceph-14.2.0-cflags.patch
  ceph/repos/community-staging-x86_64/ceph-14.2.0-cython-0.29.patch
  ceph/repos/community-staging-x86_64/ceph-14.2.0-link-crc32-statically.patch
  ceph/repos/community-staging-x86_64/ceph-15.2.0-rocksdb-cmake.patch
  ceph/repos/community-staging-x86_64/ceph-15.2.4-system-uring.patch
  ceph/repos/community-staging-x86_64/ceph-15.2.5-missing-includes.patch
  ceph/repos/community-staging-x86_64/ceph.sysusers
  ceph/repos/community-staging-x86_64/disable-broken-mgr-dashboard-test.patch
  ceph/repos/community-staging-x86_64/disable-empty-readable.sh-test.patch
  ceph/repos/community-staging-x86_64/exclude-frontend-from-mgr-dashboard-cov.patch
  ceph/repos/community-staging-x86_64/fix-ceph_disk-python-interpreter.patch
  ceph/repos/community-staging-x86_64/fix-mgr-dashboard-frontend-unittests-dist-stuff.patch
  ceph/repos/community-staging-x86_64/fix-mgr-dashboard-partial_dict.patch
  ceph/repos/community-staging-x86_64/fix-python2-paths.patch
  ceph/repos/community-staging-x86_64/fix-tox-test-commands.patch
  ceph/repos/community-staging-x86_64/fix_snappy_namespace_uint.patch
  ceph/repos/community-staging-x86_64/glibc2.32-strsignal-compat-backported.patch
  ceph/repos/community-staging-x86_64/mgr-dashboard-update-pylint-to-2.6.0.patch
  ceph/repos/community-staging-x86_64/qa-src-update-mypy-to-0.782.patch
  ceph/repos/community-staging-x86_64/remove-distro-version-detection.patch
  ceph/repos/community-staging-x86_64/suppress-pylint-warnings.patch
  ceph/repos/community-staging-x86_64/use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch
  ceph/repos/community-staging-x86_64/use-threadsafe-death-tests-objectstore-memstore.patch

--------------------------------------------------------+
 PKGBUILD                                               |  706 +++----
 backport_mgr_disabled_modules_workaround_PR34846.patch |  414 ++--
 boost-1.67.patch                                       |   22 
 ceph-12.2.4-boost-build-none-options.patch             |   52 
 ceph-13.2.0-cflags.patch                               |   52 
 ceph-13.2.2-dont-install-sysvinit-script.patch         |   30 
 ceph-14.2.0-cflags.patch                               |   26 
 ceph-14.2.0-cython-0.29.patch                          |   34 
 ceph-14.2.0-link-crc32-statically.patch                |   22 
 ceph-15.2.0-rocksdb-cmake.patch                        |   30 
 ceph-15.2.4-system-uring.patch                         |  132 -
 ceph-15.2.5-missing-includes.patch                     |   24 
 ceph.sysusers                                          |    2 
 disable-broken-mgr-dashboard-test.patch                |   26 
 disable-empty-readable.sh-test.patch                   |   12 
 exclude-frontend-from-mgr-dashboard-cov.patch          |   22 
 fix-ceph_disk-python-interpreter.patch                 |   16 
 fix-mgr-dashboard-frontend-unittests-dist-stuff.patch  |  100 -
 fix-mgr-dashboard-partial_dict.patch                   |   36 
 fix-python2-paths.patch                                |  104 -
 fix-tox-test-commands.patch                            |  320 +--
 fix_snappy_namespace_uint.patch                        |   24 
 glibc2.32-strsignal-compat-backported.patch            |  126 -
 mgr-dashboard-update-pylint-to-2.6.0.patch             | 1342 +++++++--------
 qa-src-update-mypy-to-0.782.patch                      |  130 -
 remove-distro-version-detection.patch                  |   20 
 suppress-pylint-warnings.patch                         |   46 
 use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch  |   70 
 use-threadsafe-death-tests-objectstore-memstore.patch  |   20 
 29 files changed, 1980 insertions(+), 1980 deletions(-)

Deleted: PKGBUILD
===================================================================
--- PKGBUILD	2021-12-02 23:22:39 UTC (rev 1062932)
+++ PKGBUILD	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,353 +0,0 @@
-# Maintainer: Thore Bödecker <foxxx0 at archlinux.org>
-# Contributor: Sébastien "Seblu" Luttringer <seblu at archlinux.org>
-
-pkgbase='ceph'
-pkgname=('ceph' 'ceph-libs' 'ceph-mgr')
-_zstdver=1.5.0
-pkgver=15.2.14
-pkgrel=3
-pkgdesc='Distributed, fault-tolerant storage platform delivering object, block, and file system'
-arch=('x86_64')
-url='https://ceph.com/'
-license=('GPL')
-makedepends=("zstd=${_zstdver}" 'bash' 'bc' 'boost' 'boost-libs' 'bzip2' 'c-ares' 'cmake' 'coreutils' 'coffeescript'
-             'cpio' 'crypto++' 'cryptsetup' 'cunit' 'curl' 'cython' 'expat'
-             'fcgi' 'fontconfig' 'fuse2' 'fuse3' 'fmt' 'gcc' 'gcc-libs' 'git' 'glibc' 'gmock' 'gnutls'
-             'gperf' 'gperftools' 'gptfdisk' 'gtest' 'hwloc' 'inetutils' 'java-runtime'
-             'jq' 'jre11-openjdk-headless' 'junit' 'keyutils' 'leveldb' 'libaio'
-             'libatomic_ops' 'libcap' 'libcap-ng' 'libcroco' 'libcurl-compat'
-             'libedit' 'libgudev' 'libnl' 'librabbitmq-c' 'libtool' 'util-linux'
-             'libuv' 'libxml2' 'librdkafka' 'libpciaccess' 'lsb-release' 'lz4' 'ncurses'
-             'nss' 'numactl' 'oath-toolkit' 'openssl' 'parted' 'pcre' 'pcre2' 'pkgconf' 'protobuf'
-             'procps-ng' 'python-astroid' 'python-attrs' 'python-bcrypt'
-             'python-cheroot' 'python-cherrypy' 'python-coverage' 'python-dateutil'
-             'python-elasticsearch' 'python-flask' 'python-flask-restful'
-             'python-google-api-python-client' 'python-google-auth'
-             'python-google-auth-httplib2' 'python-grpcio' 'python-isort'
-             'python-jinja' 'python-lazy-object-proxy' 'python-mccabe'
-             'python-isodate' 'python-defusedxml' 'python-pkgconfig' 'python-protobuf'
-             'python-lxml' 'python-xmlsec' 'python-yaml'
-             'python-more-itertools' 'python-numpy' 'python-pbr' 'python-pecan'
-             'python-pip' 'python-pluggy' 'python-portend' 'python-prettytable'
-             'python-prometheus_client' 'python-py' 'python-pycparser'
-             'python-pyjwt' 'python-pyopenssl' 'python-pytz' 'python-requests'
-             'python-routes' 'python-scikit-learn' 'python-scipy'
-             'python-setuptools' 'python-six' 'python-sphinx' 'python-tempora'
-             'python-virtualenv' 'python-werkzeug' 'python-wrapt' 'rabbitmq'
-             'sed' 'snappy' 'socat' 'systemd' 'systemd-libs' 'valgrind'
-             'xfsprogs' 'xmlstarlet' 'xmlsec' 'xxhash' 'yaml-cpp' 'yasm' 'zlib' )
-checkdepends=('python-mock' 'python-nose' 'python-pycodestyle' 'python-pylint'
-              'python-pytest' 'python-pytest-cov')
-options=('emptydirs')
-source=(
-  "https://download.ceph.com/tarballs/${pkgbase}-${pkgver}.tar.gz"
-  'ceph.sysusers'
-  "zstd-${_zstdver}.tar.gz::https://github.com/facebook/zstd/archive/v${_zstdver}.tar.gz"
-  #'glibc2.32-strsignal-compat-backported.patch'
-  'ceph-14.2.0-cflags.patch'
-  'ceph-12.2.4-boost-build-none-options.patch'
-  'ceph-13.2.0-cflags.patch'
-  'ceph-13.2.2-dont-install-sysvinit-script.patch'
-  # 'ceph-14.2.0-link-crc32-statically.patch'
-  'ceph-14.2.0-cython-0.29.patch'
-  'ceph-15.2.0-rocksdb-cmake.patch'
-  'ceph-15.2.4-system-uring.patch'
-  # 'ceph-15.2.5-missing-includes.patch'
-  'disable-empty-readable.sh-test.patch'
-  'qa-src-update-mypy-to-0.782.patch'
-  'fix-mgr-dashboard-partial_dict.patch'
-
-  # snappy 1.1.9 removed major parts from their namespace, including the
-  # snappy::uint32 which was an alias for std::uint32_t
-  'fix_snappy_namespace_uint.patch'
-
-  # Add python >= 3.8 workaround logic for incompatible modules
-  # This has been designated for upstream backporting into the octupus (15) and pacific (16) branches.
-  # TODO: check if merged and included in next releases
-  # https://tracker.ceph.com/issues/45147
-  # https://github.com/ceph/ceph/pull/34846
-  # 'backport_mgr_disabled_modules_workaround_PR34846.patch'
-)
-sha512sums=('eacc4dea0d8dfe2753aff78d89324d81c5634a784313c3da8ded778e2734958c216f8c705b25f070d7ba66b559424ad3c47cb68852f66f8c9c83a83ca78ad5a5'
-            '4354001c1abd9a0c385ba7bd529e3638fb6660b6a88d4e49706d4ac21c81b8e829303a20fb5445730bdac18c4865efb10bc809c1cd56d743c12aa9a52e160049'
-            '25b657529a698eec891f92ff4a085d1fd95d2ff938ce52c8a4ff6163eb0b668ec642dd09e0db190652638cd92371006afa01d8e437437762c4097ad301675c33'
-            '9e6bb46d5bbdc5d93f4f026b2a8d6bdb692d9ea6e7018c1bb0188d95ea8574c76238d968b340fd67ddaa3d8183b310e393e3549dc3a63a795fde696413b0ca94'
-            '6ff46a90d76f667fa23be0f9eb1ed2fb7e30af9a2621aec19944d0a22a431a0f5721603c588286e483ff55c14aac920adfccb039c9678a87cc59640dd70367ae'
-            '8ec0d668fefee12d2c7f5b5297dd81fc6a559f5823d069e6395d9b4240110eb8f95049d3054697a459948c1f3784b4450539849cf9d7f3b1aa1c7fbd96c475df'
-            'ea069b75b786c22166c609b127b512802cc5c6e9512d792d7b7b34d276f5b86d57c8c35cfc7b5c855a59c0ba87ba1aabe2ca26da72b26bff46b6ba8410ddb27e'
-            '82c1608928ee669ef60b8930ce82c443152c446e669e7bde9ce32f78571afb19a9620c3818b69ac8cb3ea33e7d7ac40f77c89162c71b19b157336d907fa23e3d'
-            '20256de5c3227caa149f8285bcc90fcbd67be8cefa568fb72ad0d43688f1f62db7c7fc231dfd4ecf2dd11be68bf1ccc284ebbc691a82a26f3968200f12c82097'
-            '8258661e56b5360f4260fdd29b07bac4d415068a112b61ca8c55c529fb1593d8d61a0d59a4eec8f1567b97167c058082198d008f55f8ee701cb46489df5f7823'
-            '2234d005df71b3b6013e6b76ad07a5791e3af7efec5f41c78eb1a9c92a22a67f0be9560be59b52534e90bfe251bcf32c33d5d40163f3f8f7e7420691f0f4a222'
-            '204741c65b8ceeddae0a58a49e2b4249ee7ffc624ce8d9faa6284af198abe63bffb6758e064eeff6d1857be044647f99749a45443e258b35e92cc36b9edeba80'
-            '79e337a78cc4bd9ed8c8ab66831b3efd5a3a34e16d2c73ecedef03d2a34c7ac65ea25641a808913cd2dc2dc0f992fac35822efe4188622add6898dce1e5f13e3'
-            '4b4d0528d909fb735975db290bc8495ee626fc78d68b82b3525326cb69326cfc310c3078c529246f3d76cec590a3a7c4e92950009211590ebfe55583c4f5b71d')
-
-
-# -fno-plt causes linker errors (undefined reference to internal methods)
-# similar issue: https://bugs.archlinux.org/task/54845
-# https://github.com/intel/media-driver/commit/d95d8f7ab7ac94a2e0f4ee6a4b4794898dc2d3b7
-# as of today (2019-07-12) the upstream maintainers do not consider this a bug in their code
-# (IMHO rightfully so) and thus we strip the option here
-export CFLAGS="${CFLAGS/-fno-plt/}"
-export CXXFLAGS="${CXXFLAGS/-fno-plt/}"
-
-
-prepare() {
-  cd "${srcdir}/${pkgbase}-${pkgver}"
-
-  # apply patches from the source array
-  local filename
-  for filename in "${source[@]%%::*}"; do
-    if [[ "${filename}" =~ \.patch$ ]]; then
-      echo "Applying patch ${filename##*/}"
-      patch -p1 -N -i "${srcdir}/${filename##*/}"
-    fi
-  done
-
-  # temporarily disable unsubscriptable-object (buggy on Python 3.9)
-  # https://github.com/PyCQA/pylint/issues/3882
-  sed -i '/^disable=/a\        unsubscriptable-object,' \
-    src/pybind/mgr/dashboard/.pylintrc
-
-  # mypy complains about this but the exception is handled; not sure what's up
-  sed -i 's/from base64 import encodestring$/&  # type: ignore/' \
-    src/pybind/mgr/dashboard/awsauth.py
-
-  # suppress deprecation warnings
-  sed -i '/#ifndef CEPH_CONFIG_H/i#define BOOST_ALLOW_DEPRECATED_HEADERS' \
-    src/common/config.h
-  sed -i '/#ifndef CEPH_TYPES_H/i#define BOOST_ALLOW_DEPRECATED_HEADERS' \
-    src/include/types.h
-
-  # fix boost stuff for system-boost
-  find . -name '*.cmake' -or -name 'CMakeLists.txt' -print0 | xargs --null \
-    sed -r \
-    -e 's|Boost::|boost_|g' \
-    -e 's|Boost_|boost_|g' \
-    -e 's|[Bb]oost_boost|boost_system|g' -i || exit 1
-
-  # remove bundled zstd and replace with newer release
-  rm -rf src/zstd
-  ln -sf "${srcdir}/zstd-${_zstdver}" src/zstd
-
-  # remove tests that require root privileges
-  rm src/test/cli/ceph-authtool/cap*.t
-
-  # disable/remove broken tests
-  sed -i '/add_ceph_test(smoke.sh/d' src/test/CMakeLists.txt
-  sed -i '/add_ceph_test(safe-to-destroy.sh/d' src/test/osd/CMakeLists.txt
-}
-
-build() {
-  cd "${srcdir}/${pkgbase}-${pkgver}"
-
-  # workaround for boost 1.74 -- similar fix exists upstream but I could
-  # not get it to work: https://github.com/ceph/ceph/commit/3d708219092d
-  CPPFLAGS+=' -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT'
-
-  export CFLAGS+=" ${CPPFLAGS}"
-  export CXXFLAGS+=" ${CPPFLAGS}"
-  export PYTHON_VERSION="$(python --version | awk '{print $2}')"
-  export PYTHON_INCLUDE_DIR="$(python -c "from sysconfig import get_path; print(get_path('include'))")"
-  export CMAKE_BUILD_TYPE='RelWithDebInfo'
-  export CMAKE_WARN_UNUSED_CLI=no
-
-  cmake \
-    -B build \
-    -DCMAKE_INSTALL_PREFIX=/usr \
-    -DCMAKE_INSTALL_SYSCONFDIR=/etc \
-    -DCMAKE_INSTALL_SBINDIR=/usr/bin \
-    -DCMAKE_INSTALL_LIBDIR=/usr/lib \
-    -DCEPH_SYSTEMD_ENV_DIR=/etc/default \
-    -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib \
-    -DCMAKE_INSTALL_SYSTEMD_SERVICEDIR=/usr/lib/systemd/system \
-    -DCMAKE_VERBOSE_MAKEFILE=ON \
-    -DENABLE_GIT_VERSION=ON \
-    -DWITH_PYTHON2=OFF \
-    -DWITH_PYTHON3="${PYTHON_VERSION}" \
-    -DMGR_PYTHON_VERSION=3 \
-    -DPYTHON_INCLUDE_DIR="${PYTHON_INCLUDE_DIR:?}" \
-    -DWITH_BABELTRACE=OFF \
-    -DWITH_LTTNG=OFF \
-    -DWITH_OPENLDAP=OFF \
-    -DWITH_RDMA=OFF \
-    -DWITH_OCF=OFF \
-    -DWITH_DPDK=OFF \
-    -DWITH_SPDK=OFF \
-    -DWITH_CEPHFS=ON \
-    -DWITH_CEPHFS_JAVA=ON \
-    -DWITH_CEPHFS_SHELL=ON \
-    -DWITH_FUSE=ON \
-    -DWITH_LZ4=ON \
-    -DWITH_XFS=ON \
-    -DWITH_MGR=ON \
-    -DWITH_MGR_DASHBOARD_FRONTEND=ON \
-    -DDASHBOARD_FRONTEND_LANGS="ALL" \
-    -DWITH_RADOSGW=ON \
-    -DWITH_RADOSGW_FCGI_FRONTEND=OFF \
-    -DWITH_RADOSGW_BEAST_FRONTEND=ON \
-    -DWITH_RADOSGW_BEAST_OPENSSL=ON \
-    -DWITH_RADOSGW_AMQP_ENDPOINT=OFF \
-    -DWITH_SYSTEMD=ON \
-    -DWITH_SYSTEM_BOOST=ON \
-    -DWITH_BOOST_CONTEXT=ON \
-    -DWITH_SYSTEM_GTEST=OFF \
-    -DWITH_SYSTEM_NPM=OFF \
-    -DENABLE_SHARED=ON \
-    -DWITH_TESTS=ON \
-    -Wno-dev
-
-  VERBOSE=1 make -C build all
-}
-
-###
-### testsuite currently broken, needs some debugging
-###
-# check() {
-#   cd "${srcdir}/${pkgbase}-${pkgver}"
-# 
-#   export CTEST_PARALLEL_LEVEL=8
-#   export CTEST_OUTPUT_ON_FAILURE=1
-#   VERBOSE=1 make -C build check
-# 
-#   # sometimes processes are not properly terminated...
-#   for process in ceph-mon ceph-mgr ceph-osd; do
-#     pkill -9 "${process}" || true
-#   done
-# }
-
-package_ceph-libs() {
-  depends=('boost-libs' 'curl' 'glibc' 'keyutils' 'libutil-linux' 'bzip2' 'lz4' 'nss'
-           'oath-toolkit' 'python' 'snappy' 'systemd-libs' 'fmt')
-
-  cd "${srcdir}/${pkgbase}-${pkgver}"
-
-  # main install
-  VERBOSE=1 make DESTDIR="${pkgdir}" -C build install
-
-  # remove stuff that goes into the ceph package
-  rm -rf "${pkgdir}"/usr/lib/{ceph/mgr,systemd,sysusers.d,tmpfiles.d}
-  rm -rf "${pkgdir}/usr/share"
-  rm -rf "${pkgdir}/usr/sbin"
-  rm -rf "${pkgdir}/usr/bin"
-  rm -rf "${pkgdir}/etc"
-  rm -rf "${pkgdir}/var"
-}
-
-package_ceph() {
-  depends=("ceph-libs=${pkgver}-${pkgrel}"
-           'boost-libs' 'curl' 'fuse2' 'fuse3' 'fmt' 'glibc' 'gperftools' 'java-runtime'
-           'keyutils' 'leveldb' 'libaio' 'libutil-linux' 'librdkafka'
-           'lsb-release' 'ncurses'
-           'nss' 'oath-toolkit' 'python' 'python-bcrypt' 'python-setuptools'
-           'python-prettytable' 'python-cmd2' 'python-dateutil' 'snappy' 'sudo' 'systemd-libs'
-           'python-flask' 'python-pecan' 'python-pyopenssl' 'python-requests' 'python-werkzeug' 'xfsprogs'
-           'python-yaml' 'python-pyaml')
-
-  cd "${srcdir}/${pkgbase}-${pkgver}"
-
-  # main install
-  VERBOSE=1 make DESTDIR="${pkgdir}" -C build install
-
-  # fix sbin dir (cmake opt seems to have no effect)
-  mv "${pkgdir}"/usr/sbin/* "${pkgdir}/usr/bin/"
-  rm -rf "${pkgdir}/usr/sbin"
-
-  # remove stuff that is in the ceph-libs package
-  find "${pkgdir}/usr/lib" -maxdepth 1 -type f -delete
-  find "${pkgdir}/usr/lib" -maxdepth 1 -type l -delete
-  find "${pkgdir}/usr/lib/ceph" -maxdepth 1 -type f -delete
-  find "${pkgdir}/usr/lib/ceph" -maxdepth 1 -type l -delete
-  rm -rf "${pkgdir}"/usr/lib/{ceph/{compressor,crypto,erasure-code},rados-classes}
-  rm -rf "${pkgdir}"/usr/lib/python*
-  rm -rf "${pkgdir}/usr/include"
-
-  # remove stuff that is in the ceph-mgr package
-  rm -rf "${pkgdir}"/usr/{bin/ceph-mgr,share/ceph/mgr,lib/systemd/system/ceph-mgr*}
-
-  # remove _test_ binaries from the package, not needed
-  find "${pkgdir}/usr/bin" -maxdepth 1 -type f -iname 'ceph_test_*' -delete
-
-  # install tmpfiles.d and sysusers.d stuff
-  install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/systemd/ceph.tmpfiles.d" \
-    "${pkgdir}/usr/lib/tmpfiles.d/${pkgbase}.conf"
-  install -Dm644 "${srcdir}/ceph.sysusers" \
-    "${pkgdir}/usr/lib/sysusers.d/${pkgbase}.conf"
-
-  # remove debian init script
-  rm -rf "${pkgdir}/etc/init.d"
-
-  # remove drop.ceph.com ssh stuff
-  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com
-  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com.pub
-  rm -f "${pkgdir}"/usr/share/ceph/known_hosts_drop.ceph.com
-
-  # fix bash completions path
-  install -d -m 755 "${pkgdir}/usr/share/bash-completion"
-  mv "${pkgdir}"/{etc/bash_completion.d,usr/share/bash-completion/completions}
-
-  # fix EnvironmentFile location in systemd service files
-  sed -i 's|/etc/sysconfig/|/etc/conf.d/|g' "${pkgdir}"/usr/lib/systemd/system/*.service
-
-  # prepare some paths and set correct permissions
-  install -D -d -m750 -o   0 -g 340 "${pkgdir}/etc/ceph"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/log/ceph"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-mds"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-osd"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-rgw"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mon"
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/osd"
-}
-
-package_ceph-mgr() {
-  depends=("ceph=${pkgver}-${pkgrel}" "ceph-libs=${pkgver}-${pkgrel}"
-           'bash' 'boost-libs' 'coffeescript' 'curl' 'gperftools' 'nodejs' 'nss'
-           'python' 'python-cherrypy' 'python-flask-restful' 'python-pecan'
-           'python-pyjwt' 'python-routes' 'python-jsonpatch' 'python-more-itertools' 'python-numpy'
-           'python-scipy' 'python-six')
-  optdepends=('python-influxdb: influx module'
-              'python-kubernetes: rook module'
-              'python-prometheus_client: prometheus module'
-              'python-remoto: ssh module')
-  conflicts=('ceph<14.2.1-1')
-
-  cd "${srcdir}/${pkgbase}-${pkgver}"
-
-  # main install
-  VERBOSE=1 make DESTDIR="${pkgdir}" -C build install
-
-  # fix sbin dir (cmake opt seems to have no effect)
-  mv "${pkgdir}"/usr/sbin/* "${pkgdir}/usr/bin/"
-  rm -rf "${pkgdir}/usr/sbin"
-
-  # remove everything except mgr related stuff, rest is in ceph/ceph-libs
-  rm -rf "${pkgdir}"/usr/lib/{ceph/{compressor,crypto,erasure-code},rados-classes}
-  rm -rf "${pkgdir}/usr/include"
-  find "${pkgdir}/usr/bin" -maxdepth 1 -type f -not -name 'ceph-mgr' -delete
-  find "${pkgdir}"/usr/lib/systemd/system -maxdepth 1 -type f -not -iname 'ceph-mgr*' -delete
-  find "${pkgdir}"/usr/lib -maxdepth 1 -type f -delete
-  find "${pkgdir}"/usr/lib -maxdepth 1 -type l -delete
-  rm -rf "${pkgdir}"/etc
-  rm -rf "${pkgdir}"/var
-  rm -rf "${pkgdir}"/usr/lib/{ceph,sysusers.d,tmpfiles.d}
-  rm -rf "${pkgdir}"/usr/lib/python*
-  rm -rf "${pkgdir}"/usr/share/{bash-completion,doc,java,man}
-
-  # remove debian init script
-  rm -rf "${pkgdir}/etc/init.d"
-
-  # remove drop.ceph.com ssh stuff
-  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com
-  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com.pub
-  rm -f "${pkgdir}"/usr/share/ceph/known_hosts_drop.ceph.com
-
-  # fix EnvironmentFile location in systemd service files
-  sed -i 's|/etc/sysconfig/|/etc/conf.d/|g' "${pkgdir}"/usr/lib/systemd/system/*.service
-
-  # prepare some paths and set correct permissions
-  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mgr"
-}
-
-# vim:set ts=2 sw=2 et:

Copied: ceph/repos/community-staging-x86_64/PKGBUILD (from rev 1062932, ceph/trunk/PKGBUILD)
===================================================================
--- PKGBUILD	                        (rev 0)
+++ PKGBUILD	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,353 @@
+# Maintainer: Thore Bödecker <foxxx0 at archlinux.org>
+# Contributor: Sébastien "Seblu" Luttringer <seblu at archlinux.org>
+
+pkgbase='ceph'
+pkgname=('ceph' 'ceph-libs' 'ceph-mgr')
+_zstdver=1.5.0
+pkgver=15.2.14
+pkgrel=4
+pkgdesc='Distributed, fault-tolerant storage platform delivering object, block, and file system'
+arch=('x86_64')
+url='https://ceph.com/'
+license=('GPL')
+makedepends=("zstd=${_zstdver}" 'bash' 'bc' 'boost' 'boost-libs' 'bzip2' 'c-ares' 'cmake' 'coreutils' 'coffeescript'
+             'cpio' 'crypto++' 'cryptsetup' 'cunit' 'curl' 'cython' 'expat'
+             'fcgi' 'fontconfig' 'fuse2' 'fuse3' 'fmt' 'gcc' 'gcc-libs' 'git' 'glibc' 'gmock' 'gnutls'
+             'gperf' 'gperftools' 'gptfdisk' 'gtest' 'hwloc' 'inetutils' 'java-runtime'
+             'jq' 'jre11-openjdk-headless' 'junit' 'keyutils' 'leveldb' 'libaio'
+             'libatomic_ops' 'libcap' 'libcap-ng' 'libcroco' 'libcurl-compat'
+             'libedit' 'libgudev' 'libnl' 'librabbitmq-c' 'libtool' 'util-linux'
+             'libuv' 'libxml2' 'librdkafka' 'libpciaccess' 'lsb-release' 'lz4' 'ncurses'
+             'nss' 'numactl' 'oath-toolkit' 'openssl' 'parted' 'pcre' 'pcre2' 'pkgconf' 'protobuf'
+             'procps-ng' 'python-astroid' 'python-attrs' 'python-bcrypt'
+             'python-cheroot' 'python-cherrypy' 'python-coverage' 'python-dateutil'
+             'python-elasticsearch' 'python-flask' 'python-flask-restful'
+             'python-google-api-python-client' 'python-google-auth'
+             'python-google-auth-httplib2' 'python-grpcio' 'python-isort'
+             'python-jinja' 'python-lazy-object-proxy' 'python-mccabe'
+             'python-isodate' 'python-defusedxml' 'python-pkgconfig' 'python-protobuf'
+             'python-lxml' 'python-xmlsec' 'python-yaml'
+             'python-more-itertools' 'python-numpy' 'python-pbr' 'python-pecan'
+             'python-pip' 'python-pluggy' 'python-portend' 'python-prettytable'
+             'python-prometheus_client' 'python-py' 'python-pycparser'
+             'python-pyjwt' 'python-pyopenssl' 'python-pytz' 'python-requests'
+             'python-routes' 'python-scikit-learn' 'python-scipy'
+             'python-setuptools' 'python-six' 'python-sphinx' 'python-tempora'
+             'python-virtualenv' 'python-werkzeug' 'python-wrapt' 'rabbitmq'
+             'sed' 'snappy' 'socat' 'systemd' 'systemd-libs' 'valgrind'
+             'xfsprogs' 'xmlstarlet' 'xmlsec' 'xxhash' 'yaml-cpp' 'yasm' 'zlib' )
+checkdepends=('python-mock' 'python-nose' 'python-pycodestyle' 'python-pylint'
+              'python-pytest' 'python-pytest-cov')
+options=('emptydirs')
+source=(
+  "https://download.ceph.com/tarballs/${pkgbase}-${pkgver}.tar.gz"
+  'ceph.sysusers'
+  "zstd-${_zstdver}.tar.gz::https://github.com/facebook/zstd/archive/v${_zstdver}.tar.gz"
+  #'glibc2.32-strsignal-compat-backported.patch'
+  'ceph-14.2.0-cflags.patch'
+  'ceph-12.2.4-boost-build-none-options.patch'
+  'ceph-13.2.0-cflags.patch'
+  'ceph-13.2.2-dont-install-sysvinit-script.patch'
+  # 'ceph-14.2.0-link-crc32-statically.patch'
+  'ceph-14.2.0-cython-0.29.patch'
+  'ceph-15.2.0-rocksdb-cmake.patch'
+  'ceph-15.2.4-system-uring.patch'
+  # 'ceph-15.2.5-missing-includes.patch'
+  'disable-empty-readable.sh-test.patch'
+  'qa-src-update-mypy-to-0.782.patch'
+  'fix-mgr-dashboard-partial_dict.patch'
+
+  # snappy 1.1.9 removed major parts from their namespace, including the
+  # snappy::uint32 which was an alias for std::uint32_t
+  'fix_snappy_namespace_uint.patch'
+
+  # Add python >= 3.8 workaround logic for incompatible modules
+  # This has been designated for upstream backporting into the octupus (15) and pacific (16) branches.
+  # TODO: check if merged and included in next releases
+  # https://tracker.ceph.com/issues/45147
+  # https://github.com/ceph/ceph/pull/34846
+  # 'backport_mgr_disabled_modules_workaround_PR34846.patch'
+)
+sha512sums=('eacc4dea0d8dfe2753aff78d89324d81c5634a784313c3da8ded778e2734958c216f8c705b25f070d7ba66b559424ad3c47cb68852f66f8c9c83a83ca78ad5a5'
+            '4354001c1abd9a0c385ba7bd529e3638fb6660b6a88d4e49706d4ac21c81b8e829303a20fb5445730bdac18c4865efb10bc809c1cd56d743c12aa9a52e160049'
+            '25b657529a698eec891f92ff4a085d1fd95d2ff938ce52c8a4ff6163eb0b668ec642dd09e0db190652638cd92371006afa01d8e437437762c4097ad301675c33'
+            '9e6bb46d5bbdc5d93f4f026b2a8d6bdb692d9ea6e7018c1bb0188d95ea8574c76238d968b340fd67ddaa3d8183b310e393e3549dc3a63a795fde696413b0ca94'
+            '6ff46a90d76f667fa23be0f9eb1ed2fb7e30af9a2621aec19944d0a22a431a0f5721603c588286e483ff55c14aac920adfccb039c9678a87cc59640dd70367ae'
+            '8ec0d668fefee12d2c7f5b5297dd81fc6a559f5823d069e6395d9b4240110eb8f95049d3054697a459948c1f3784b4450539849cf9d7f3b1aa1c7fbd96c475df'
+            'ea069b75b786c22166c609b127b512802cc5c6e9512d792d7b7b34d276f5b86d57c8c35cfc7b5c855a59c0ba87ba1aabe2ca26da72b26bff46b6ba8410ddb27e'
+            '82c1608928ee669ef60b8930ce82c443152c446e669e7bde9ce32f78571afb19a9620c3818b69ac8cb3ea33e7d7ac40f77c89162c71b19b157336d907fa23e3d'
+            '20256de5c3227caa149f8285bcc90fcbd67be8cefa568fb72ad0d43688f1f62db7c7fc231dfd4ecf2dd11be68bf1ccc284ebbc691a82a26f3968200f12c82097'
+            '8258661e56b5360f4260fdd29b07bac4d415068a112b61ca8c55c529fb1593d8d61a0d59a4eec8f1567b97167c058082198d008f55f8ee701cb46489df5f7823'
+            '2234d005df71b3b6013e6b76ad07a5791e3af7efec5f41c78eb1a9c92a22a67f0be9560be59b52534e90bfe251bcf32c33d5d40163f3f8f7e7420691f0f4a222'
+            '204741c65b8ceeddae0a58a49e2b4249ee7ffc624ce8d9faa6284af198abe63bffb6758e064eeff6d1857be044647f99749a45443e258b35e92cc36b9edeba80'
+            '79e337a78cc4bd9ed8c8ab66831b3efd5a3a34e16d2c73ecedef03d2a34c7ac65ea25641a808913cd2dc2dc0f992fac35822efe4188622add6898dce1e5f13e3'
+            '4b4d0528d909fb735975db290bc8495ee626fc78d68b82b3525326cb69326cfc310c3078c529246f3d76cec590a3a7c4e92950009211590ebfe55583c4f5b71d')
+
+
+# -fno-plt causes linker errors (undefined reference to internal methods)
+# similar issue: https://bugs.archlinux.org/task/54845
+# https://github.com/intel/media-driver/commit/d95d8f7ab7ac94a2e0f4ee6a4b4794898dc2d3b7
+# as of today (2019-07-12) the upstream maintainers do not consider this a bug in their code
+# (IMHO rightfully so) and thus we strip the option here
+export CFLAGS="${CFLAGS/-fno-plt/}"
+export CXXFLAGS="${CXXFLAGS/-fno-plt/}"
+
+
+prepare() {
+  cd "${srcdir}/${pkgbase}-${pkgver}"
+
+  # apply patches from the source array
+  local filename
+  for filename in "${source[@]%%::*}"; do
+    if [[ "${filename}" =~ \.patch$ ]]; then
+      echo "Applying patch ${filename##*/}"
+      patch -p1 -N -i "${srcdir}/${filename##*/}"
+    fi
+  done
+
+  # temporarily disable unsubscriptable-object (buggy on Python 3.9)
+  # https://github.com/PyCQA/pylint/issues/3882
+  sed -i '/^disable=/a\        unsubscriptable-object,' \
+    src/pybind/mgr/dashboard/.pylintrc
+
+  # mypy complains about this but the exception is handled; not sure what's up
+  sed -i 's/from base64 import encodestring$/&  # type: ignore/' \
+    src/pybind/mgr/dashboard/awsauth.py
+
+  # suppress deprecation warnings
+  sed -i '/#ifndef CEPH_CONFIG_H/i#define BOOST_ALLOW_DEPRECATED_HEADERS' \
+    src/common/config.h
+  sed -i '/#ifndef CEPH_TYPES_H/i#define BOOST_ALLOW_DEPRECATED_HEADERS' \
+    src/include/types.h
+
+  # fix boost stuff for system-boost
+  find . -name '*.cmake' -or -name 'CMakeLists.txt' -print0 | xargs --null \
+    sed -r \
+    -e 's|Boost::|boost_|g' \
+    -e 's|Boost_|boost_|g' \
+    -e 's|[Bb]oost_boost|boost_system|g' -i || exit 1
+
+  # remove bundled zstd and replace with newer release
+  rm -rf src/zstd
+  ln -sf "${srcdir}/zstd-${_zstdver}" src/zstd
+
+  # remove tests that require root privileges
+  rm src/test/cli/ceph-authtool/cap*.t
+
+  # disable/remove broken tests
+  sed -i '/add_ceph_test(smoke.sh/d' src/test/CMakeLists.txt
+  sed -i '/add_ceph_test(safe-to-destroy.sh/d' src/test/osd/CMakeLists.txt
+}
+
+build() {
+  cd "${srcdir}/${pkgbase}-${pkgver}"
+
+  # workaround for boost 1.74 -- similar fix exists upstream but I could
+  # not get it to work: https://github.com/ceph/ceph/commit/3d708219092d
+  CPPFLAGS+=' -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT'
+
+  export CFLAGS+=" ${CPPFLAGS}"
+  export CXXFLAGS+=" ${CPPFLAGS}"
+  export PYTHON_VERSION="$(python --version | awk '{print $2}')"
+  export PYTHON_INCLUDE_DIR="$(python -c "from sysconfig import get_path; print(get_path('include'))")"
+  export CMAKE_BUILD_TYPE='RelWithDebInfo'
+  export CMAKE_WARN_UNUSED_CLI=no
+
+  cmake \
+    -B build \
+    -DCMAKE_INSTALL_PREFIX=/usr \
+    -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+    -DCMAKE_INSTALL_SBINDIR=/usr/bin \
+    -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+    -DCEPH_SYSTEMD_ENV_DIR=/etc/default \
+    -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib \
+    -DCMAKE_INSTALL_SYSTEMD_SERVICEDIR=/usr/lib/systemd/system \
+    -DCMAKE_VERBOSE_MAKEFILE=ON \
+    -DENABLE_GIT_VERSION=ON \
+    -DWITH_PYTHON2=OFF \
+    -DWITH_PYTHON3="${PYTHON_VERSION}" \
+    -DMGR_PYTHON_VERSION=3 \
+    -DPYTHON_INCLUDE_DIR="${PYTHON_INCLUDE_DIR:?}" \
+    -DWITH_BABELTRACE=OFF \
+    -DWITH_LTTNG=OFF \
+    -DWITH_OPENLDAP=OFF \
+    -DWITH_RDMA=OFF \
+    -DWITH_OCF=OFF \
+    -DWITH_DPDK=OFF \
+    -DWITH_SPDK=OFF \
+    -DWITH_CEPHFS=ON \
+    -DWITH_CEPHFS_JAVA=ON \
+    -DWITH_CEPHFS_SHELL=ON \
+    -DWITH_FUSE=ON \
+    -DWITH_LZ4=ON \
+    -DWITH_XFS=ON \
+    -DWITH_MGR=ON \
+    -DWITH_MGR_DASHBOARD_FRONTEND=ON \
+    -DDASHBOARD_FRONTEND_LANGS="ALL" \
+    -DWITH_RADOSGW=ON \
+    -DWITH_RADOSGW_FCGI_FRONTEND=OFF \
+    -DWITH_RADOSGW_BEAST_FRONTEND=ON \
+    -DWITH_RADOSGW_BEAST_OPENSSL=ON \
+    -DWITH_RADOSGW_AMQP_ENDPOINT=OFF \
+    -DWITH_SYSTEMD=ON \
+    -DWITH_SYSTEM_BOOST=ON \
+    -DWITH_BOOST_CONTEXT=ON \
+    -DWITH_SYSTEM_GTEST=OFF \
+    -DWITH_SYSTEM_NPM=OFF \
+    -DENABLE_SHARED=ON \
+    -DWITH_TESTS=ON \
+    -Wno-dev
+
+  VERBOSE=1 make -C build all
+}
+
+###
+### testsuite currently broken, needs some debugging
+###
+# check() {
+#   cd "${srcdir}/${pkgbase}-${pkgver}"
+# 
+#   export CTEST_PARALLEL_LEVEL=8
+#   export CTEST_OUTPUT_ON_FAILURE=1
+#   VERBOSE=1 make -C build check
+# 
+#   # sometimes processes are not properly terminated...
+#   for process in ceph-mon ceph-mgr ceph-osd; do
+#     pkill -9 "${process}" || true
+#   done
+# }
+
+package_ceph-libs() {
+  depends=('boost-libs' 'curl' 'glibc' 'keyutils' 'libutil-linux' 'bzip2' 'lz4' 'nss'
+           'oath-toolkit' 'python' 'snappy' 'systemd-libs' 'fmt')
+
+  cd "${srcdir}/${pkgbase}-${pkgver}"
+
+  # main install
+  VERBOSE=1 make DESTDIR="${pkgdir}" -C build install
+
+  # remove stuff that goes into the ceph package
+  rm -rf "${pkgdir}"/usr/lib/{ceph/mgr,systemd,sysusers.d,tmpfiles.d}
+  rm -rf "${pkgdir}/usr/share"
+  rm -rf "${pkgdir}/usr/sbin"
+  rm -rf "${pkgdir}/usr/bin"
+  rm -rf "${pkgdir}/etc"
+  rm -rf "${pkgdir}/var"
+}
+
+package_ceph() {
+  depends=("ceph-libs=${pkgver}-${pkgrel}"
+           'boost-libs' 'curl' 'fuse2' 'fuse3' 'fmt' 'glibc' 'gperftools' 'java-runtime'
+           'keyutils' 'leveldb' 'libaio' 'libutil-linux' 'librdkafka'
+           'lsb-release' 'ncurses'
+           'nss' 'oath-toolkit' 'python' 'python-bcrypt' 'python-setuptools'
+           'python-prettytable' 'python-cmd2' 'python-dateutil' 'snappy' 'sudo' 'systemd-libs'
+           'python-flask' 'python-pecan' 'python-pyopenssl' 'python-requests' 'python-werkzeug' 'xfsprogs'
+           'python-yaml' 'python-pyaml')
+
+  cd "${srcdir}/${pkgbase}-${pkgver}"
+
+  # main install
+  VERBOSE=1 make DESTDIR="${pkgdir}" -C build install
+
+  # fix sbin dir (cmake opt seems to have no effect)
+  mv "${pkgdir}"/usr/sbin/* "${pkgdir}/usr/bin/"
+  rm -rf "${pkgdir}/usr/sbin"
+
+  # remove stuff that is in the ceph-libs package
+  find "${pkgdir}/usr/lib" -maxdepth 1 -type f -delete
+  find "${pkgdir}/usr/lib" -maxdepth 1 -type l -delete
+  find "${pkgdir}/usr/lib/ceph" -maxdepth 1 -type f -delete
+  find "${pkgdir}/usr/lib/ceph" -maxdepth 1 -type l -delete
+  rm -rf "${pkgdir}"/usr/lib/{ceph/{compressor,crypto,erasure-code},rados-classes}
+  rm -rf "${pkgdir}"/usr/lib/python*
+  rm -rf "${pkgdir}/usr/include"
+
+  # remove stuff that is in the ceph-mgr package
+  rm -rf "${pkgdir}"/usr/{bin/ceph-mgr,share/ceph/mgr,lib/systemd/system/ceph-mgr*}
+
+  # remove _test_ binaries from the package, not needed
+  find "${pkgdir}/usr/bin" -maxdepth 1 -type f -iname 'ceph_test_*' -delete
+
+  # install tmpfiles.d and sysusers.d stuff
+  install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/systemd/ceph.tmpfiles.d" \
+    "${pkgdir}/usr/lib/tmpfiles.d/${pkgbase}.conf"
+  install -Dm644 "${srcdir}/ceph.sysusers" \
+    "${pkgdir}/usr/lib/sysusers.d/${pkgbase}.conf"
+
+  # remove debian init script
+  rm -rf "${pkgdir}/etc/init.d"
+
+  # remove drop.ceph.com ssh stuff
+  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com
+  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com.pub
+  rm -f "${pkgdir}"/usr/share/ceph/known_hosts_drop.ceph.com
+
+  # fix bash completions path
+  install -d -m 755 "${pkgdir}/usr/share/bash-completion"
+  mv "${pkgdir}"/{etc/bash_completion.d,usr/share/bash-completion/completions}
+
+  # fix EnvironmentFile location in systemd service files
+  sed -i 's|/etc/sysconfig/|/etc/conf.d/|g' "${pkgdir}"/usr/lib/systemd/system/*.service
+
+  # prepare some paths and set correct permissions
+  install -D -d -m750 -o   0 -g 340 "${pkgdir}/etc/ceph"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/log/ceph"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-mds"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-osd"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-rgw"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mon"
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/osd"
+}
+
+package_ceph-mgr() {
+  depends=("ceph=${pkgver}-${pkgrel}" "ceph-libs=${pkgver}-${pkgrel}"
+           'bash' 'boost-libs' 'coffeescript' 'curl' 'gperftools' 'nodejs' 'nss'
+           'python' 'python-cherrypy' 'python-flask-restful' 'python-pecan'
+           'python-pyjwt' 'python-routes' 'python-jsonpatch' 'python-more-itertools' 'python-numpy'
+           'python-scipy' 'python-six')
+  optdepends=('python-influxdb: influx module'
+              'python-kubernetes: rook module'
+              'python-prometheus_client: prometheus module'
+              'python-remoto: ssh module')
+  conflicts=('ceph<14.2.1-1')
+
+  cd "${srcdir}/${pkgbase}-${pkgver}"
+
+  # main install
+  VERBOSE=1 make DESTDIR="${pkgdir}" -C build install
+
+  # fix sbin dir (cmake opt seems to have no effect)
+  mv "${pkgdir}"/usr/sbin/* "${pkgdir}/usr/bin/"
+  rm -rf "${pkgdir}/usr/sbin"
+
+  # remove everything except mgr related stuff, rest is in ceph/ceph-libs
+  rm -rf "${pkgdir}"/usr/lib/{ceph/{compressor,crypto,erasure-code},rados-classes}
+  rm -rf "${pkgdir}/usr/include"
+  find "${pkgdir}/usr/bin" -maxdepth 1 -type f -not -name 'ceph-mgr' -delete
+  find "${pkgdir}"/usr/lib/systemd/system -maxdepth 1 -type f -not -iname 'ceph-mgr*' -delete
+  find "${pkgdir}"/usr/lib -maxdepth 1 -type f -delete
+  find "${pkgdir}"/usr/lib -maxdepth 1 -type l -delete
+  rm -rf "${pkgdir}"/etc
+  rm -rf "${pkgdir}"/var
+  rm -rf "${pkgdir}"/usr/lib/{ceph,sysusers.d,tmpfiles.d}
+  rm -rf "${pkgdir}"/usr/lib/python*
+  rm -rf "${pkgdir}"/usr/share/{bash-completion,doc,java,man}
+
+  # remove debian init script
+  rm -rf "${pkgdir}/etc/init.d"
+
+  # remove drop.ceph.com ssh stuff
+  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com
+  rm -f "${pkgdir}"/usr/share/ceph/id_rsa_drop.ceph.com.pub
+  rm -f "${pkgdir}"/usr/share/ceph/known_hosts_drop.ceph.com
+
+  # fix EnvironmentFile location in systemd service files
+  sed -i 's|/etc/sysconfig/|/etc/conf.d/|g' "${pkgdir}"/usr/lib/systemd/system/*.service
+
+  # prepare some paths and set correct permissions
+  install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mgr"
+}
+
+# vim:set ts=2 sw=2 et:

Deleted: backport_mgr_disabled_modules_workaround_PR34846.patch
===================================================================
--- backport_mgr_disabled_modules_workaround_PR34846.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ backport_mgr_disabled_modules_workaround_PR34846.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,207 +0,0 @@
-From 40d06ce623f19172721a2f1d5b4f4f8b642a3077 Mon Sep 17 00:00:00 2001
-From: Kefu Chai <kchai at redhat.com>
-Date: Thu, 30 Apr 2020 10:43:01 +0800
-Subject: [PATCH] mgr/PyModuleRegistry: probe modules using std::filesystem
-
-for better readability
-
-Signed-off-by: Kefu Chai <kchai at redhat.com>
----
- src/mgr/PyModuleRegistry.cc | 43 +++++++++++++++++--------------------
- 1 file changed, 20 insertions(+), 23 deletions(-)
-
-diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc
-index 440f7c8bafc1e..466da5d404964 100644
---- a/src/mgr/PyModuleRegistry.cc
-+++ b/src/mgr/PyModuleRegistry.cc
-@@ -11,6 +11,17 @@
-  * Foundation.  See file COPYING.
-  */
- 
-+#include "PyModuleRegistry.h"
-+
-+#if __has_include(<filesystem>)
-+#include <filesystem>
-+namespace fs = std::filesystem;
-+#elif __has_include(<experimental/filesystem>)
-+#include <experimental/filesystem>
-+namespace fs = std::experimental::filesystem;
-+#else
-+#error std::filesystem not available!
-+#endif
- 
- #include "include/stringify.h"
- #include "common/errno.h"
-@@ -24,8 +35,6 @@
- 
- #include "ActivePyModules.h"
- 
--#include "PyModuleRegistry.h"
--
- #define dout_context g_ceph_context
- #define dout_subsys ceph_subsys_mgr
- 
-@@ -258,29 +267,17 @@ void PyModuleRegistry::shutdown()
- 
- std::set<std::string> PyModuleRegistry::probe_modules(const std::string &path) const
- {
--  DIR *dir = opendir(path.c_str());
--  if (!dir) {
--    return {};
--  }
--
--  std::set<std::string> modules_out;
--  struct dirent *entry = NULL;
--  while ((entry = readdir(dir)) != NULL) {
--    string n(entry->d_name);
--    string fn = path + "/" + n;
--    struct stat st;
--    int r = ::stat(fn.c_str(), &st);
--    if (r == 0 && S_ISDIR(st.st_mode)) {
--      string initfn = fn + "/module.py";
--      r = ::stat(initfn.c_str(), &st);
--      if (r == 0) {
--	modules_out.insert(n);
--      }
-+  std::set<std::string> modules;
-+  for (const auto& entry: fs::directory_iterator(path)) {
-+    if (!fs::is_directory(entry)) {
-+      continue;
-+    }
-+    auto module_path = entry.path() / "module.py";
-+    if (fs::exists(module_path)) {
-+      modules.emplace(entry.path().filename());
-     }
-   }
--  closedir(dir);
--
--  return modules_out;
-+  return modules;
- }
- 
- int PyModuleRegistry::handle_command(
-From 067adbf9a032b5de793fd0b41b071f24f075270a Mon Sep 17 00:00:00 2001
-From: Kefu Chai <kchai at redhat.com>
-Date: Thu, 30 Apr 2020 11:34:07 +0800
-Subject: [PATCH] mgr: do not load disabled modules
-
-an option named "mgr_disabled_modules" is added in this change to
-prevent mgr from loading modules listed in this option. because mgr
-loads *all* modules found in the configured path, and per
-https://tracker.ceph.com/issues/45147, python subinterpreter could hang
-when loading numpy, so this behavior practically creates a deadlock
-in mgr.
-
-this issue is found when mgr uses python3.8 runtime. in development
-environment, it'd be inconvenient to disable the offending mgr module
-without changing the source code, even if we can choose to not install
-them, for instance, the enduser can workaround this issue by
-uninstalling `ceph-mgr-diskprediction-local`.
-
-an option would be useful in this case, so we can add the module to the
-list before mgr tries to load it.
-
-as this issue is found with python3.8 + diskprediction_local (numpy), so
-this mgr module is disabled by default if mgr is compiled with python3.8
-runtime.
-
-Fixes: https://tracker.ceph.com/issues/45147
-Signed-off-by: Kefu Chai <kchai at redhat.com>
----
- CMakeLists.txt                |  5 +++++
- src/common/options.cc         | 14 ++++++++++++++
- src/include/config-h.in.cmake |  3 +++
- src/mgr/PyModuleRegistry.cc   | 11 ++++++++++-
- 4 files changed, 32 insertions(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 0f7e86414c2d2..fa00d1316bcc0 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -442,6 +442,11 @@ if(WITH_MGR)
-   set(MGR_PYTHON_LIBRARIES ${Python3_LIBRARIES})
-   set(MGR_PYTHON_VERSION_MAJOR ${Python3_VERSION_MAJOR})
-   set(MGR_PYTHON_VERSION_MINOR ${Python3_VERSION_MINOR})
-+  # https://tracker.ceph.com/issues/45147
-+  if(Python3_VERSION VERSION_GREATER_EQUAL 3.8)
-+    set(MGR_DISABLED_MODULES "diskprediction_local")
-+    message(STATUS "mgr module disabled for ${Python3_VERSION}: ${MGR_DISABLED_MODULES}")
-+  endif()
-   # Boost dependency check deferred to Boost section
- endif(WITH_MGR)
- 
-diff --git a/src/common/options.cc b/src/common/options.cc
-index be1e955ab51ea..c78d9b69d7591 100644
---- a/src/common/options.cc
-+++ b/src/common/options.cc
-@@ -5169,6 +5169,20 @@ std::vector<Option> get_global_options() {
-     .add_service("mgr")
-     .set_description("Filesystem path to manager modules."),
- 
-+    Option("mgr_disabled_modules", Option::TYPE_STR, Option::LEVEL_ADVANCED)
-+#ifdef MGR_DISABLED_MODULES
-+    .set_default(MGR_DISABLED_MODULES)
-+#endif
-+    .set_flag(Option::FLAG_STARTUP)
-+    .add_service("mgr")
-+    .set_description("List of manager modules never get loaded")
-+    .set_long_description("A comma delimited list of module names. This list "
-+        "is read by manager when it starts. By default, manager loads all "
-+        "modules found in specified 'mgr_module_path', and it starts the "
-+        "enabled ones as instructed. The modules in this list will not be "
-+        "loaded at all.")
-+    .add_see_also("mgr_module_path"),
-+
-     Option("mgr_initial_modules", Option::TYPE_STR, Option::LEVEL_BASIC)
-     .set_default("restful iostat")
-     .set_flag(Option::FLAG_NO_MON_UPDATE)
-diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake
-index dc213938f5c9c..ea550c81e3a0e 100644
---- a/src/include/config-h.in.cmake
-+++ b/src/include/config-h.in.cmake
-@@ -309,6 +309,9 @@
- 
- #cmakedefine MGR_PYTHON_EXECUTABLE "@MGR_PYTHON_EXECUTABLE@"
- 
-+/* the default value of "mgr_disabled_module" option */
-+#cmakedefine MGR_DISABLED_MODULES "@MGR_DISABLED_MODULES@"
-+
- /* Define to 1 if you have the `getprogname' function. */
- #cmakedefine HAVE_GETPROGNAME 1
- 
-diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc
-index 466da5d404964..2e2e080aa76c0 100644
---- a/src/mgr/PyModuleRegistry.cc
-+++ b/src/mgr/PyModuleRegistry.cc
-@@ -25,6 +25,7 @@ namespace fs = std::experimental::filesystem;
- 
- #include "include/stringify.h"
- #include "common/errno.h"
-+#include "common/split.h"
- 
- #include "BaseMgrModule.h"
- #include "PyOSDMap.h"
-@@ -267,14 +268,22 @@ void PyModuleRegistry::shutdown()
- 
- std::set<std::string> PyModuleRegistry::probe_modules(const std::string &path) const
- {
-+  const auto opt = g_conf().get_val<std::string>("mgr_disabled_modules");
-+  const auto disabled_modules = ceph::split(opt);
-+
-   std::set<std::string> modules;
-   for (const auto& entry: fs::directory_iterator(path)) {
-     if (!fs::is_directory(entry)) {
-       continue;
-     }
-+    const std::string name = entry.path().filename();
-+    if (std::count(disabled_modules.begin(), disabled_modules.end(), name)) {
-+      dout(10) << "ignoring disabled module " << name << dendl;
-+      continue;
-+    }
-     auto module_path = entry.path() / "module.py";
-     if (fs::exists(module_path)) {
--      modules.emplace(entry.path().filename());
-+      modules.emplace(name);
-     }
-   }
-   return modules;

Copied: ceph/repos/community-staging-x86_64/backport_mgr_disabled_modules_workaround_PR34846.patch (from rev 1062932, ceph/trunk/backport_mgr_disabled_modules_workaround_PR34846.patch)
===================================================================
--- backport_mgr_disabled_modules_workaround_PR34846.patch	                        (rev 0)
+++ backport_mgr_disabled_modules_workaround_PR34846.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,207 @@
+From 40d06ce623f19172721a2f1d5b4f4f8b642a3077 Mon Sep 17 00:00:00 2001
+From: Kefu Chai <kchai at redhat.com>
+Date: Thu, 30 Apr 2020 10:43:01 +0800
+Subject: [PATCH] mgr/PyModuleRegistry: probe modules using std::filesystem
+
+for better readability
+
+Signed-off-by: Kefu Chai <kchai at redhat.com>
+---
+ src/mgr/PyModuleRegistry.cc | 43 +++++++++++++++++--------------------
+ 1 file changed, 20 insertions(+), 23 deletions(-)
+
+diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc
+index 440f7c8bafc1e..466da5d404964 100644
+--- a/src/mgr/PyModuleRegistry.cc
++++ b/src/mgr/PyModuleRegistry.cc
+@@ -11,6 +11,17 @@
+  * Foundation.  See file COPYING.
+  */
+ 
++#include "PyModuleRegistry.h"
++
++#if __has_include(<filesystem>)
++#include <filesystem>
++namespace fs = std::filesystem;
++#elif __has_include(<experimental/filesystem>)
++#include <experimental/filesystem>
++namespace fs = std::experimental::filesystem;
++#else
++#error std::filesystem not available!
++#endif
+ 
+ #include "include/stringify.h"
+ #include "common/errno.h"
+@@ -24,8 +35,6 @@
+ 
+ #include "ActivePyModules.h"
+ 
+-#include "PyModuleRegistry.h"
+-
+ #define dout_context g_ceph_context
+ #define dout_subsys ceph_subsys_mgr
+ 
+@@ -258,29 +267,17 @@ void PyModuleRegistry::shutdown()
+ 
+ std::set<std::string> PyModuleRegistry::probe_modules(const std::string &path) const
+ {
+-  DIR *dir = opendir(path.c_str());
+-  if (!dir) {
+-    return {};
+-  }
+-
+-  std::set<std::string> modules_out;
+-  struct dirent *entry = NULL;
+-  while ((entry = readdir(dir)) != NULL) {
+-    string n(entry->d_name);
+-    string fn = path + "/" + n;
+-    struct stat st;
+-    int r = ::stat(fn.c_str(), &st);
+-    if (r == 0 && S_ISDIR(st.st_mode)) {
+-      string initfn = fn + "/module.py";
+-      r = ::stat(initfn.c_str(), &st);
+-      if (r == 0) {
+-	modules_out.insert(n);
+-      }
++  std::set<std::string> modules;
++  for (const auto& entry: fs::directory_iterator(path)) {
++    if (!fs::is_directory(entry)) {
++      continue;
++    }
++    auto module_path = entry.path() / "module.py";
++    if (fs::exists(module_path)) {
++      modules.emplace(entry.path().filename());
+     }
+   }
+-  closedir(dir);
+-
+-  return modules_out;
++  return modules;
+ }
+ 
+ int PyModuleRegistry::handle_command(
+From 067adbf9a032b5de793fd0b41b071f24f075270a Mon Sep 17 00:00:00 2001
+From: Kefu Chai <kchai at redhat.com>
+Date: Thu, 30 Apr 2020 11:34:07 +0800
+Subject: [PATCH] mgr: do not load disabled modules
+
+an option named "mgr_disabled_modules" is added in this change to
+prevent mgr from loading modules listed in this option. because mgr
+loads *all* modules found in the configured path, and per
+https://tracker.ceph.com/issues/45147, python subinterpreter could hang
+when loading numpy, so this behavior practically creates a deadlock
+in mgr.
+
+this issue is found when mgr uses python3.8 runtime. in development
+environment, it'd be inconvenient to disable the offending mgr module
+without changing the source code, even if we can choose to not install
+them, for instance, the enduser can workaround this issue by
+uninstalling `ceph-mgr-diskprediction-local`.
+
+an option would be useful in this case, so we can add the module to the
+list before mgr tries to load it.
+
+as this issue is found with python3.8 + diskprediction_local (numpy), so
+this mgr module is disabled by default if mgr is compiled with python3.8
+runtime.
+
+Fixes: https://tracker.ceph.com/issues/45147
+Signed-off-by: Kefu Chai <kchai at redhat.com>
+---
+ CMakeLists.txt                |  5 +++++
+ src/common/options.cc         | 14 ++++++++++++++
+ src/include/config-h.in.cmake |  3 +++
+ src/mgr/PyModuleRegistry.cc   | 11 ++++++++++-
+ 4 files changed, 32 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0f7e86414c2d2..fa00d1316bcc0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -442,6 +442,11 @@ if(WITH_MGR)
+   set(MGR_PYTHON_LIBRARIES ${Python3_LIBRARIES})
+   set(MGR_PYTHON_VERSION_MAJOR ${Python3_VERSION_MAJOR})
+   set(MGR_PYTHON_VERSION_MINOR ${Python3_VERSION_MINOR})
++  # https://tracker.ceph.com/issues/45147
++  if(Python3_VERSION VERSION_GREATER_EQUAL 3.8)
++    set(MGR_DISABLED_MODULES "diskprediction_local")
++    message(STATUS "mgr module disabled for ${Python3_VERSION}: ${MGR_DISABLED_MODULES}")
++  endif()
+   # Boost dependency check deferred to Boost section
+ endif(WITH_MGR)
+ 
+diff --git a/src/common/options.cc b/src/common/options.cc
+index be1e955ab51ea..c78d9b69d7591 100644
+--- a/src/common/options.cc
++++ b/src/common/options.cc
+@@ -5169,6 +5169,20 @@ std::vector<Option> get_global_options() {
+     .add_service("mgr")
+     .set_description("Filesystem path to manager modules."),
+ 
++    Option("mgr_disabled_modules", Option::TYPE_STR, Option::LEVEL_ADVANCED)
++#ifdef MGR_DISABLED_MODULES
++    .set_default(MGR_DISABLED_MODULES)
++#endif
++    .set_flag(Option::FLAG_STARTUP)
++    .add_service("mgr")
++    .set_description("List of manager modules never get loaded")
++    .set_long_description("A comma delimited list of module names. This list "
++        "is read by manager when it starts. By default, manager loads all "
++        "modules found in specified 'mgr_module_path', and it starts the "
++        "enabled ones as instructed. The modules in this list will not be "
++        "loaded at all.")
++    .add_see_also("mgr_module_path"),
++
+     Option("mgr_initial_modules", Option::TYPE_STR, Option::LEVEL_BASIC)
+     .set_default("restful iostat")
+     .set_flag(Option::FLAG_NO_MON_UPDATE)
+diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake
+index dc213938f5c9c..ea550c81e3a0e 100644
+--- a/src/include/config-h.in.cmake
++++ b/src/include/config-h.in.cmake
+@@ -309,6 +309,9 @@
+ 
+ #cmakedefine MGR_PYTHON_EXECUTABLE "@MGR_PYTHON_EXECUTABLE@"
+ 
++/* the default value of "mgr_disabled_module" option */
++#cmakedefine MGR_DISABLED_MODULES "@MGR_DISABLED_MODULES@"
++
+ /* Define to 1 if you have the `getprogname' function. */
+ #cmakedefine HAVE_GETPROGNAME 1
+ 
+diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc
+index 466da5d404964..2e2e080aa76c0 100644
+--- a/src/mgr/PyModuleRegistry.cc
++++ b/src/mgr/PyModuleRegistry.cc
+@@ -25,6 +25,7 @@ namespace fs = std::experimental::filesystem;
+ 
+ #include "include/stringify.h"
+ #include "common/errno.h"
++#include "common/split.h"
+ 
+ #include "BaseMgrModule.h"
+ #include "PyOSDMap.h"
+@@ -267,14 +268,22 @@ void PyModuleRegistry::shutdown()
+ 
+ std::set<std::string> PyModuleRegistry::probe_modules(const std::string &path) const
+ {
++  const auto opt = g_conf().get_val<std::string>("mgr_disabled_modules");
++  const auto disabled_modules = ceph::split(opt);
++
+   std::set<std::string> modules;
+   for (const auto& entry: fs::directory_iterator(path)) {
+     if (!fs::is_directory(entry)) {
+       continue;
+     }
++    const std::string name = entry.path().filename();
++    if (std::count(disabled_modules.begin(), disabled_modules.end(), name)) {
++      dout(10) << "ignoring disabled module " << name << dendl;
++      continue;
++    }
+     auto module_path = entry.path() / "module.py";
+     if (fs::exists(module_path)) {
+-      modules.emplace(entry.path().filename());
++      modules.emplace(name);
+     }
+   }
+   return modules;

Deleted: boost-1.67.patch
===================================================================
--- boost-1.67.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ boost-1.67.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,11 +0,0 @@
---- a/src/test/librbd/test_mock_Journal.cc	2018-06-03 01:56:35.407273176 +0300
-+++ b/src/test/librbd/test_mock_Journal.cc	2018-06-03 01:56:29.800506081 +0300
-@@ -1,6 +1,8 @@
- // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
- // vim: ts=8 sw=2 smarttab
- 
-+#define BOOST_BIND_NO_PLACEHOLDERS
-+
- #include "test/librbd/test_mock_fixture.h"
- #include "test/journal/mock/MockJournaler.h"
- #include "test/librbd/test_support.h"

Copied: ceph/repos/community-staging-x86_64/boost-1.67.patch (from rev 1062932, ceph/trunk/boost-1.67.patch)
===================================================================
--- boost-1.67.patch	                        (rev 0)
+++ boost-1.67.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,11 @@
+--- a/src/test/librbd/test_mock_Journal.cc	2018-06-03 01:56:35.407273176 +0300
++++ b/src/test/librbd/test_mock_Journal.cc	2018-06-03 01:56:29.800506081 +0300
+@@ -1,6 +1,8 @@
+ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+ // vim: ts=8 sw=2 smarttab
+ 
++#define BOOST_BIND_NO_PLACEHOLDERS
++
+ #include "test/librbd/test_mock_fixture.h"
+ #include "test/journal/mock/MockJournaler.h"
+ #include "test/librbd/test_support.h"

Deleted: ceph-12.2.4-boost-build-none-options.patch
===================================================================
--- ceph-12.2.4-boost-build-none-options.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-12.2.4-boost-build-none-options.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,26 +0,0 @@
-diff --git a/src/boost/tools/build/src/tools/features/debug-feature.jam b/src/boost/tools/build/src/tools/features/debug-feature.jam
-index 04958f9a..38b6acf1 100644
---- a/src/boost/tools/build/src/tools/features/debug-feature.jam
-+++ b/src/boost/tools/build/src/tools/features/debug-feature.jam
-@@ -8,7 +8,7 @@
- import feature ;
- 
- feature.feature debug-symbols
--    : on off
-+    : on off none
-     : propagated ;
- 
- feature.feature profiling
-diff --git a/src/boost/tools/build/src/tools/features/optimization-feature.jam b/src/boost/tools/build/src/tools/features/optimization-feature.jam
-index 761f76f1..fb2a5dec 100644
---- a/src/boost/tools/build/src/tools/features/optimization-feature.jam
-+++ b/src/boost/tools/build/src/tools/features/optimization-feature.jam
-@@ -8,7 +8,7 @@
- import feature ;
- 
- feature.feature optimization
--    : off speed space
-+    : off none speed space
-     : propagated ;
- 
- feature.feature inlining

Copied: ceph/repos/community-staging-x86_64/ceph-12.2.4-boost-build-none-options.patch (from rev 1062932, ceph/trunk/ceph-12.2.4-boost-build-none-options.patch)
===================================================================
--- ceph-12.2.4-boost-build-none-options.patch	                        (rev 0)
+++ ceph-12.2.4-boost-build-none-options.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,26 @@
+diff --git a/src/boost/tools/build/src/tools/features/debug-feature.jam b/src/boost/tools/build/src/tools/features/debug-feature.jam
+index 04958f9a..38b6acf1 100644
+--- a/src/boost/tools/build/src/tools/features/debug-feature.jam
++++ b/src/boost/tools/build/src/tools/features/debug-feature.jam
+@@ -8,7 +8,7 @@
+ import feature ;
+ 
+ feature.feature debug-symbols
+-    : on off
++    : on off none
+     : propagated ;
+ 
+ feature.feature profiling
+diff --git a/src/boost/tools/build/src/tools/features/optimization-feature.jam b/src/boost/tools/build/src/tools/features/optimization-feature.jam
+index 761f76f1..fb2a5dec 100644
+--- a/src/boost/tools/build/src/tools/features/optimization-feature.jam
++++ b/src/boost/tools/build/src/tools/features/optimization-feature.jam
+@@ -8,7 +8,7 @@
+ import feature ;
+ 
+ feature.feature optimization
+-    : off speed space
++    : off none speed space
+     : propagated ;
+ 
+ feature.feature inlining

Deleted: ceph-13.2.0-cflags.patch
===================================================================
--- ceph-13.2.0-cflags.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-13.2.0-cflags.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,26 +0,0 @@
-diff --git a/cmake/modules/BuildBoost.cmake b/cmake/modules/BuildBoost.cmake
-index d6572115a4..cc0bdddc9f 100644
---- a/cmake/modules/BuildBoost.cmake
-+++ b/cmake/modules/BuildBoost.cmake
-@@ -62,7 +62,7 @@ function(do_build_boost version)
-   else()
-     list(APPEND boost_features "address-model=32")
-   endif()
--  set(BOOST_CXXFLAGS "-fPIC -w") # check on arm, etc <---XXX
-+  set(BOOST_CXXFLAGS "${CMAKE_CXX_FLAGS} -fPIC -w") # check on arm, etc <---XXX
-   list(APPEND boost_features "cxxflags=${BOOST_CXXFLAGS}")
- 
-   list(FIND Boost_BUILD_COMPONENTS "python" with_python)
-diff --git a/src/compressor/zstd/CMakeLists.txt b/src/compressor/zstd/CMakeLists.txt
-index 5a80aa539c..8d6ff5c8f0 100644
---- a/src/compressor/zstd/CMakeLists.txt
-+++ b/src/compressor/zstd/CMakeLists.txt
-@@ -1,7 +1,7 @@
- # zstd
- 
- # libzstd - build it statically
--set(ZSTD_C_FLAGS "-fPIC -Wno-unused-variable -O3")
-+set(ZSTD_C_FLAGS "-fPIC -Wno-unused-variable $ENV{CFLAGS} -O3")
- 
- include(ExternalProject)
- ExternalProject_Add(zstd_ext

Copied: ceph/repos/community-staging-x86_64/ceph-13.2.0-cflags.patch (from rev 1062932, ceph/trunk/ceph-13.2.0-cflags.patch)
===================================================================
--- ceph-13.2.0-cflags.patch	                        (rev 0)
+++ ceph-13.2.0-cflags.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,26 @@
+diff --git a/cmake/modules/BuildBoost.cmake b/cmake/modules/BuildBoost.cmake
+index d6572115a4..cc0bdddc9f 100644
+--- a/cmake/modules/BuildBoost.cmake
++++ b/cmake/modules/BuildBoost.cmake
+@@ -62,7 +62,7 @@ function(do_build_boost version)
+   else()
+     list(APPEND boost_features "address-model=32")
+   endif()
+-  set(BOOST_CXXFLAGS "-fPIC -w") # check on arm, etc <---XXX
++  set(BOOST_CXXFLAGS "${CMAKE_CXX_FLAGS} -fPIC -w") # check on arm, etc <---XXX
+   list(APPEND boost_features "cxxflags=${BOOST_CXXFLAGS}")
+ 
+   list(FIND Boost_BUILD_COMPONENTS "python" with_python)
+diff --git a/src/compressor/zstd/CMakeLists.txt b/src/compressor/zstd/CMakeLists.txt
+index 5a80aa539c..8d6ff5c8f0 100644
+--- a/src/compressor/zstd/CMakeLists.txt
++++ b/src/compressor/zstd/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ # zstd
+ 
+ # libzstd - build it statically
+-set(ZSTD_C_FLAGS "-fPIC -Wno-unused-variable -O3")
++set(ZSTD_C_FLAGS "-fPIC -Wno-unused-variable $ENV{CFLAGS} -O3")
+ 
+ include(ExternalProject)
+ ExternalProject_Add(zstd_ext

Deleted: ceph-13.2.2-dont-install-sysvinit-script.patch
===================================================================
--- ceph-13.2.2-dont-install-sysvinit-script.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-13.2.2-dont-install-sysvinit-script.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,15 +0,0 @@
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 874eabfaa1..e337f4cf8e 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -601,10 +601,6 @@ install(PROGRAMS
-   ${CMAKE_SOURCE_DIR}/src/ceph-run
-   ${CMAKE_SOURCE_DIR}/src/ceph-clsinfo
-   DESTINATION bin)
--install(PROGRAMS
--  ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph
--  DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d
--  RENAME ceph)
- 
- install(FILES
-   ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com

Copied: ceph/repos/community-staging-x86_64/ceph-13.2.2-dont-install-sysvinit-script.patch (from rev 1062932, ceph/trunk/ceph-13.2.2-dont-install-sysvinit-script.patch)
===================================================================
--- ceph-13.2.2-dont-install-sysvinit-script.patch	                        (rev 0)
+++ ceph-13.2.2-dont-install-sysvinit-script.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,15 @@
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 874eabfaa1..e337f4cf8e 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -601,10 +601,6 @@ install(PROGRAMS
+   ${CMAKE_SOURCE_DIR}/src/ceph-run
+   ${CMAKE_SOURCE_DIR}/src/ceph-clsinfo
+   DESTINATION bin)
+-install(PROGRAMS
+-  ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph
+-  DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d
+-  RENAME ceph)
+ 
+ install(FILES
+   ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com

Deleted: ceph-14.2.0-cflags.patch
===================================================================
--- ceph-14.2.0-cflags.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-14.2.0-cflags.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,13 +0,0 @@
-diff --git a/cmake/modules/Distutils.cmake b/cmake/modules/Distutils.cmake
-index 5697dff85f..7fdcfe4112 100644
---- a/cmake/modules/Distutils.cmake
-+++ b/cmake/modules/Distutils.cmake
-@@ -61,7 +61,7 @@ function(distutils_add_cython_module name src)
-     CC="${PY_CC}"
-     CXX="${PY_CXX}"
-     LDSHARED="${PY_LDSHARED}"
--    OPT=\"-DNDEBUG -g -fwrapv -O2 -w\"
-+    OPT=\"-DNDEBUG -g -fwrapv -w\"
-     LDFLAGS=-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
-     CYTHON_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
-     CEPH_LIBDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}

Copied: ceph/repos/community-staging-x86_64/ceph-14.2.0-cflags.patch (from rev 1062932, ceph/trunk/ceph-14.2.0-cflags.patch)
===================================================================
--- ceph-14.2.0-cflags.patch	                        (rev 0)
+++ ceph-14.2.0-cflags.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,13 @@
+diff --git a/cmake/modules/Distutils.cmake b/cmake/modules/Distutils.cmake
+index 5697dff85f..7fdcfe4112 100644
+--- a/cmake/modules/Distutils.cmake
++++ b/cmake/modules/Distutils.cmake
+@@ -61,7 +61,7 @@ function(distutils_add_cython_module name src)
+     CC="${PY_CC}"
+     CXX="${PY_CXX}"
+     LDSHARED="${PY_LDSHARED}"
+-    OPT=\"-DNDEBUG -g -fwrapv -O2 -w\"
++    OPT=\"-DNDEBUG -g -fwrapv -w\"
+     LDFLAGS=-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
+     CYTHON_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
+     CEPH_LIBDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}

Deleted: ceph-14.2.0-cython-0.29.patch
===================================================================
--- ceph-14.2.0-cython-0.29.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-14.2.0-cython-0.29.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,17 +0,0 @@
---- ceph-13.2.1/cmake/modules/Distutils.cmake.old	2018-07-26 17:39:56.000000000 -0000
-+++ ceph-13.2.1/cmake/modules/Distutils.cmake	2018-12-24 05:43:51.566174070 -0000
-@@ -58,8 +62,13 @@
- function(distutils_install_cython_module name)
-   get_property(compiler_launcher GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
-   get_property(link_launcher GLOBAL PROPERTY RULE_LAUNCH_LINK)
--  set(PY_CC "${compiler_launcher} ${CMAKE_C_COMPILER}")
-+  string(REPLACE " " ";" cflags ${CMAKE_C_FLAGS})
-+  list(APPEND cflags -iquote${CMAKE_SOURCE_DIR}/src/include -w)
-+  list(APPEND cflags -D'void0=dead_function\(void\)')
-+  list(APPEND cflags -D'__Pyx_check_single_interpreter\(ARG\)=ARG \#\# 0')
-+  string(REPLACE ";" " " cflags "${cflags}")
-+  set(PY_CC "${compiler_launcher} ${CMAKE_C_COMPILER} ${cflags}")
-   set(PY_LDSHARED "${link_launcher} ${CMAKE_C_COMPILER} -shared")
-   install(CODE "
-     set(ENV{CC} \"${PY_CC}\")
-     set(ENV{LDSHARED} \"${PY_LDSHARED}\")

Copied: ceph/repos/community-staging-x86_64/ceph-14.2.0-cython-0.29.patch (from rev 1062932, ceph/trunk/ceph-14.2.0-cython-0.29.patch)
===================================================================
--- ceph-14.2.0-cython-0.29.patch	                        (rev 0)
+++ ceph-14.2.0-cython-0.29.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,17 @@
+--- ceph-13.2.1/cmake/modules/Distutils.cmake.old	2018-07-26 17:39:56.000000000 -0000
++++ ceph-13.2.1/cmake/modules/Distutils.cmake	2018-12-24 05:43:51.566174070 -0000
+@@ -58,8 +62,13 @@
+ function(distutils_install_cython_module name)
+   get_property(compiler_launcher GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
+   get_property(link_launcher GLOBAL PROPERTY RULE_LAUNCH_LINK)
+-  set(PY_CC "${compiler_launcher} ${CMAKE_C_COMPILER}")
++  string(REPLACE " " ";" cflags ${CMAKE_C_FLAGS})
++  list(APPEND cflags -iquote${CMAKE_SOURCE_DIR}/src/include -w)
++  list(APPEND cflags -D'void0=dead_function\(void\)')
++  list(APPEND cflags -D'__Pyx_check_single_interpreter\(ARG\)=ARG \#\# 0')
++  string(REPLACE ";" " " cflags "${cflags}")
++  set(PY_CC "${compiler_launcher} ${CMAKE_C_COMPILER} ${cflags}")
+   set(PY_LDSHARED "${link_launcher} ${CMAKE_C_COMPILER} -shared")
+   install(CODE "
+     set(ENV{CC} \"${PY_CC}\")
+     set(ENV{LDSHARED} \"${PY_LDSHARED}\")

Deleted: ceph-14.2.0-link-crc32-statically.patch
===================================================================
--- ceph-14.2.0-link-crc32-statically.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-14.2.0-link-crc32-statically.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,11 +0,0 @@
---- ceph-14.2.0.orig/src/common/CMakeLists.txt	2019-03-18 04:08:29.000000000 -0600
-+++ ceph-14.2.0/src/common/CMakeLists.txt	2019-03-21 18:42:32.903182824 -0600
-@@ -165,7 +165,7 @@
-     crc32c_aarch64.c)
- endif(HAVE_INTEL)
- 
--add_library(crc32 ${crc32_srcs})
-+add_library(crc32 STATIC ${crc32_srcs})
- if(HAVE_ARMV8_CRC)
-   set_target_properties(crc32 PROPERTIES
-     COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARMV8_CRC_COMPILE_FLAGS}")

Copied: ceph/repos/community-staging-x86_64/ceph-14.2.0-link-crc32-statically.patch (from rev 1062932, ceph/trunk/ceph-14.2.0-link-crc32-statically.patch)
===================================================================
--- ceph-14.2.0-link-crc32-statically.patch	                        (rev 0)
+++ ceph-14.2.0-link-crc32-statically.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,11 @@
+--- ceph-14.2.0.orig/src/common/CMakeLists.txt	2019-03-18 04:08:29.000000000 -0600
++++ ceph-14.2.0/src/common/CMakeLists.txt	2019-03-21 18:42:32.903182824 -0600
+@@ -165,7 +165,7 @@
+     crc32c_aarch64.c)
+ endif(HAVE_INTEL)
+ 
+-add_library(crc32 ${crc32_srcs})
++add_library(crc32 STATIC ${crc32_srcs})
+ if(HAVE_ARMV8_CRC)
+   set_target_properties(crc32 PROPERTIES
+     COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARMV8_CRC_COMPILE_FLAGS}")

Deleted: ceph-15.2.0-rocksdb-cmake.patch
===================================================================
--- ceph-15.2.0-rocksdb-cmake.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-15.2.0-rocksdb-cmake.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,15 +0,0 @@
-diff --git a/cmake/modules/BuildRocksDB.cmake b/cmake/modules/BuildRocksDB.cmake
-index de9748878b..4b86b36d35 100644
---- a/cmake/modules/BuildRocksDB.cmake
-+++ b/cmake/modules/BuildRocksDB.cmake
-@@ -6,10 +6,6 @@ function(build_rocksdb)
-   # CMAKE_PREFIX_PATH, for which reason we'll have to use some other separator.
-   string(REPLACE ";" "!" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}")
-   list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP})
--  if(CMAKE_TOOLCHAIN_FILE)
--    list(APPEND rocksdb_CMAKE_ARGS
--         -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE)
--  endif()
- 
-   if(ALLOCATOR STREQUAL "jemalloc")
-     list(APPEND rocksdb_CMAKE_ARGS -DWITH_JEMALLOC=ON)

Copied: ceph/repos/community-staging-x86_64/ceph-15.2.0-rocksdb-cmake.patch (from rev 1062932, ceph/trunk/ceph-15.2.0-rocksdb-cmake.patch)
===================================================================
--- ceph-15.2.0-rocksdb-cmake.patch	                        (rev 0)
+++ ceph-15.2.0-rocksdb-cmake.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,15 @@
+diff --git a/cmake/modules/BuildRocksDB.cmake b/cmake/modules/BuildRocksDB.cmake
+index de9748878b..4b86b36d35 100644
+--- a/cmake/modules/BuildRocksDB.cmake
++++ b/cmake/modules/BuildRocksDB.cmake
+@@ -6,10 +6,6 @@ function(build_rocksdb)
+   # CMAKE_PREFIX_PATH, for which reason we'll have to use some other separator.
+   string(REPLACE ";" "!" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}")
+   list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP})
+-  if(CMAKE_TOOLCHAIN_FILE)
+-    list(APPEND rocksdb_CMAKE_ARGS
+-         -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE)
+-  endif()
+ 
+   if(ALLOCATOR STREQUAL "jemalloc")
+     list(APPEND rocksdb_CMAKE_ARGS -DWITH_JEMALLOC=ON)

Deleted: ceph-15.2.4-system-uring.patch
===================================================================
--- ceph-15.2.4-system-uring.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-15.2.4-system-uring.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,66 +0,0 @@
-diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt
-index 760244b9b4..7f83923671 100644
---- a/src/os/CMakeLists.txt
-+++ b/src/os/CMakeLists.txt
-@@ -134,27 +134,6 @@ if(WITH_EVENTTRACE)
- endif()
- 
- if(WITH_LIBURING)
--  include(ExternalProject)
--  if("${CMAKE_GENERATOR}" MATCHES "Make")
--    set(make_cmd "$(MAKE)")
--  else()
--    set(make_cmd "make")
--  endif()
--  ExternalProject_Add(liburing_ext
--    DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/src/
--    GIT_REPOSITORY http://git.kernel.dk/liburing
--    GIT_TAG "4e360f71131918c36774f51688e5c65dea8d43f2"
--    SOURCE_DIR ${CMAKE_BINARY_DIR}/src/liburing
--    CONFIGURE_COMMAND <SOURCE_DIR>/configure
--    BUILD_COMMAND env CC=${CMAKE_C_COMPILER} ${make_cmd} -C src -s
--    BUILD_IN_SOURCE 1
--    INSTALL_COMMAND "")
--  unset(make_cmd)
--  add_library(liburing STATIC IMPORTED GLOBAL)
--  add_dependencies(liburing liburing_ext)
--  set_target_properties(liburing PROPERTIES
--    IMPORTED_LINK_INTERFACE_LANGUAGES "C"
--    IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/src/liburing/src/liburing.a")
--  target_link_libraries(os liburing)
--  target_include_directories(os SYSTEM PRIVATE "${CMAKE_BINARY_DIR}/src/liburing/src/include")
-+  pkg_check_modules(LIBURING REQUIRED IMPORTED_TARGET liburing)
-+  target_link_libraries(os uring)
- endif(WITH_LIBURING)
-diff --git a/src/os/bluestore/io_uring.cc b/src/os/bluestore/io_uring.cc
-index 54fa0f9535..4ba83cf172 100644
---- a/src/os/bluestore/io_uring.cc
-+++ b/src/os/bluestore/io_uring.cc
-@@ -7,6 +7,8 @@
- 
- #include "liburing.h"
- #include <sys/epoll.h>
-+#include <unistd.h>
-+#include <sys/syscall.h>
- 
- /* Options */
- 
-@@ -134,8 +136,7 @@ int ioring_queue_t::init(std::vector<int> &fds)
-   if (ret < 0)
-     return ret;
- 
--  ret = io_uring_register(d->io_uring.ring_fd, IORING_REGISTER_FILES,
--			  &fds[0], fds.size());
-+  ret = io_uring_register_files(&d->io_uring, &fds[0], fds.size());
-   if (ret < 0) {
-     ret = -errno;
-     goto close_ring_fd;
-@@ -214,7 +215,7 @@ bool ioring_queue_t::supported()
-   struct io_uring_params p;
- 
-   memset(&p, 0, sizeof(p));
--  int fd = io_uring_setup(16, &p);
-+  int fd = syscall(SYS_io_uring_setup, 16, &p);
-   if (fd < 0)
-     return false;
- 

Copied: ceph/repos/community-staging-x86_64/ceph-15.2.4-system-uring.patch (from rev 1062932, ceph/trunk/ceph-15.2.4-system-uring.patch)
===================================================================
--- ceph-15.2.4-system-uring.patch	                        (rev 0)
+++ ceph-15.2.4-system-uring.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,66 @@
+diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt
+index 760244b9b4..7f83923671 100644
+--- a/src/os/CMakeLists.txt
++++ b/src/os/CMakeLists.txt
+@@ -134,27 +134,6 @@ if(WITH_EVENTTRACE)
+ endif()
+ 
+ if(WITH_LIBURING)
+-  include(ExternalProject)
+-  if("${CMAKE_GENERATOR}" MATCHES "Make")
+-    set(make_cmd "$(MAKE)")
+-  else()
+-    set(make_cmd "make")
+-  endif()
+-  ExternalProject_Add(liburing_ext
+-    DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/src/
+-    GIT_REPOSITORY http://git.kernel.dk/liburing
+-    GIT_TAG "4e360f71131918c36774f51688e5c65dea8d43f2"
+-    SOURCE_DIR ${CMAKE_BINARY_DIR}/src/liburing
+-    CONFIGURE_COMMAND <SOURCE_DIR>/configure
+-    BUILD_COMMAND env CC=${CMAKE_C_COMPILER} ${make_cmd} -C src -s
+-    BUILD_IN_SOURCE 1
+-    INSTALL_COMMAND "")
+-  unset(make_cmd)
+-  add_library(liburing STATIC IMPORTED GLOBAL)
+-  add_dependencies(liburing liburing_ext)
+-  set_target_properties(liburing PROPERTIES
+-    IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+-    IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/src/liburing/src/liburing.a")
+-  target_link_libraries(os liburing)
+-  target_include_directories(os SYSTEM PRIVATE "${CMAKE_BINARY_DIR}/src/liburing/src/include")
++  pkg_check_modules(LIBURING REQUIRED IMPORTED_TARGET liburing)
++  target_link_libraries(os uring)
+ endif(WITH_LIBURING)
+diff --git a/src/os/bluestore/io_uring.cc b/src/os/bluestore/io_uring.cc
+index 54fa0f9535..4ba83cf172 100644
+--- a/src/os/bluestore/io_uring.cc
++++ b/src/os/bluestore/io_uring.cc
+@@ -7,6 +7,8 @@
+ 
+ #include "liburing.h"
+ #include <sys/epoll.h>
++#include <unistd.h>
++#include <sys/syscall.h>
+ 
+ /* Options */
+ 
+@@ -134,8 +136,7 @@ int ioring_queue_t::init(std::vector<int> &fds)
+   if (ret < 0)
+     return ret;
+ 
+-  ret = io_uring_register(d->io_uring.ring_fd, IORING_REGISTER_FILES,
+-			  &fds[0], fds.size());
++  ret = io_uring_register_files(&d->io_uring, &fds[0], fds.size());
+   if (ret < 0) {
+     ret = -errno;
+     goto close_ring_fd;
+@@ -214,7 +215,7 @@ bool ioring_queue_t::supported()
+   struct io_uring_params p;
+ 
+   memset(&p, 0, sizeof(p));
+-  int fd = io_uring_setup(16, &p);
++  int fd = syscall(SYS_io_uring_setup, 16, &p);
+   if (fd < 0)
+     return false;
+ 

Deleted: ceph-15.2.5-missing-includes.patch
===================================================================
--- ceph-15.2.5-missing-includes.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph-15.2.5-missing-includes.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,12 +0,0 @@
-diff --git a/src/tools/rbd/action/Bench.cc b/src/tools/rbd/action/Bench.cc
-index aa6edbc18b..90c551c179 100644
---- a/src/tools/rbd/action/Bench.cc
-+++ b/src/tools/rbd/action/Bench.cc
-@@ -9,6 +9,7 @@
- #include "common/ceph_mutex.h"
- #include "include/types.h"
- #include "global/signal_handler.h"
-+#include <atomic>
- #include <iostream>
- #include <boost/accumulators/accumulators.hpp>
- #include <boost/accumulators/statistics/stats.hpp>

Copied: ceph/repos/community-staging-x86_64/ceph-15.2.5-missing-includes.patch (from rev 1062932, ceph/trunk/ceph-15.2.5-missing-includes.patch)
===================================================================
--- ceph-15.2.5-missing-includes.patch	                        (rev 0)
+++ ceph-15.2.5-missing-includes.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,12 @@
+diff --git a/src/tools/rbd/action/Bench.cc b/src/tools/rbd/action/Bench.cc
+index aa6edbc18b..90c551c179 100644
+--- a/src/tools/rbd/action/Bench.cc
++++ b/src/tools/rbd/action/Bench.cc
+@@ -9,6 +9,7 @@
+ #include "common/ceph_mutex.h"
+ #include "include/types.h"
+ #include "global/signal_handler.h"
++#include <atomic>
+ #include <iostream>
+ #include <boost/accumulators/accumulators.hpp>
+ #include <boost/accumulators/statistics/stats.hpp>

Deleted: ceph.sysusers
===================================================================
--- ceph.sysusers	2021-12-02 23:22:39 UTC (rev 1062932)
+++ ceph.sysusers	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1 +0,0 @@
-u ceph 340 - /run/ceph

Copied: ceph/repos/community-staging-x86_64/ceph.sysusers (from rev 1062932, ceph/trunk/ceph.sysusers)
===================================================================
--- ceph.sysusers	                        (rev 0)
+++ ceph.sysusers	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1 @@
+u ceph 340 - /run/ceph

Deleted: disable-broken-mgr-dashboard-test.patch
===================================================================
--- disable-broken-mgr-dashboard-test.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ disable-broken-mgr-dashboard-test.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,13 +0,0 @@
---- a/src/test/CMakeLists.txt	2019-12-06 17:42:34.000000000 +0100
-+++ b/src/test/CMakeLists.txt	2020-01-04 09:55:50.703888545 +0100
-@@ -555,8 +555,8 @@ set(env_vars_for_tox_tests
-   WITH_PYTHON3=${WITH_PYTHON3})
- 
- if(WITH_MGR)
--  add_test(NAME run-tox-mgr-dashboard COMMAND bash ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/run-tox.sh)
--  list(APPEND tox_tests run-tox-mgr-dashboard)
-+  # add_test(NAME run-tox-mgr-dashboard COMMAND bash ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/run-tox.sh)
-+  # list(APPEND tox_tests run-tox-mgr-dashboard)
-   set(MGR_DASHBOARD_VIRTUALENV ${CEPH_BUILD_VIRTUALENV}/mgr-dashboard-virtualenv)
-   list(APPEND env_vars_for_tox_tests MGR_DASHBOARD_VIRTUALENV=${MGR_DASHBOARD_VIRTUALENV})
- 

Copied: ceph/repos/community-staging-x86_64/disable-broken-mgr-dashboard-test.patch (from rev 1062932, ceph/trunk/disable-broken-mgr-dashboard-test.patch)
===================================================================
--- disable-broken-mgr-dashboard-test.patch	                        (rev 0)
+++ disable-broken-mgr-dashboard-test.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,13 @@
+--- a/src/test/CMakeLists.txt	2019-12-06 17:42:34.000000000 +0100
++++ b/src/test/CMakeLists.txt	2020-01-04 09:55:50.703888545 +0100
+@@ -555,8 +555,8 @@ set(env_vars_for_tox_tests
+   WITH_PYTHON3=${WITH_PYTHON3})
+ 
+ if(WITH_MGR)
+-  add_test(NAME run-tox-mgr-dashboard COMMAND bash ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/run-tox.sh)
+-  list(APPEND tox_tests run-tox-mgr-dashboard)
++  # add_test(NAME run-tox-mgr-dashboard COMMAND bash ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/run-tox.sh)
++  # list(APPEND tox_tests run-tox-mgr-dashboard)
+   set(MGR_DASHBOARD_VIRTUALENV ${CEPH_BUILD_VIRTUALENV}/mgr-dashboard-virtualenv)
+   list(APPEND env_vars_for_tox_tests MGR_DASHBOARD_VIRTUALENV=${MGR_DASHBOARD_VIRTUALENV})
+ 

Deleted: disable-empty-readable.sh-test.patch
===================================================================
--- disable-empty-readable.sh-test.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ disable-empty-readable.sh-test.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,6 +0,0 @@
---- a/src/test/encoding/CMakeLists.txt	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/test/encoding/CMakeLists.txt	2019-07-14 21:11:37.380428899 +0200
-@@ -1,3 +1,2 @@
- # scripts
- add_ceph_test(check-generated.sh ${CMAKE_CURRENT_SOURCE_DIR}/check-generated.sh)
--add_ceph_test(readable.sh ${CMAKE_CURRENT_SOURCE_DIR}/readable.sh)

Copied: ceph/repos/community-staging-x86_64/disable-empty-readable.sh-test.patch (from rev 1062932, ceph/trunk/disable-empty-readable.sh-test.patch)
===================================================================
--- disable-empty-readable.sh-test.patch	                        (rev 0)
+++ disable-empty-readable.sh-test.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,6 @@
+--- a/src/test/encoding/CMakeLists.txt	2019-04-25 20:15:48.000000000 +0200
++++ b/src/test/encoding/CMakeLists.txt	2019-07-14 21:11:37.380428899 +0200
+@@ -1,3 +1,2 @@
+ # scripts
+ add_ceph_test(check-generated.sh ${CMAKE_CURRENT_SOURCE_DIR}/check-generated.sh)
+-add_ceph_test(readable.sh ${CMAKE_CURRENT_SOURCE_DIR}/readable.sh)

Deleted: exclude-frontend-from-mgr-dashboard-cov.patch
===================================================================
--- exclude-frontend-from-mgr-dashboard-cov.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ exclude-frontend-from-mgr-dashboard-cov.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,11 +0,0 @@
---- a/src/pybind/mgr/dashboard/tox.ini	2019-12-06 17:42:34.000000000 +0100
-+++ c/src/pybind/mgr/dashboard/tox.ini	2020-01-03 15:25:30.074706391 +0100
-@@ -20,7 +20,7 @@ commands=
-     py27: pip install -r {toxinidir}/requirements-py27.txt
-     py3: pip install -r {toxinidir}/requirements-py3.txt
-     cov: coverage erase
--    cov: {envbindir}/py.test --cov=. --cov-report= --junitxml=junit.{envname}.xml --doctest-modules controllers services/ tests/ tools.py
-+    cov: {envbindir}/py.test --cov=. --cov-report= --junitxml=junit.{envname}.xml --ignore=frontend/ --doctest-modules controllers services/ tests/ tools.py
-     cov: coverage combine {toxinidir}/{env:COVERAGE_FILE}
-     cov: coverage report
-     cov: coverage xml

Copied: ceph/repos/community-staging-x86_64/exclude-frontend-from-mgr-dashboard-cov.patch (from rev 1062932, ceph/trunk/exclude-frontend-from-mgr-dashboard-cov.patch)
===================================================================
--- exclude-frontend-from-mgr-dashboard-cov.patch	                        (rev 0)
+++ exclude-frontend-from-mgr-dashboard-cov.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,11 @@
+--- a/src/pybind/mgr/dashboard/tox.ini	2019-12-06 17:42:34.000000000 +0100
++++ c/src/pybind/mgr/dashboard/tox.ini	2020-01-03 15:25:30.074706391 +0100
+@@ -20,7 +20,7 @@ commands=
+     py27: pip install -r {toxinidir}/requirements-py27.txt
+     py3: pip install -r {toxinidir}/requirements-py3.txt
+     cov: coverage erase
+-    cov: {envbindir}/py.test --cov=. --cov-report= --junitxml=junit.{envname}.xml --doctest-modules controllers services/ tests/ tools.py
++    cov: {envbindir}/py.test --cov=. --cov-report= --junitxml=junit.{envname}.xml --ignore=frontend/ --doctest-modules controllers services/ tests/ tools.py
+     cov: coverage combine {toxinidir}/{env:COVERAGE_FILE}
+     cov: coverage report
+     cov: coverage xml

Deleted: fix-ceph_disk-python-interpreter.patch
===================================================================
--- fix-ceph_disk-python-interpreter.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ fix-ceph_disk-python-interpreter.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,8 +0,0 @@
---- a/src/ceph-disk/ceph_disk/main.py	2017-08-28 18:30:20.000000000 +0200
-+++ b/src/ceph-disk/ceph_disk/main.py	2017-09-21 13:50:39.373573382 +0200
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python2
- #
- # Copyright (C) 2015, 2016, 2017 Red Hat <contact at redhat.com>
- # Copyright (C) 2014 Inktank <info at inktank.com>

Copied: ceph/repos/community-staging-x86_64/fix-ceph_disk-python-interpreter.patch (from rev 1062932, ceph/trunk/fix-ceph_disk-python-interpreter.patch)
===================================================================
--- fix-ceph_disk-python-interpreter.patch	                        (rev 0)
+++ fix-ceph_disk-python-interpreter.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,8 @@
+--- a/src/ceph-disk/ceph_disk/main.py	2017-08-28 18:30:20.000000000 +0200
++++ b/src/ceph-disk/ceph_disk/main.py	2017-09-21 13:50:39.373573382 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python2
+ #
+ # Copyright (C) 2015, 2016, 2017 Red Hat <contact at redhat.com>
+ # Copyright (C) 2014 Inktank <info at inktank.com>

Deleted: fix-mgr-dashboard-frontend-unittests-dist-stuff.patch
===================================================================
--- fix-mgr-dashboard-frontend-unittests-dist-stuff.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ fix-mgr-dashboard-frontend-unittests-dist-stuff.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,50 +0,0 @@
---- a/src/pybind/mgr/dashboard/run-frontend-unittests.sh	2020-01-08 19:36:54.000000000 +0100
-+++ b/src/pybind/mgr/dashboard/run-frontend-unittests.sh	2020-01-10 15:18:39.646510326 +0100
-@@ -8,7 +8,7 @@ if [ `uname` != "FreeBSD" ]; then
- fi
- 
- # Build
--npm run build -- --prod --progress=false || failed=true
-+#npm run build -- --prod --progress=false || failed=true
- 
- # Unit Tests
- config='src/unit-test-configuration.ts'
-@@ -25,22 +25,22 @@ if [ -e ${config}_old ]; then
- fi
- 
- # Linting
--npm run lint --silent
--if [ $? -gt 0 ]; then
--  failed=true
--  echo -e "\nTry running 'npm run fix' to fix some linting errors. \
--Some errors might need a manual fix."
--fi
--
--# I18N
--npm run i18n:extract
--i18n_lint=`awk '/<source> |<source>$| <\/source>/,/<\/context-group>/ {printf "%-4s ", NR; print}' src/locale/messages.xlf`
--if [[ ! -z $i18n_lint ]]; then
--  echo -e "The following source translations in 'messages.xlf' need to be \
--fixed, please check the I18N suggestions in 'HACKING.rst':\n"
--  echo "${i18n_lint}"
--  failed=true
--fi
-+# npm run lint --silent
-+# if [ $? -gt 0 ]; then
-+#   failed=true
-+#   echo -e "\nTry running 'npm run fix' to fix some linting errors. \
-+# Some errors might need a manual fix."
-+# fi
-+# 
-+# # I18N
-+# npm run i18n:extract
-+# i18n_lint=`awk '/<source> |<source>$| <\/source>/,/<\/context-group>/ {printf "%-4s ", NR; print}' src/locale/messages.xlf`
-+# if [[ ! -z $i18n_lint ]]; then
-+#   echo -e "The following source translations in 'messages.xlf' need to be \
-+# fixed, please check the I18N suggestions in 'HACKING.rst':\n"
-+#   echo "${i18n_lint}"
-+#   failed=true
-+# fi
- 
- if [ `uname` != "FreeBSD" ]; then
-   deactivate

Copied: ceph/repos/community-staging-x86_64/fix-mgr-dashboard-frontend-unittests-dist-stuff.patch (from rev 1062932, ceph/trunk/fix-mgr-dashboard-frontend-unittests-dist-stuff.patch)
===================================================================
--- fix-mgr-dashboard-frontend-unittests-dist-stuff.patch	                        (rev 0)
+++ fix-mgr-dashboard-frontend-unittests-dist-stuff.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,50 @@
+--- a/src/pybind/mgr/dashboard/run-frontend-unittests.sh	2020-01-08 19:36:54.000000000 +0100
++++ b/src/pybind/mgr/dashboard/run-frontend-unittests.sh	2020-01-10 15:18:39.646510326 +0100
+@@ -8,7 +8,7 @@ if [ `uname` != "FreeBSD" ]; then
+ fi
+ 
+ # Build
+-npm run build -- --prod --progress=false || failed=true
++#npm run build -- --prod --progress=false || failed=true
+ 
+ # Unit Tests
+ config='src/unit-test-configuration.ts'
+@@ -25,22 +25,22 @@ if [ -e ${config}_old ]; then
+ fi
+ 
+ # Linting
+-npm run lint --silent
+-if [ $? -gt 0 ]; then
+-  failed=true
+-  echo -e "\nTry running 'npm run fix' to fix some linting errors. \
+-Some errors might need a manual fix."
+-fi
+-
+-# I18N
+-npm run i18n:extract
+-i18n_lint=`awk '/<source> |<source>$| <\/source>/,/<\/context-group>/ {printf "%-4s ", NR; print}' src/locale/messages.xlf`
+-if [[ ! -z $i18n_lint ]]; then
+-  echo -e "The following source translations in 'messages.xlf' need to be \
+-fixed, please check the I18N suggestions in 'HACKING.rst':\n"
+-  echo "${i18n_lint}"
+-  failed=true
+-fi
++# npm run lint --silent
++# if [ $? -gt 0 ]; then
++#   failed=true
++#   echo -e "\nTry running 'npm run fix' to fix some linting errors. \
++# Some errors might need a manual fix."
++# fi
++# 
++# # I18N
++# npm run i18n:extract
++# i18n_lint=`awk '/<source> |<source>$| <\/source>/,/<\/context-group>/ {printf "%-4s ", NR; print}' src/locale/messages.xlf`
++# if [[ ! -z $i18n_lint ]]; then
++#   echo -e "The following source translations in 'messages.xlf' need to be \
++# fixed, please check the I18N suggestions in 'HACKING.rst':\n"
++#   echo "${i18n_lint}"
++#   failed=true
++# fi
+ 
+ if [ `uname` != "FreeBSD" ]; then
+   deactivate

Deleted: fix-mgr-dashboard-partial_dict.patch
===================================================================
--- fix-mgr-dashboard-partial_dict.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ fix-mgr-dashboard-partial_dict.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,18 +0,0 @@
---- a/src/pybind/mgr/dashboard/controllers/health.py	2020-11-17 19:12:53.000000000 +0100
-+++ b/src/pybind/mgr/dashboard/controllers/health.py	2020-11-22 22:13:44.115751086 +0100
-@@ -11,10 +11,14 @@
- from ..services.ceph_service import CephService
- from ..services.iscsi_cli import IscsiGatewaysConfig
- from ..services.iscsi_client import IscsiClient
--from ..tools import partial_dict
-+#from ..tools import partial_dict
- from .host import get_hosts
- 
- 
-+def partial_dict(orig, keys):
-+    return {k: orig[k] for k in keys}
-+
-+
- class HealthData(object):
-     """
-     A class to be used in combination with BaseController to allow either

Copied: ceph/repos/community-staging-x86_64/fix-mgr-dashboard-partial_dict.patch (from rev 1062932, ceph/trunk/fix-mgr-dashboard-partial_dict.patch)
===================================================================
--- fix-mgr-dashboard-partial_dict.patch	                        (rev 0)
+++ fix-mgr-dashboard-partial_dict.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,18 @@
+--- a/src/pybind/mgr/dashboard/controllers/health.py	2020-11-17 19:12:53.000000000 +0100
++++ b/src/pybind/mgr/dashboard/controllers/health.py	2020-11-22 22:13:44.115751086 +0100
+@@ -11,10 +11,14 @@
+ from ..services.ceph_service import CephService
+ from ..services.iscsi_cli import IscsiGatewaysConfig
+ from ..services.iscsi_client import IscsiClient
+-from ..tools import partial_dict
++#from ..tools import partial_dict
+ from .host import get_hosts
+ 
+ 
++def partial_dict(orig, keys):
++    return {k: orig[k] for k in keys}
++
++
+ class HealthData(object):
+     """
+     A class to be used in combination with BaseController to allow either

Deleted: fix-python2-paths.patch
===================================================================
--- fix-python2-paths.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ fix-python2-paths.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,52 +0,0 @@
---- a/CMakeLists.txt	2018-05-29 14:04:02.000000000 +0200
-+++ b/CMakeLists.txt	2018-06-04 13:41:55.684455580 +0200
-@@ -49,7 +49,7 @@ endif(WITH_CCACHE)
- option(WITH_MANPAGE "Build man pages." ON)
- if(WITH_MANPAGE)
-   find_program(SPHINX_BUILD
--    sphinx-build)
-+    sphinx-build2)
-   if(NOT SPHINX_BUILD)
-     message(FATAL_ERROR "Can't find sphinx-build.")
-   endif(NOT SPHINX_BUILD)
---- a/src/tools/setup-virtualenv.sh	2018-05-29 14:04:02.000000000 +0200
-+++ b/src/tools/setup-virtualenv.sh	2018-06-04 13:43:24.767175961 +0200
-@@ -58,10 +58,10 @@ if [ -z "$DIR" ] ; then
- fi
- rm -fr $DIR
- mkdir -p $DIR
--virtualenv --python $PYTHON_BINARY $DIR
-+virtualenv2 --python $PYTHON_BINARY $DIR
- . $DIR/bin/activate
- 
--if pip --help | grep -q disable-pip-version-check; then
-+if pip2 --help | grep -q disable-pip-version-check; then
-     DISABLE_PIP_VERSION_CHECK=--disable-pip-version-check
- else
-     DISABLE_PIP_VERSION_CHECK=
-@@ -69,12 +69,12 @@ fi
- 
- # older versions of pip will not install wrap_console scripts
- # when using wheel packages
--pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade 'pip >= 6.1'
-+pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade 'pip >= 6.1'
- 
- # workaround of https://github.com/pypa/setuptools/issues/1042
--pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade "setuptools < 36"
-+pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade "setuptools < 36"
- 
--if pip --help | grep -q disable-pip-version-check; then
-+if pip2 --help | grep -q disable-pip-version-check; then
-     DISABLE_PIP_VERSION_CHECK=--disable-pip-version-check
- else
-     DISABLE_PIP_VERSION_CHECK=
-@@ -84,7 +84,7 @@ if test -d wheelhouse ; then
-     export NO_INDEX=--no-index
- fi
- 
--pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse 'tox >=2.9.1'
-+pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse 'tox >=2.9.1'
- if test -f requirements.txt ; then
--    pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse -r requirements.txt
-+    pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse -r requirements.txt
- fi

Copied: ceph/repos/community-staging-x86_64/fix-python2-paths.patch (from rev 1062932, ceph/trunk/fix-python2-paths.patch)
===================================================================
--- fix-python2-paths.patch	                        (rev 0)
+++ fix-python2-paths.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,52 @@
+--- a/CMakeLists.txt	2018-05-29 14:04:02.000000000 +0200
++++ b/CMakeLists.txt	2018-06-04 13:41:55.684455580 +0200
+@@ -49,7 +49,7 @@ endif(WITH_CCACHE)
+ option(WITH_MANPAGE "Build man pages." ON)
+ if(WITH_MANPAGE)
+   find_program(SPHINX_BUILD
+-    sphinx-build)
++    sphinx-build2)
+   if(NOT SPHINX_BUILD)
+     message(FATAL_ERROR "Can't find sphinx-build.")
+   endif(NOT SPHINX_BUILD)
+--- a/src/tools/setup-virtualenv.sh	2018-05-29 14:04:02.000000000 +0200
++++ b/src/tools/setup-virtualenv.sh	2018-06-04 13:43:24.767175961 +0200
+@@ -58,10 +58,10 @@ if [ -z "$DIR" ] ; then
+ fi
+ rm -fr $DIR
+ mkdir -p $DIR
+-virtualenv --python $PYTHON_BINARY $DIR
++virtualenv2 --python $PYTHON_BINARY $DIR
+ . $DIR/bin/activate
+ 
+-if pip --help | grep -q disable-pip-version-check; then
++if pip2 --help | grep -q disable-pip-version-check; then
+     DISABLE_PIP_VERSION_CHECK=--disable-pip-version-check
+ else
+     DISABLE_PIP_VERSION_CHECK=
+@@ -69,12 +69,12 @@ fi
+ 
+ # older versions of pip will not install wrap_console scripts
+ # when using wheel packages
+-pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade 'pip >= 6.1'
++pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade 'pip >= 6.1'
+ 
+ # workaround of https://github.com/pypa/setuptools/issues/1042
+-pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade "setuptools < 36"
++pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install --upgrade "setuptools < 36"
+ 
+-if pip --help | grep -q disable-pip-version-check; then
++if pip2 --help | grep -q disable-pip-version-check; then
+     DISABLE_PIP_VERSION_CHECK=--disable-pip-version-check
+ else
+     DISABLE_PIP_VERSION_CHECK=
+@@ -84,7 +84,7 @@ if test -d wheelhouse ; then
+     export NO_INDEX=--no-index
+ fi
+ 
+-pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse 'tox >=2.9.1'
++pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse 'tox >=2.9.1'
+ if test -f requirements.txt ; then
+-    pip $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse -r requirements.txt
++    pip2 $DISABLE_PIP_VERSION_CHECK --log $DIR/log.txt install $NO_INDEX --find-links=file://$(pwd)/wheelhouse -r requirements.txt
+ fi

Deleted: fix-tox-test-commands.patch
===================================================================
--- fix-tox-test-commands.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ fix-tox-test-commands.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,160 +0,0 @@
---- a/src/pybind/mgr/ansible/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/pybind/mgr/ansible/run-tox.sh	2019-07-14 16:36:54.220654727 +0200
-@@ -8,22 +8,22 @@
- test -d ansible && cd ansible
- 
- if [ -e tox.ini ]; then
--    TOX_PATH=$(readlink -f tox.ini)
-+    TOX_PATH="$(readlink -f tox.ini)"
- else
--    TOX_PATH=$(readlink -f $(dirname $0)/tox.ini)
-+    TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
- fi
- 
- # tox.ini will take care of this.
- unset PYTHONPATH
- export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
- 
--source ${MGR_ANSIBLE_VIRTUALENV}/bin/activate
-+source "${MGR_ANSIBLE_VIRTUALENV}"/bin/activate
- 
- if [ "$WITH_PYTHON2" = "ON" ]; then
-   ENV_LIST+="py27"
- fi
--if [ "$WITH_PYTHON3" = "ON" ]; then
-+if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
-   ENV_LIST+="py3"
- fi
- 
--tox -c ${TOX_PATH} -e ${ENV_LIST}
-+tox -c "${TOX_PATH}" -e "${ENV_LIST}"
---- a/src/pybind/mgr/dashboard/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/pybind/mgr/dashboard/run-tox.sh	2019-07-14 16:36:48.907269344 +0200
-@@ -8,30 +8,30 @@
- test -d dashboard && cd dashboard
- 
- if [ -e tox.ini ]; then
--    TOX_PATH=`readlink -f tox.ini`
-+  TOX_PATH="$(readlink -f tox.ini)"
- else
--    TOX_PATH=`readlink -f $(dirname $0)/tox.ini`
-+  TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
- fi
- 
- # tox.ini will take care of this.
- unset PYTHONPATH
- export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
- 
--source ${MGR_DASHBOARD_VIRTUALENV}/bin/activate
-+source "${MGR_DASHBOARD_VIRTUALENV}"/bin/activate
- 
--if [ "$WITH_PYTHON2" = "ON" ]; then
--  if [[ -n "$@" ]]; then
-+if [ "$WITH_PYTHON2" == "ON" ]; then
-+  if [[ -n "$*" ]]; then
-     ENV_LIST+="py27-run,"
-   else
-     ENV_LIST+="py27-cov,py27-lint,"
-   fi
- fi
--if [ "$WITH_PYTHON3" = "ON" ]; then
--  if [[ -n "$@" ]]; then
-+if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
-+  if [[ -n "$*" ]]; then
-     ENV_LIST+="py3-run"
-   else
-     ENV_LIST+="py3-cov,py3-lint"
-   fi
- fi
- 
--tox -c ${TOX_PATH} -e "$ENV_LIST" "$@"
-+tox -c "${TOX_PATH}" -e "$ENV_LIST" "$@"
---- a/src/pybind/mgr/insights/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/pybind/mgr/insights/run-tox.sh	2019-07-14 16:36:41.347195419 +0200
-@@ -8,22 +8,22 @@
- test -d insights && cd insights
- 
- if [ -e tox.ini ]; then
--    TOX_PATH=`readlink -f tox.ini`
-+  TOX_PATH="$(readlink -f tox.ini)"
- else
--    TOX_PATH=`readlink -f $(dirname $0)/tox.ini`
-+  TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
- fi
- 
- # tox.ini will take care of this.
- unset PYTHONPATH
- export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
- 
--source ${MGR_INSIGHTS_VIRTUALENV}/bin/activate
-+source "${MGR_INSIGHTS_VIRTUALENV}"/bin/activate
- 
- if [ "$WITH_PYTHON2" = "ON" ]; then
-   ENV_LIST+="py27"
- fi
--if [ "$WITH_PYTHON3" = "ON" ]; then
-+if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
-   ENV_LIST+="py3"
- fi
- 
--tox -c ${TOX_PATH} -e ${ENV_LIST}
-+tox -c "${TOX_PATH}" -e "${ENV_LIST}"
---- a/src/pybind/mgr/orchestrator_cli/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/pybind/mgr/orchestrator_cli/run-tox.sh	2019-07-14 16:37:01.734061798 +0200
-@@ -8,25 +8,24 @@
- test -d orchestrator_cli && cd orchestrator_cli
- 
- if [ -e tox.ini ]; then
--    TOX_PATH=$(readlink -f tox.ini)
-+    TOX_PATH="$(readlink -f tox.ini)"
- else
--    TOX_PATH=$(readlink -f $(dirname $0)/tox.ini)
-+    TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
- fi
- 
- # tox.ini will take care of this.
- unset PYTHONPATH
- export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
- 
--if [ -f ${MGR_ORCHESTRATOR_CLI_VIRTUALENV}/bin/activate ]
--then
--  source ${MGR_ORCHESTRATOR_CLI_VIRTUALENV}/bin/activate
-+if [[ -r "${MGR_ORCHESTRATOR_CLI_VIRTUALENV}"/bin/activate ]]; then
-+  source "${MGR_ORCHESTRATOR_CLI_VIRTUALENV}"/bin/activate
- fi
- 
- if [ "$WITH_PYTHON2" = "ON" ]; then
-   ENV_LIST+="py27"
- fi
--if [ "$WITH_PYTHON3" = "ON" ]; then
--  ENV_LIST+=",py3"
-+if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
-+  ENV_LIST+="py3"
- fi
- 
--tox -c ${TOX_PATH} -e ${ENV_LIST}
-+tox -c "${TOX_PATH}" -e "${ENV_LIST}"
---- a/src/pybind/mgr/dashboard/tox.ini	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/pybind/mgr/dashboard/tox.ini	2019-07-15 12:36:39.693948289 +0200
-@@ -1,5 +1,5 @@
- [tox]
--envlist = py27-{cov,lint,run},py3-{cov,lint,run}
-+envlist = py3-{cov,lint,run}
- skipsdist = true
- toxworkdir = {env:CEPH_BUILD_DIR}/dashboard
- minversion = 2.8.1
-@@ -11,13 +11,12 @@ setenv=
-     WEBTEST_INTERACTIVE = false
-     LD_LIBRARY_PATH = {toxinidir}/../../../../build/lib
-     PATH = {toxinidir}/../../../../build/bin:$PATH
--    py27: PYTHONPATH = {toxinidir}/../../../../build/lib/cython_modules/lib.2
-     py3:  PYTHONPATH = {toxinidir}/../../../../build/lib/cython_modules/lib.3
-     cov:  UNITTEST = true
-     cov:  COVERAGE_FILE = .coverage.{envname}
- commands=
-     pip install -r {toxinidir}/requirements.txt
--    py27: pip install -r {toxinidir}/requirements-py27.txt
-+;    py27: pip install -r {toxinidir}/requirements-py27.txt
-     py3: pip install -r {toxinidir}/requirements-py3.txt
-     cov: coverage erase
-     cov: {envbindir}/py.test --cov=. --cov-report= --junitxml=junit.{envname}.xml --doctest-modules controllers/rbd.py services/ tests/ tools.py

Copied: ceph/repos/community-staging-x86_64/fix-tox-test-commands.patch (from rev 1062932, ceph/trunk/fix-tox-test-commands.patch)
===================================================================
--- fix-tox-test-commands.patch	                        (rev 0)
+++ fix-tox-test-commands.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,160 @@
+--- a/src/pybind/mgr/ansible/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
++++ b/src/pybind/mgr/ansible/run-tox.sh	2019-07-14 16:36:54.220654727 +0200
+@@ -8,22 +8,22 @@
+ test -d ansible && cd ansible
+ 
+ if [ -e tox.ini ]; then
+-    TOX_PATH=$(readlink -f tox.ini)
++    TOX_PATH="$(readlink -f tox.ini)"
+ else
+-    TOX_PATH=$(readlink -f $(dirname $0)/tox.ini)
++    TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
+ fi
+ 
+ # tox.ini will take care of this.
+ unset PYTHONPATH
+ export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
+ 
+-source ${MGR_ANSIBLE_VIRTUALENV}/bin/activate
++source "${MGR_ANSIBLE_VIRTUALENV}"/bin/activate
+ 
+ if [ "$WITH_PYTHON2" = "ON" ]; then
+   ENV_LIST+="py27"
+ fi
+-if [ "$WITH_PYTHON3" = "ON" ]; then
++if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
+   ENV_LIST+="py3"
+ fi
+ 
+-tox -c ${TOX_PATH} -e ${ENV_LIST}
++tox -c "${TOX_PATH}" -e "${ENV_LIST}"
+--- a/src/pybind/mgr/dashboard/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
++++ b/src/pybind/mgr/dashboard/run-tox.sh	2019-07-14 16:36:48.907269344 +0200
+@@ -8,30 +8,30 @@
+ test -d dashboard && cd dashboard
+ 
+ if [ -e tox.ini ]; then
+-    TOX_PATH=`readlink -f tox.ini`
++  TOX_PATH="$(readlink -f tox.ini)"
+ else
+-    TOX_PATH=`readlink -f $(dirname $0)/tox.ini`
++  TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
+ fi
+ 
+ # tox.ini will take care of this.
+ unset PYTHONPATH
+ export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
+ 
+-source ${MGR_DASHBOARD_VIRTUALENV}/bin/activate
++source "${MGR_DASHBOARD_VIRTUALENV}"/bin/activate
+ 
+-if [ "$WITH_PYTHON2" = "ON" ]; then
+-  if [[ -n "$@" ]]; then
++if [ "$WITH_PYTHON2" == "ON" ]; then
++  if [[ -n "$*" ]]; then
+     ENV_LIST+="py27-run,"
+   else
+     ENV_LIST+="py27-cov,py27-lint,"
+   fi
+ fi
+-if [ "$WITH_PYTHON3" = "ON" ]; then
+-  if [[ -n "$@" ]]; then
++if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
++  if [[ -n "$*" ]]; then
+     ENV_LIST+="py3-run"
+   else
+     ENV_LIST+="py3-cov,py3-lint"
+   fi
+ fi
+ 
+-tox -c ${TOX_PATH} -e "$ENV_LIST" "$@"
++tox -c "${TOX_PATH}" -e "$ENV_LIST" "$@"
+--- a/src/pybind/mgr/insights/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
++++ b/src/pybind/mgr/insights/run-tox.sh	2019-07-14 16:36:41.347195419 +0200
+@@ -8,22 +8,22 @@
+ test -d insights && cd insights
+ 
+ if [ -e tox.ini ]; then
+-    TOX_PATH=`readlink -f tox.ini`
++  TOX_PATH="$(readlink -f tox.ini)"
+ else
+-    TOX_PATH=`readlink -f $(dirname $0)/tox.ini`
++  TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
+ fi
+ 
+ # tox.ini will take care of this.
+ unset PYTHONPATH
+ export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
+ 
+-source ${MGR_INSIGHTS_VIRTUALENV}/bin/activate
++source "${MGR_INSIGHTS_VIRTUALENV}"/bin/activate
+ 
+ if [ "$WITH_PYTHON2" = "ON" ]; then
+   ENV_LIST+="py27"
+ fi
+-if [ "$WITH_PYTHON3" = "ON" ]; then
++if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
+   ENV_LIST+="py3"
+ fi
+ 
+-tox -c ${TOX_PATH} -e ${ENV_LIST}
++tox -c "${TOX_PATH}" -e "${ENV_LIST}"
+--- a/src/pybind/mgr/orchestrator_cli/run-tox.sh	2019-04-25 20:15:48.000000000 +0200
++++ b/src/pybind/mgr/orchestrator_cli/run-tox.sh	2019-07-14 16:37:01.734061798 +0200
+@@ -8,25 +8,24 @@
+ test -d orchestrator_cli && cd orchestrator_cli
+ 
+ if [ -e tox.ini ]; then
+-    TOX_PATH=$(readlink -f tox.ini)
++    TOX_PATH="$(readlink -f tox.ini)"
+ else
+-    TOX_PATH=$(readlink -f $(dirname $0)/tox.ini)
++    TOX_PATH="$(readlink -f "$(dirname "$0")"/tox.ini)"
+ fi
+ 
+ # tox.ini will take care of this.
+ unset PYTHONPATH
+ export CEPH_BUILD_DIR=$CEPH_BUILD_DIR
+ 
+-if [ -f ${MGR_ORCHESTRATOR_CLI_VIRTUALENV}/bin/activate ]
+-then
+-  source ${MGR_ORCHESTRATOR_CLI_VIRTUALENV}/bin/activate
++if [[ -r "${MGR_ORCHESTRATOR_CLI_VIRTUALENV}"/bin/activate ]]; then
++  source "${MGR_ORCHESTRATOR_CLI_VIRTUALENV}"/bin/activate
+ fi
+ 
+ if [ "$WITH_PYTHON2" = "ON" ]; then
+   ENV_LIST+="py27"
+ fi
+-if [ "$WITH_PYTHON3" = "ON" ]; then
+-  ENV_LIST+=",py3"
++if [[ "$WITH_PYTHON3" == "ON" || "$WITH_PYTHON3" == "3" ]]; then
++  ENV_LIST+="py3"
+ fi
+ 
+-tox -c ${TOX_PATH} -e ${ENV_LIST}
++tox -c "${TOX_PATH}" -e "${ENV_LIST}"
+--- a/src/pybind/mgr/dashboard/tox.ini	2019-04-25 20:15:48.000000000 +0200
++++ b/src/pybind/mgr/dashboard/tox.ini	2019-07-15 12:36:39.693948289 +0200
+@@ -1,5 +1,5 @@
+ [tox]
+-envlist = py27-{cov,lint,run},py3-{cov,lint,run}
++envlist = py3-{cov,lint,run}
+ skipsdist = true
+ toxworkdir = {env:CEPH_BUILD_DIR}/dashboard
+ minversion = 2.8.1
+@@ -11,13 +11,12 @@ setenv=
+     WEBTEST_INTERACTIVE = false
+     LD_LIBRARY_PATH = {toxinidir}/../../../../build/lib
+     PATH = {toxinidir}/../../../../build/bin:$PATH
+-    py27: PYTHONPATH = {toxinidir}/../../../../build/lib/cython_modules/lib.2
+     py3:  PYTHONPATH = {toxinidir}/../../../../build/lib/cython_modules/lib.3
+     cov:  UNITTEST = true
+     cov:  COVERAGE_FILE = .coverage.{envname}
+ commands=
+     pip install -r {toxinidir}/requirements.txt
+-    py27: pip install -r {toxinidir}/requirements-py27.txt
++;    py27: pip install -r {toxinidir}/requirements-py27.txt
+     py3: pip install -r {toxinidir}/requirements-py3.txt
+     cov: coverage erase
+     cov: {envbindir}/py.test --cov=. --cov-report= --junitxml=junit.{envname}.xml --doctest-modules controllers/rbd.py services/ tests/ tools.py

Deleted: fix_snappy_namespace_uint.patch
===================================================================
--- fix_snappy_namespace_uint.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ fix_snappy_namespace_uint.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,12 +0,0 @@
-diff -upr a/src/compressor/snappy/SnappyCompressor.h b/src/compressor/snappy/SnappyCompressor.h
---- a/src/compressor/snappy/SnappyCompressor.h	2021-08-05 19:11:54.000000000 +0200
-+++ b/src/compressor/snappy/SnappyCompressor.h	2021-09-01 17:38:35.488609568 +0200
-@@ -96,7 +96,7 @@ class SnappyCompressor : public Compress
-     if (qat_enabled)
-       return qat_accel.decompress(p, compressed_len, dst);
- #endif
--    snappy::uint32 res_len = 0;
-+    std::uint32_t res_len = 0;
-     BufferlistSource source_1(p, compressed_len);
-     if (!snappy::GetUncompressedLength(&source_1, &res_len)) {
-       return -1;

Copied: ceph/repos/community-staging-x86_64/fix_snappy_namespace_uint.patch (from rev 1062932, ceph/trunk/fix_snappy_namespace_uint.patch)
===================================================================
--- fix_snappy_namespace_uint.patch	                        (rev 0)
+++ fix_snappy_namespace_uint.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,12 @@
+diff -upr a/src/compressor/snappy/SnappyCompressor.h b/src/compressor/snappy/SnappyCompressor.h
+--- a/src/compressor/snappy/SnappyCompressor.h	2021-08-05 19:11:54.000000000 +0200
++++ b/src/compressor/snappy/SnappyCompressor.h	2021-09-01 17:38:35.488609568 +0200
+@@ -96,7 +96,7 @@ class SnappyCompressor : public Compress
+     if (qat_enabled)
+       return qat_accel.decompress(p, compressed_len, dst);
+ #endif
+-    snappy::uint32 res_len = 0;
++    std::uint32_t res_len = 0;
+     BufferlistSource source_1(p, compressed_len);
+     if (!snappy::GetUncompressedLength(&source_1, &res_len)) {
+       return -1;

Deleted: glibc2.32-strsignal-compat-backported.patch
===================================================================
--- glibc2.32-strsignal-compat-backported.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ glibc2.32-strsignal-compat-backported.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,63 +0,0 @@
-From b9b6faf66ae67648626470cb4fc3f0850ac4d842 Mon Sep 17 00:00:00 2001
-From: David Disseldorp <ddiss at suse.de>
-Date: Tue, 1 Sep 2020 13:49:21 +0200
-Subject: [PATCH] cmake: detect and use sigdescr_np() if available
-
-sys_siglist is deprecated with glibc 2.32. A new thread-safe and
-async-signal safe sigdescr_np() function is provided, so use it if
-available.
-
-Fixes: https://tracker.ceph.com/issues/47187
-Signed-off-by: David Disseldorp <ddiss at suse.de>
----
- cmake/modules/CephChecks.cmake | 1 +
- src/global/signal_handler.h    | 8 +++++---
- src/include/config-h.in.cmake  | 3 +++
- 3 files changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/cmake/modules/CephChecks.cmake b/cmake/modules/CephChecks.cmake
-index 23687283a7c6..ca86dcbc73de 100644
---- a/cmake/modules/CephChecks.cmake
-+++ b/cmake/modules/CephChecks.cmake
-@@ -24,6 +24,7 @@ check_function_exists(strerror_r HAVE_Strerror_R)
- check_function_exists(name_to_handle_at HAVE_NAME_TO_HANDLE_AT)
- check_function_exists(pipe2 HAVE_PIPE2)
- check_function_exists(accept4 HAVE_ACCEPT4)
-+check_function_exists(sigdescr_np HAVE_SIGDESCR_NP)
- 
- include(CMakePushCheckState)
- cmake_push_check_state(RESET)
-diff --git a/src/global/signal_handler.h b/src/global/signal_handler.h
-index 476724201aa9..c101b2e28733 100644
---- a/src/global/signal_handler.h
-+++ b/src/global/signal_handler.h
-@@ -20,10 +20,12 @@
- 
- typedef void (*signal_handler_t)(int);
- 
--#ifndef HAVE_REENTRANT_STRSIGNAL
--# define sig_str(signum) sys_siglist[signum]
--#else
-+#ifdef HAVE_SIGDESCR_NP
-+# define sig_str(signum) sigdescr_np(signum)
-+#elif HAVE_REENTRANT_STRSIGNAL
- # define sig_str(signum) strsignal(signum)
-+#else
-+# define sig_str(signum) sys_siglist[signum]
- #endif
- 
- void install_sighandler(int signum, signal_handler_t handler, int flags);
-diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake
-index 1ea3703f620c..59bd4273511a 100644
---- a/src/include/config-h.in.cmake
-+++ b/src/include/config-h.in.cmake
-@@ -220,6 +220,9 @@
- /* Define to 1 if you have sched.h. */
- #cmakedefine HAVE_SCHED 1
- 
-+/* Define to 1 if you have sigdescr_np. */
-+#cmakedefine HAVE_SIGDESCR_NP 1
-+
- /* Support SSE (Streaming SIMD Extensions) instructions */
- #cmakedefine HAVE_SSE
- 

Copied: ceph/repos/community-staging-x86_64/glibc2.32-strsignal-compat-backported.patch (from rev 1062932, ceph/trunk/glibc2.32-strsignal-compat-backported.patch)
===================================================================
--- glibc2.32-strsignal-compat-backported.patch	                        (rev 0)
+++ glibc2.32-strsignal-compat-backported.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,63 @@
+From b9b6faf66ae67648626470cb4fc3f0850ac4d842 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <ddiss at suse.de>
+Date: Tue, 1 Sep 2020 13:49:21 +0200
+Subject: [PATCH] cmake: detect and use sigdescr_np() if available
+
+sys_siglist is deprecated with glibc 2.32. A new thread-safe and
+async-signal safe sigdescr_np() function is provided, so use it if
+available.
+
+Fixes: https://tracker.ceph.com/issues/47187
+Signed-off-by: David Disseldorp <ddiss at suse.de>
+---
+ cmake/modules/CephChecks.cmake | 1 +
+ src/global/signal_handler.h    | 8 +++++---
+ src/include/config-h.in.cmake  | 3 +++
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/cmake/modules/CephChecks.cmake b/cmake/modules/CephChecks.cmake
+index 23687283a7c6..ca86dcbc73de 100644
+--- a/cmake/modules/CephChecks.cmake
++++ b/cmake/modules/CephChecks.cmake
+@@ -24,6 +24,7 @@ check_function_exists(strerror_r HAVE_Strerror_R)
+ check_function_exists(name_to_handle_at HAVE_NAME_TO_HANDLE_AT)
+ check_function_exists(pipe2 HAVE_PIPE2)
+ check_function_exists(accept4 HAVE_ACCEPT4)
++check_function_exists(sigdescr_np HAVE_SIGDESCR_NP)
+ 
+ include(CMakePushCheckState)
+ cmake_push_check_state(RESET)
+diff --git a/src/global/signal_handler.h b/src/global/signal_handler.h
+index 476724201aa9..c101b2e28733 100644
+--- a/src/global/signal_handler.h
++++ b/src/global/signal_handler.h
+@@ -20,10 +20,12 @@
+ 
+ typedef void (*signal_handler_t)(int);
+ 
+-#ifndef HAVE_REENTRANT_STRSIGNAL
+-# define sig_str(signum) sys_siglist[signum]
+-#else
++#ifdef HAVE_SIGDESCR_NP
++# define sig_str(signum) sigdescr_np(signum)
++#elif HAVE_REENTRANT_STRSIGNAL
+ # define sig_str(signum) strsignal(signum)
++#else
++# define sig_str(signum) sys_siglist[signum]
+ #endif
+ 
+ void install_sighandler(int signum, signal_handler_t handler, int flags);
+diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake
+index 1ea3703f620c..59bd4273511a 100644
+--- a/src/include/config-h.in.cmake
++++ b/src/include/config-h.in.cmake
+@@ -220,6 +220,9 @@
+ /* Define to 1 if you have sched.h. */
+ #cmakedefine HAVE_SCHED 1
+ 
++/* Define to 1 if you have sigdescr_np. */
++#cmakedefine HAVE_SIGDESCR_NP 1
++
+ /* Support SSE (Streaming SIMD Extensions) instructions */
+ #cmakedefine HAVE_SSE
+ 

Deleted: mgr-dashboard-update-pylint-to-2.6.0.patch
===================================================================
--- mgr-dashboard-update-pylint-to-2.6.0.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ mgr-dashboard-update-pylint-to-2.6.0.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,671 +0,0 @@
-From e4f179fa960ed18e8f45bc87d26552d720bc819b Mon Sep 17 00:00:00 2001
-From: Volker Theile <vtheile at suse.com>
-Date: Fri, 25 Sep 2020 13:17:19 +0200
-Subject: [PATCH] mgr/dashboard: update pylint to 2.6.0
-
-* Update pylint to 2.6.0.
-* Fix pylint issues.
-
-Fixes: https://tracker.ceph.com/issues/47647
-
-(cherry picked from commit 298c91958a41674a928d53f010b20f174f16d68f)
----
- src/pybind/mgr/dashboard/.pylintrc            |  8 ++++++--
- .../mgr/dashboard/controllers/nfsganesha.py   |  2 +-
- src/pybind/mgr/dashboard/controllers/osd.py   |  2 +-
- src/pybind/mgr/dashboard/plugins/__init__.py  |  2 +-
- .../mgr/dashboard/requirements-lint.txt       |  2 +-
- src/pybind/mgr/dashboard/services/auth.py     |  1 -
- .../mgr/dashboard/services/ceph_service.py    |  2 +-
- src/pybind/mgr/dashboard/services/cephx.py    |  2 +-
- src/pybind/mgr/dashboard/services/ganesha.py  | 20 +++++++++----------
- .../mgr/dashboard/services/iscsi_client.py    |  2 +-
- .../mgr/dashboard/services/iscsi_config.py    |  2 +-
- src/pybind/mgr/dashboard/services/progress.py |  2 +-
- .../mgr/dashboard/services/rgw_client.py      |  3 ++-
- src/pybind/mgr/dashboard/tests/__init__.py    |  2 +-
- src/pybind/mgr/dashboard/tests/helper.py      |  2 +-
- .../dashboard/tests/test_access_control.py    |  2 +-
- .../mgr/dashboard/tests/test_api_auditing.py  |  2 +-
- src/pybind/mgr/dashboard/tests/test_cephfs.py |  2 +-
- .../mgr/dashboard/tests/test_controllers.py   |  2 +-
- src/pybind/mgr/dashboard/tests/test_docs.py   |  2 +-
- .../tests/test_erasure_code_profile.py        |  2 +-
- .../mgr/dashboard/tests/test_exceptions.py    |  2 +-
- .../dashboard/tests/test_feature_toggles.py   |  2 +-
- .../mgr/dashboard/tests/test_ganesha.py       |  2 +-
- .../mgr/dashboard/tests/test_grafana.py       |  2 +-
- src/pybind/mgr/dashboard/tests/test_home.py   |  2 +-
- src/pybind/mgr/dashboard/tests/test_host.py   |  2 +-
- src/pybind/mgr/dashboard/tests/test_iscsi.py  |  3 ++-
- .../mgr/dashboard/tests/test_orchestrator.py  |  2 +-
- src/pybind/mgr/dashboard/tests/test_osd.py    |  4 ++--
- .../mgr/dashboard/tests/test_plugin_debug.py  |  2 +-
- src/pybind/mgr/dashboard/tests/test_pool.py   |  2 +-
- .../mgr/dashboard/tests/test_prometheus.py    |  2 +-
- .../mgr/dashboard/tests/test_rbd_mirroring.py |  2 +-
- .../mgr/dashboard/tests/test_rest_tasks.py    |  2 +-
- src/pybind/mgr/dashboard/tests/test_rgw.py    |  2 +-
- .../mgr/dashboard/tests/test_rgw_client.py    |  2 +-
- .../mgr/dashboard/tests/test_settings.py      |  2 +-
- src/pybind/mgr/dashboard/tests/test_sso.py    |  3 ++-
- src/pybind/mgr/dashboard/tests/test_tools.py  |  2 +-
- src/pybind/mgr/dashboard/tools.py             |  2 +-
- 41 files changed, 58 insertions(+), 52 deletions(-)
-
-diff --git a/src/pybind/mgr/dashboard/.pylintrc b/src/pybind/mgr/dashboard/.pylintrc
-index 404a16a2e6..c4bf033cda 100644
---- a/src/pybind/mgr/dashboard/.pylintrc
-+++ b/src/pybind/mgr/dashboard/.pylintrc
-@@ -15,7 +15,7 @@ ignore-patterns=
- 
- # Python code to execute, usually for sys.path manipulation such as
- # pygtk.require().
--#init-hook=
-+init-hook='import sys; sys.path.append("./")'
- 
- # Use multiple processes to speed up Pylint.
- jobs=1
-@@ -118,7 +118,11 @@ disable=import-star-module-level,
-         too-many-arguments,
-         too-many-locals,
-         too-many-statements,
--        useless-object-inheritance
-+        useless-object-inheritance,
-+        relative-beyond-top-level,
-+        raise-missing-from,
-+        super-with-arguments,
-+        import-outside-toplevel
- 
- 
- # Enable the message, report, category or checker with the given id(s). You can
-diff --git a/src/pybind/mgr/dashboard/controllers/nfsganesha.py b/src/pybind/mgr/dashboard/controllers/nfsganesha.py
-index 1219f78b95..510b37a712 100644
---- a/src/pybind/mgr/dashboard/controllers/nfsganesha.py
-+++ b/src/pybind/mgr/dashboard/controllers/nfsganesha.py
-@@ -272,7 +272,7 @@ class NFSGaneshaService(RESTController):
- class NFSGaneshaUi(BaseController):
-     @Endpoint('GET', '/cephx/clients')
-     def cephx_clients(self):
--        return [client for client in CephX.list_clients()]
-+        return list(CephX.list_clients())
- 
-     @Endpoint('GET', '/fsals')
-     def fsals(self):
-diff --git a/src/pybind/mgr/dashboard/controllers/osd.py b/src/pybind/mgr/dashboard/controllers/osd.py
-index 2731ad0ffc..f95951cba2 100644
---- a/src/pybind/mgr/dashboard/controllers/osd.py
-+++ b/src/pybind/mgr/dashboard/controllers/osd.py
-@@ -272,7 +272,7 @@ class Osd(RESTController):
- 
-     @CreatePermission
-     @osd_task('create', {'tracking_id': '{tracking_id}'})
--    def create(self, method, data, tracking_id):  # pylint: disable=W0622
-+    def create(self, method, data, tracking_id):  # pylint: disable=unused-argument
-         if method == 'bare':
-             return self._create_bare(data)
-         if method == 'drive_groups':
-diff --git a/src/pybind/mgr/dashboard/plugins/__init__.py b/src/pybind/mgr/dashboard/plugins/__init__.py
-index 8973654770..3e3aca4001 100644
---- a/src/pybind/mgr/dashboard/plugins/__init__.py
-+++ b/src/pybind/mgr/dashboard/plugins/__init__.py
-@@ -71,4 +71,4 @@ class DashboardPluginManager(object):
- PLUGIN_MANAGER = DashboardPluginManager("ceph-mgr.dashboard")
- 
- # Load all interfaces and their hooks
--from . import interfaces  # noqa: F401 pylint: disable=wrong-import-position,cyclic-import
-+from . import interfaces  # noqa pylint: disable=C0413,W0406
-diff --git a/src/pybind/mgr/dashboard/requirements-lint.txt b/src/pybind/mgr/dashboard/requirements-lint.txt
-index 8f68ad3856..f01fa54e6e 100644
---- a/src/pybind/mgr/dashboard/requirements-lint.txt
-+++ b/src/pybind/mgr/dashboard/requirements-lint.txt
-@@ -1,4 +1,4 @@
--pylint==2.3.1; python_version >= '3'
-+pylint==2.6.0
- flake8==3.7.8; python_version >= '3'
- flake8-colors==0.1.6; python_version >= '3'
- #TODO: Fix docstring issues: https://tracker.ceph.com/issues/41224
-diff --git a/src/pybind/mgr/dashboard/services/auth.py b/src/pybind/mgr/dashboard/services/auth.py
-index d829362e63..475d501263 100644
---- a/src/pybind/mgr/dashboard/services/auth.py
-+++ b/src/pybind/mgr/dashboard/services/auth.py
-@@ -177,7 +177,6 @@ class AuthManagerTool(cherrypy.Tool):
- 
-     def _check_authorization(self, username):
-         self.logger.debug("checking authorization...")
--        username = username
-         handler = cherrypy.request.handler.callable
-         controller = handler.__self__
-         sec_scope = getattr(controller, '_security_scope', None)
-diff --git a/src/pybind/mgr/dashboard/services/ceph_service.py b/src/pybind/mgr/dashboard/services/ceph_service.py
-index a6eee2957e..89582e3f73 100644
---- a/src/pybind/mgr/dashboard/services/ceph_service.py
-+++ b/src/pybind/mgr/dashboard/services/ceph_service.py
-@@ -12,7 +12,7 @@ from .. import mgr
- from ..exceptions import DashboardException
- 
- try:
--    from typing import Dict, Any, Union  # pylint: disable=unused-import
-+    from typing import Dict, Any, Union
- except ImportError:
-     pass  # For typing only
- 
-diff --git a/src/pybind/mgr/dashboard/services/cephx.py b/src/pybind/mgr/dashboard/services/cephx.py
-index ccda387961..60303ad85f 100644
---- a/src/pybind/mgr/dashboard/services/cephx.py
-+++ b/src/pybind/mgr/dashboard/services/cephx.py
-@@ -22,7 +22,7 @@ class CephX(object):
- 
-     @classmethod
-     def list_clients(cls):
--        return [client for client in cls._clients_map()]
-+        return list(cls._clients_map())
- 
-     @classmethod
-     def get_client_key(cls, client_id):
-diff --git a/src/pybind/mgr/dashboard/services/ganesha.py b/src/pybind/mgr/dashboard/services/ganesha.py
-index e9144db406..764ebb3739 100644
---- a/src/pybind/mgr/dashboard/services/ganesha.py
-+++ b/src/pybind/mgr/dashboard/services/ganesha.py
-@@ -69,7 +69,7 @@ class Ganesha(object):
- 
-     @classmethod
-     def get_ganesha_clusters(cls):
--        return [cluster_id for cluster_id in cls._get_clusters_locations()]
-+        return list(cls._get_clusters_locations())
- 
-     @staticmethod
-     def _get_orch_nfs_instances():
-@@ -325,7 +325,7 @@ class GaneshaConfParser(object):
-         for key, val in block.items():
-             if key == 'block_name':
-                 continue
--            elif key == '_blocks_':
-+            if key == '_blocks_':
-                 for blo in val:
-                     conf_str += GaneshaConfParser.write_block(blo, depth)
-             elif val:
-@@ -693,21 +693,21 @@ class Export(object):
-             result['attr_expiration_time'] = self.attr_expiration_time
-             result['security_label'] = self.security_label
-         if 'protocols' not in defaults:
--            result['protocols'] = [p for p in self.protocols]
-+            result['protocols'] = list(self.protocols)
-         else:
-             def_proto = defaults['protocols']
-             if not isinstance(def_proto, list):
-                 def_proto = set([def_proto])
-             if self.protocols != def_proto:
--                result['protocols'] = [p for p in self.protocols]
-+                result['protocols'] = list(self.protocols)
-         if 'transports' not in defaults:
--            result['transports'] = [t for t in self.transports]
-+            result['transports'] = list(self.transports)
-         else:
-             def_transp = defaults['transports']
-             if not isinstance(def_transp, list):
-                 def_transp = set([def_transp])
-             if self.transports != def_transp:
--                result['transports'] = [t for t in self.transports]
-+                result['transports'] = list(self.transports)
- 
-         result['_blocks_'] = [self.fsal.to_fsal_block()]
-         result['_blocks_'].extend([client.to_client_block()
-@@ -737,14 +737,14 @@ class Export(object):
-             'path': self.path,
-             'fsal': self.fsal.to_dict(),
-             'cluster_id': self.cluster_id,
--            'daemons': sorted([d for d in self.daemons]),
-+            'daemons': sorted(list(self.daemons)),
-             'pseudo': self.pseudo,
-             'tag': self.tag,
-             'access_type': self.access_type,
-             'squash': self.squash,
-             'security_label': self.security_label,
--            'protocols': sorted([p for p in self.protocols]),
--            'transports': sorted([t for t in self.transports]),
-+            'protocols': sorted(list(self.protocols)),
-+            'transports': sorted(list(self.transports)),
-             'clients': [client.to_dict() for client in self.clients]
-         }
- 
-@@ -992,7 +992,7 @@ class GaneshaConf(object):
-         return None
- 
-     def list_daemons(self):
--        return [daemon_id for daemon_id in self.daemons_conf_blocks]
-+        return list(self.daemons_conf_blocks)
- 
-     def reload_daemons(self, daemons):
-         with mgr.rados.open_ioctx(self.rados_pool) as ioctx:
-diff --git a/src/pybind/mgr/dashboard/services/iscsi_client.py b/src/pybind/mgr/dashboard/services/iscsi_client.py
-index b82a51a3d4..c5a6dfa0e7 100644
---- a/src/pybind/mgr/dashboard/services/iscsi_client.py
-+++ b/src/pybind/mgr/dashboard/services/iscsi_client.py
-@@ -12,7 +12,7 @@ try:
- except ImportError:
-     from urllib.parse import urlparse
- 
--from .iscsi_config import IscsiGatewaysConfig  # pylint: disable=cyclic-import
-+from .iscsi_config import IscsiGatewaysConfig
- from ..settings import Settings
- from ..rest_client import RestClient
- 
-diff --git a/src/pybind/mgr/dashboard/services/iscsi_config.py b/src/pybind/mgr/dashboard/services/iscsi_config.py
-index ab90048500..86bdfc770d 100644
---- a/src/pybind/mgr/dashboard/services/iscsi_config.py
-+++ b/src/pybind/mgr/dashboard/services/iscsi_config.py
-@@ -57,7 +57,7 @@ class IscsiGatewaysConfig(object):
-         """
-         for gateway_name, gateway_config in config['gateways'].items():
-             if '.' not in gateway_name:
--                from .iscsi_client import IscsiClient
-+                from .iscsi_client import IscsiClient  # pylint: disable=cyclic-import
-                 from ..rest_client import RequestException
-                 try:
-                     service_url = gateway_config['service_url']
-diff --git a/src/pybind/mgr/dashboard/services/progress.py b/src/pybind/mgr/dashboard/services/progress.py
-index d8cf7521fa..d7b9ed973b 100644
---- a/src/pybind/mgr/dashboard/services/progress.py
-+++ b/src/pybind/mgr/dashboard/services/progress.py
-@@ -12,7 +12,7 @@ from __future__ import absolute_import
- from datetime import datetime
- import logging
- 
--from . import rbd
-+from . import rbd  # pylint: disable=no-name-in-module
- from .. import mgr
- 
- 
-diff --git a/src/pybind/mgr/dashboard/services/rgw_client.py b/src/pybind/mgr/dashboard/services/rgw_client.py
-index 5507eb6800..aee18acc54 100644
---- a/src/pybind/mgr/dashboard/services/rgw_client.py
-+++ b/src/pybind/mgr/dashboard/services/rgw_client.py
-@@ -16,7 +16,7 @@ from ..tools import build_url, dict_contains_path, json_str_to_object,\
- from .. import mgr
- 
- try:
--    from typing import Dict, List, Optional  # pylint: disable=unused-import
-+    from typing import Dict, List, Optional
- except ImportError:
-     pass  # For typing only
- 
-@@ -303,6 +303,7 @@ class RgwClient(RestClient):
-         if self.userid != RgwClient._SYSTEM_USERID:
-             logger.info("Fetching new keys for user: %s", self.userid)
-             keys = RgwClient.admin_instance().get_user_keys(self.userid)
-+            # pylint: disable=attribute-defined-outside-init
-             self.auth = S3Auth(keys['access_key'], keys['secret_key'],
-                                service_url=self.service_url)
-         else:
-diff --git a/src/pybind/mgr/dashboard/tests/__init__.py b/src/pybind/mgr/dashboard/tests/__init__.py
-index 421378a155..8eb5bb8af1 100644
---- a/src/pybind/mgr/dashboard/tests/__init__.py
-+++ b/src/pybind/mgr/dashboard/tests/__init__.py
-@@ -21,7 +21,7 @@ from ..services.auth import AuthManagerTool
- from ..services.exception import dashboard_exception_handler
- 
- from ..plugins import PLUGIN_MANAGER
--from ..plugins import feature_toggles, debug  # noqa # pylint: disable=unused-import
-+from ..plugins import feature_toggles, debug  # noqa
- 
- 
- PLUGIN_MANAGER.hook.init()
-diff --git a/src/pybind/mgr/dashboard/tests/helper.py b/src/pybind/mgr/dashboard/tests/helper.py
-index 9ec043d6be..06b83d42a8 100644
---- a/src/pybind/mgr/dashboard/tests/helper.py
-+++ b/src/pybind/mgr/dashboard/tests/helper.py
-@@ -2,7 +2,7 @@
- from __future__ import absolute_import
- 
- try:
--    from typing import Dict, Any  # pylint: disable=unused-import
-+    from typing import Dict, Any
- except ImportError:
-     pass
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_access_control.py b/src/pybind/mgr/dashboard/tests/test_access_control.py
-index 0039efc167..81604a161e 100644
---- a/src/pybind/mgr/dashboard/tests/test_access_control.py
-+++ b/src/pybind/mgr/dashboard/tests/test_access_control.py
-@@ -9,7 +9,7 @@ import unittest
- 
- from datetime import datetime, timedelta
- 
--from . import CmdException, CLICommandTestMixin
-+from . import CmdException, CLICommandTestMixin  # pylint: disable=no-name-in-module
- from .. import mgr
- from ..security import Scope, Permission
- from ..services.access_control import load_access_control_db, \
-diff --git a/src/pybind/mgr/dashboard/tests/test_api_auditing.py b/src/pybind/mgr/dashboard/tests/test_api_auditing.py
-index 0416c03638..023ea7992a 100644
---- a/src/pybind/mgr/dashboard/tests/test_api_auditing.py
-+++ b/src/pybind/mgr/dashboard/tests/test_api_auditing.py
-@@ -9,7 +9,7 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import ControllerTestCase, KVStoreMockMixin
-+from . import ControllerTestCase, KVStoreMockMixin  # pylint: disable=no-name-in-module
- from ..controllers import RESTController, Controller
- from ..tools import RequestLoggingTool
- from .. import mgr
-diff --git a/src/pybind/mgr/dashboard/tests/test_cephfs.py b/src/pybind/mgr/dashboard/tests/test_cephfs.py
-index e9abda5380..778b0aa275 100644
---- a/src/pybind/mgr/dashboard/tests/test_cephfs.py
-+++ b/src/pybind/mgr/dashboard/tests/test_cephfs.py
-@@ -6,7 +6,7 @@ except ImportError:
-     from unittest.mock import Mock
- 
- from .. import mgr
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers.cephfs import CephFS
- 
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_controllers.py b/src/pybind/mgr/dashboard/tests/test_controllers.py
-index 0e88047061..b14878ff2e 100644
---- a/src/pybind/mgr/dashboard/tests/test_controllers.py
-+++ b/src/pybind/mgr/dashboard/tests/test_controllers.py
-@@ -1,7 +1,7 @@
- # -*- coding: utf-8 -*-
- from __future__ import absolute_import
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers import BaseController, RESTController, Controller, \
-                           ApiController, Endpoint
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_docs.py b/src/pybind/mgr/dashboard/tests/test_docs.py
-index a6e03b5267..ccb777aca5 100644
---- a/src/pybind/mgr/dashboard/tests/test_docs.py
-+++ b/src/pybind/mgr/dashboard/tests/test_docs.py
-@@ -1,7 +1,7 @@
- # # -*- coding: utf-8 -*-
- from __future__ import absolute_import
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers import RESTController, ApiController, Endpoint, EndpointDoc, ControllerDoc
- from ..controllers.docs import Docs
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py b/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py
-index 557b7c1061..d266735e8f 100644
---- a/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py
-+++ b/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py
-@@ -1,7 +1,7 @@
- # -*- coding: utf-8 -*-
- 
- from .. import mgr
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers.erasure_code_profile import ErasureCodeProfile
- 
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_exceptions.py b/src/pybind/mgr/dashboard/tests/test_exceptions.py
-index 2bb25da1bf..b42c356479 100644
---- a/src/pybind/mgr/dashboard/tests/test_exceptions.py
-+++ b/src/pybind/mgr/dashboard/tests/test_exceptions.py
-@@ -5,7 +5,7 @@ import time
- 
- import rados
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..services.ceph_service import SendCommandError
- from ..controllers import RESTController, Controller, Task, Endpoint
- from ..services.exception import handle_rados_error, handle_send_command_error, \
-diff --git a/src/pybind/mgr/dashboard/tests/test_feature_toggles.py b/src/pybind/mgr/dashboard/tests/test_feature_toggles.py
-index 031d0ef839..23068c5eda 100644
---- a/src/pybind/mgr/dashboard/tests/test_feature_toggles.py
-+++ b/src/pybind/mgr/dashboard/tests/test_feature_toggles.py
-@@ -7,7 +7,7 @@ try:
- except ImportError:
-     from unittest.mock import Mock, patch
- 
--from . import KVStoreMockMixin
-+from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
- from ..plugins.feature_toggles import FeatureToggles, Features
- 
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_ganesha.py b/src/pybind/mgr/dashboard/tests/test_ganesha.py
-index 03f1f5b551..44498ac40c 100644
---- a/src/pybind/mgr/dashboard/tests/test_ganesha.py
-+++ b/src/pybind/mgr/dashboard/tests/test_ganesha.py
-@@ -9,7 +9,7 @@ except ImportError:
-     from unittest.mock import MagicMock, Mock
- 
- import orchestrator
--from . import KVStoreMockMixin
-+from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
- from .. import mgr
- from ..settings import Settings
- from ..services import ganesha
-diff --git a/src/pybind/mgr/dashboard/tests/test_grafana.py b/src/pybind/mgr/dashboard/tests/test_grafana.py
-index 0eb46bf0f0..a5456905f2 100644
---- a/src/pybind/mgr/dashboard/tests/test_grafana.py
-+++ b/src/pybind/mgr/dashboard/tests/test_grafana.py
-@@ -8,7 +8,7 @@ except ImportError:
- 
- from requests import RequestException
- 
--from . import ControllerTestCase, KVStoreMockMixin
-+from . import ControllerTestCase, KVStoreMockMixin  # pylint: disable=no-name-in-module
- from ..controllers.grafana import Grafana
- from ..grafana import GrafanaRestClient
- from ..settings import Settings
-diff --git a/src/pybind/mgr/dashboard/tests/test_home.py b/src/pybind/mgr/dashboard/tests/test_home.py
-index c3088b7a65..c942eed9be 100644
---- a/src/pybind/mgr/dashboard/tests/test_home.py
-+++ b/src/pybind/mgr/dashboard/tests/test_home.py
-@@ -8,7 +8,7 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import ControllerTestCase, FakeFsMixin
-+from . import ControllerTestCase, FakeFsMixin  # pylint: disable=no-name-in-module
- from .. import mgr
- 
- from ..controllers.home import HomeController, LanguageMixin
-diff --git a/src/pybind/mgr/dashboard/tests/test_host.py b/src/pybind/mgr/dashboard/tests/test_host.py
-index ab7286074b..191c3f1245 100644
---- a/src/pybind/mgr/dashboard/tests/test_host.py
-+++ b/src/pybind/mgr/dashboard/tests/test_host.py
-@@ -7,7 +7,7 @@ except ImportError:
- 
- from orchestrator import HostSpec
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers.host import get_hosts, Host, HostUi
- from .. import mgr
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_iscsi.py b/src/pybind/mgr/dashboard/tests/test_iscsi.py
-index 962ffeb684..72d64453ac 100644
---- a/src/pybind/mgr/dashboard/tests/test_iscsi.py
-+++ b/src/pybind/mgr/dashboard/tests/test_iscsi.py
-@@ -10,7 +10,8 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import CmdException, ControllerTestCase, CLICommandTestMixin, KVStoreMockMixin
-+from . import CmdException, ControllerTestCase, CLICommandTestMixin, \
-+    KVStoreMockMixin  # pylint: disable=no-name-in-module
- from .. import mgr
- from ..controllers.iscsi import Iscsi, IscsiTarget
- from ..services.iscsi_client import IscsiClient
-diff --git a/src/pybind/mgr/dashboard/tests/test_orchestrator.py b/src/pybind/mgr/dashboard/tests/test_orchestrator.py
-index 714d59c085..9a9d179bbc 100644
---- a/src/pybind/mgr/dashboard/tests/test_orchestrator.py
-+++ b/src/pybind/mgr/dashboard/tests/test_orchestrator.py
-@@ -6,7 +6,7 @@ except ImportError:
- 
- from orchestrator import InventoryHost
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from .. import mgr
- from ..controllers.orchestrator import get_device_osd_map
- from ..controllers.orchestrator import Orchestrator
-diff --git a/src/pybind/mgr/dashboard/tests/test_osd.py b/src/pybind/mgr/dashboard/tests/test_osd.py
-index aeb32ed576..063705ddbb 100644
---- a/src/pybind/mgr/dashboard/tests/test_osd.py
-+++ b/src/pybind/mgr/dashboard/tests/test_osd.py
-@@ -11,11 +11,11 @@ except ImportError:
- from ceph.deployment.drive_group import DeviceSelection, DriveGroupSpec
- from ceph.deployment.service_spec import PlacementSpec
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers.osd import Osd
- from ..tools import NotificationQueue, TaskManager
- from .. import mgr
--from .helper import update_dict
-+from .helper import update_dict  # pylint: disable=import-error
- 
- try:
-     from typing import List, Dict, Any  # pylint: disable=unused-import
-diff --git a/src/pybind/mgr/dashboard/tests/test_plugin_debug.py b/src/pybind/mgr/dashboard/tests/test_plugin_debug.py
-index 4985540046..cb4d1afc21 100644
---- a/src/pybind/mgr/dashboard/tests/test_plugin_debug.py
-+++ b/src/pybind/mgr/dashboard/tests/test_plugin_debug.py
-@@ -1,7 +1,7 @@
- # -*- coding: utf-8 -*-
- from __future__ import absolute_import
- 
--from . import CLICommandTestMixin, ControllerTestCase
-+from . import CLICommandTestMixin, ControllerTestCase  # pylint: disable=no-name-in-module
- 
- 
- class TestPluginDebug(ControllerTestCase, CLICommandTestMixin):
-diff --git a/src/pybind/mgr/dashboard/tests/test_pool.py b/src/pybind/mgr/dashboard/tests/test_pool.py
-index e33e436540..179a8feeed 100644
---- a/src/pybind/mgr/dashboard/tests/test_pool.py
-+++ b/src/pybind/mgr/dashboard/tests/test_pool.py
-@@ -6,7 +6,7 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers.pool import Pool
- from ..controllers.task import Task
- from ..tools import NotificationQueue, TaskManager
-diff --git a/src/pybind/mgr/dashboard/tests/test_prometheus.py b/src/pybind/mgr/dashboard/tests/test_prometheus.py
-index 3385d66a97..ef669a6203 100644
---- a/src/pybind/mgr/dashboard/tests/test_prometheus.py
-+++ b/src/pybind/mgr/dashboard/tests/test_prometheus.py
-@@ -5,7 +5,7 @@ try:
- except ImportError:
-     from unittest.mock import patch
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from .. import mgr
- from ..controllers.prometheus import Prometheus, PrometheusReceiver, PrometheusNotifications
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py b/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py
-index ecb4856dc1..d7e0c7dd1e 100644
---- a/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py
-+++ b/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py
-@@ -6,7 +6,7 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from .. import mgr
- from ..controllers.summary import Summary
- from ..controllers.rbd_mirroring import RbdMirroring, RbdMirroringSummary, \
-diff --git a/src/pybind/mgr/dashboard/tests/test_rest_tasks.py b/src/pybind/mgr/dashboard/tests/test_rest_tasks.py
-index e9d7907f05..aa158cd288 100644
---- a/src/pybind/mgr/dashboard/tests/test_rest_tasks.py
-+++ b/src/pybind/mgr/dashboard/tests/test_rest_tasks.py
-@@ -8,7 +8,7 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers import Controller, RESTController, Task
- from ..controllers.task import Task as TaskController
- from ..services import progress
-diff --git a/src/pybind/mgr/dashboard/tests/test_rgw.py b/src/pybind/mgr/dashboard/tests/test_rgw.py
-index 2c90e7d11b..11818ca2b7 100644
---- a/src/pybind/mgr/dashboard/tests/test_rgw.py
-+++ b/src/pybind/mgr/dashboard/tests/test_rgw.py
-@@ -3,7 +3,7 @@ try:
- except ImportError:
-     import unittest.mock as mock
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..controllers.rgw import RgwUser
- 
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_rgw_client.py b/src/pybind/mgr/dashboard/tests/test_rgw_client.py
-index d69ab2f48d..fa711b45ca 100644
---- a/src/pybind/mgr/dashboard/tests/test_rgw_client.py
-+++ b/src/pybind/mgr/dashboard/tests/test_rgw_client.py
-@@ -9,7 +9,7 @@ except ImportError:
- 
- from ..services.rgw_client import RgwClient, _parse_frontend_config
- from ..settings import Settings
--from . import KVStoreMockMixin
-+from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
- 
- 
- class RgwClientTest(unittest.TestCase, KVStoreMockMixin):
-diff --git a/src/pybind/mgr/dashboard/tests/test_settings.py b/src/pybind/mgr/dashboard/tests/test_settings.py
-index da54a20655..abdb059c1d 100644
---- a/src/pybind/mgr/dashboard/tests/test_settings.py
-+++ b/src/pybind/mgr/dashboard/tests/test_settings.py
-@@ -3,7 +3,7 @@ from __future__ import absolute_import
- 
- import errno
- import unittest
--from . import KVStoreMockMixin, ControllerTestCase
-+from . import KVStoreMockMixin, ControllerTestCase  # pylint: disable=no-name-in-module
- from .. import settings
- from ..controllers.settings import Settings as SettingsController
- from ..settings import Settings, handle_option_command
-diff --git a/src/pybind/mgr/dashboard/tests/test_sso.py b/src/pybind/mgr/dashboard/tests/test_sso.py
-index f8681b89ed..e8141a09cc 100644
---- a/src/pybind/mgr/dashboard/tests/test_sso.py
-+++ b/src/pybind/mgr/dashboard/tests/test_sso.py
-@@ -5,7 +5,8 @@ from __future__ import absolute_import
- import errno
- import unittest
- 
--from . import CmdException, exec_dashboard_cmd, KVStoreMockMixin
-+from . import CmdException, exec_dashboard_cmd, \
-+    KVStoreMockMixin  # pylint: disable=no-name-in-module
- from ..services.sso import handle_sso_command, load_sso_db
- 
- 
-diff --git a/src/pybind/mgr/dashboard/tests/test_tools.py b/src/pybind/mgr/dashboard/tests/test_tools.py
-index 0f27ec8e63..340ff8c41d 100644
---- a/src/pybind/mgr/dashboard/tests/test_tools.py
-+++ b/src/pybind/mgr/dashboard/tests/test_tools.py
-@@ -10,7 +10,7 @@ try:
- except ImportError:
-     from unittest.mock import patch
- 
--from . import ControllerTestCase
-+from . import ControllerTestCase  # pylint: disable=no-name-in-module
- from ..services.exception import handle_rados_error
- from ..controllers import RESTController, ApiController, Controller, \
-                           BaseController, Proxy
-diff --git a/src/pybind/mgr/dashboard/tools.py b/src/pybind/mgr/dashboard/tools.py
-index 2b6d92ca55..d9a2d813c0 100644
---- a/src/pybind/mgr/dashboard/tools.py
-+++ b/src/pybind/mgr/dashboard/tools.py
-@@ -30,7 +30,7 @@ from .services.auth import JwtManager
- 
- try:
-     from typing import Any, AnyStr, Callable, DefaultDict, Deque,\
--        Dict, List, Set, Tuple, Union  # noqa pylint: disable=unused-import
-+        Dict, List, Set, Tuple, Union  # noqa
- except ImportError:
-     pass  # For typing only
- 

Copied: ceph/repos/community-staging-x86_64/mgr-dashboard-update-pylint-to-2.6.0.patch (from rev 1062932, ceph/trunk/mgr-dashboard-update-pylint-to-2.6.0.patch)
===================================================================
--- mgr-dashboard-update-pylint-to-2.6.0.patch	                        (rev 0)
+++ mgr-dashboard-update-pylint-to-2.6.0.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,671 @@
+From e4f179fa960ed18e8f45bc87d26552d720bc819b Mon Sep 17 00:00:00 2001
+From: Volker Theile <vtheile at suse.com>
+Date: Fri, 25 Sep 2020 13:17:19 +0200
+Subject: [PATCH] mgr/dashboard: update pylint to 2.6.0
+
+* Update pylint to 2.6.0.
+* Fix pylint issues.
+
+Fixes: https://tracker.ceph.com/issues/47647
+
+(cherry picked from commit 298c91958a41674a928d53f010b20f174f16d68f)
+---
+ src/pybind/mgr/dashboard/.pylintrc            |  8 ++++++--
+ .../mgr/dashboard/controllers/nfsganesha.py   |  2 +-
+ src/pybind/mgr/dashboard/controllers/osd.py   |  2 +-
+ src/pybind/mgr/dashboard/plugins/__init__.py  |  2 +-
+ .../mgr/dashboard/requirements-lint.txt       |  2 +-
+ src/pybind/mgr/dashboard/services/auth.py     |  1 -
+ .../mgr/dashboard/services/ceph_service.py    |  2 +-
+ src/pybind/mgr/dashboard/services/cephx.py    |  2 +-
+ src/pybind/mgr/dashboard/services/ganesha.py  | 20 +++++++++----------
+ .../mgr/dashboard/services/iscsi_client.py    |  2 +-
+ .../mgr/dashboard/services/iscsi_config.py    |  2 +-
+ src/pybind/mgr/dashboard/services/progress.py |  2 +-
+ .../mgr/dashboard/services/rgw_client.py      |  3 ++-
+ src/pybind/mgr/dashboard/tests/__init__.py    |  2 +-
+ src/pybind/mgr/dashboard/tests/helper.py      |  2 +-
+ .../dashboard/tests/test_access_control.py    |  2 +-
+ .../mgr/dashboard/tests/test_api_auditing.py  |  2 +-
+ src/pybind/mgr/dashboard/tests/test_cephfs.py |  2 +-
+ .../mgr/dashboard/tests/test_controllers.py   |  2 +-
+ src/pybind/mgr/dashboard/tests/test_docs.py   |  2 +-
+ .../tests/test_erasure_code_profile.py        |  2 +-
+ .../mgr/dashboard/tests/test_exceptions.py    |  2 +-
+ .../dashboard/tests/test_feature_toggles.py   |  2 +-
+ .../mgr/dashboard/tests/test_ganesha.py       |  2 +-
+ .../mgr/dashboard/tests/test_grafana.py       |  2 +-
+ src/pybind/mgr/dashboard/tests/test_home.py   |  2 +-
+ src/pybind/mgr/dashboard/tests/test_host.py   |  2 +-
+ src/pybind/mgr/dashboard/tests/test_iscsi.py  |  3 ++-
+ .../mgr/dashboard/tests/test_orchestrator.py  |  2 +-
+ src/pybind/mgr/dashboard/tests/test_osd.py    |  4 ++--
+ .../mgr/dashboard/tests/test_plugin_debug.py  |  2 +-
+ src/pybind/mgr/dashboard/tests/test_pool.py   |  2 +-
+ .../mgr/dashboard/tests/test_prometheus.py    |  2 +-
+ .../mgr/dashboard/tests/test_rbd_mirroring.py |  2 +-
+ .../mgr/dashboard/tests/test_rest_tasks.py    |  2 +-
+ src/pybind/mgr/dashboard/tests/test_rgw.py    |  2 +-
+ .../mgr/dashboard/tests/test_rgw_client.py    |  2 +-
+ .../mgr/dashboard/tests/test_settings.py      |  2 +-
+ src/pybind/mgr/dashboard/tests/test_sso.py    |  3 ++-
+ src/pybind/mgr/dashboard/tests/test_tools.py  |  2 +-
+ src/pybind/mgr/dashboard/tools.py             |  2 +-
+ 41 files changed, 58 insertions(+), 52 deletions(-)
+
+diff --git a/src/pybind/mgr/dashboard/.pylintrc b/src/pybind/mgr/dashboard/.pylintrc
+index 404a16a2e6..c4bf033cda 100644
+--- a/src/pybind/mgr/dashboard/.pylintrc
++++ b/src/pybind/mgr/dashboard/.pylintrc
+@@ -15,7 +15,7 @@ ignore-patterns=
+ 
+ # Python code to execute, usually for sys.path manipulation such as
+ # pygtk.require().
+-#init-hook=
++init-hook='import sys; sys.path.append("./")'
+ 
+ # Use multiple processes to speed up Pylint.
+ jobs=1
+@@ -118,7 +118,11 @@ disable=import-star-module-level,
+         too-many-arguments,
+         too-many-locals,
+         too-many-statements,
+-        useless-object-inheritance
++        useless-object-inheritance,
++        relative-beyond-top-level,
++        raise-missing-from,
++        super-with-arguments,
++        import-outside-toplevel
+ 
+ 
+ # Enable the message, report, category or checker with the given id(s). You can
+diff --git a/src/pybind/mgr/dashboard/controllers/nfsganesha.py b/src/pybind/mgr/dashboard/controllers/nfsganesha.py
+index 1219f78b95..510b37a712 100644
+--- a/src/pybind/mgr/dashboard/controllers/nfsganesha.py
++++ b/src/pybind/mgr/dashboard/controllers/nfsganesha.py
+@@ -272,7 +272,7 @@ class NFSGaneshaService(RESTController):
+ class NFSGaneshaUi(BaseController):
+     @Endpoint('GET', '/cephx/clients')
+     def cephx_clients(self):
+-        return [client for client in CephX.list_clients()]
++        return list(CephX.list_clients())
+ 
+     @Endpoint('GET', '/fsals')
+     def fsals(self):
+diff --git a/src/pybind/mgr/dashboard/controllers/osd.py b/src/pybind/mgr/dashboard/controllers/osd.py
+index 2731ad0ffc..f95951cba2 100644
+--- a/src/pybind/mgr/dashboard/controllers/osd.py
++++ b/src/pybind/mgr/dashboard/controllers/osd.py
+@@ -272,7 +272,7 @@ class Osd(RESTController):
+ 
+     @CreatePermission
+     @osd_task('create', {'tracking_id': '{tracking_id}'})
+-    def create(self, method, data, tracking_id):  # pylint: disable=W0622
++    def create(self, method, data, tracking_id):  # pylint: disable=unused-argument
+         if method == 'bare':
+             return self._create_bare(data)
+         if method == 'drive_groups':
+diff --git a/src/pybind/mgr/dashboard/plugins/__init__.py b/src/pybind/mgr/dashboard/plugins/__init__.py
+index 8973654770..3e3aca4001 100644
+--- a/src/pybind/mgr/dashboard/plugins/__init__.py
++++ b/src/pybind/mgr/dashboard/plugins/__init__.py
+@@ -71,4 +71,4 @@ class DashboardPluginManager(object):
+ PLUGIN_MANAGER = DashboardPluginManager("ceph-mgr.dashboard")
+ 
+ # Load all interfaces and their hooks
+-from . import interfaces  # noqa: F401 pylint: disable=wrong-import-position,cyclic-import
++from . import interfaces  # noqa pylint: disable=C0413,W0406
+diff --git a/src/pybind/mgr/dashboard/requirements-lint.txt b/src/pybind/mgr/dashboard/requirements-lint.txt
+index 8f68ad3856..f01fa54e6e 100644
+--- a/src/pybind/mgr/dashboard/requirements-lint.txt
++++ b/src/pybind/mgr/dashboard/requirements-lint.txt
+@@ -1,4 +1,4 @@
+-pylint==2.3.1; python_version >= '3'
++pylint==2.6.0
+ flake8==3.7.8; python_version >= '3'
+ flake8-colors==0.1.6; python_version >= '3'
+ #TODO: Fix docstring issues: https://tracker.ceph.com/issues/41224
+diff --git a/src/pybind/mgr/dashboard/services/auth.py b/src/pybind/mgr/dashboard/services/auth.py
+index d829362e63..475d501263 100644
+--- a/src/pybind/mgr/dashboard/services/auth.py
++++ b/src/pybind/mgr/dashboard/services/auth.py
+@@ -177,7 +177,6 @@ class AuthManagerTool(cherrypy.Tool):
+ 
+     def _check_authorization(self, username):
+         self.logger.debug("checking authorization...")
+-        username = username
+         handler = cherrypy.request.handler.callable
+         controller = handler.__self__
+         sec_scope = getattr(controller, '_security_scope', None)
+diff --git a/src/pybind/mgr/dashboard/services/ceph_service.py b/src/pybind/mgr/dashboard/services/ceph_service.py
+index a6eee2957e..89582e3f73 100644
+--- a/src/pybind/mgr/dashboard/services/ceph_service.py
++++ b/src/pybind/mgr/dashboard/services/ceph_service.py
+@@ -12,7 +12,7 @@ from .. import mgr
+ from ..exceptions import DashboardException
+ 
+ try:
+-    from typing import Dict, Any, Union  # pylint: disable=unused-import
++    from typing import Dict, Any, Union
+ except ImportError:
+     pass  # For typing only
+ 
+diff --git a/src/pybind/mgr/dashboard/services/cephx.py b/src/pybind/mgr/dashboard/services/cephx.py
+index ccda387961..60303ad85f 100644
+--- a/src/pybind/mgr/dashboard/services/cephx.py
++++ b/src/pybind/mgr/dashboard/services/cephx.py
+@@ -22,7 +22,7 @@ class CephX(object):
+ 
+     @classmethod
+     def list_clients(cls):
+-        return [client for client in cls._clients_map()]
++        return list(cls._clients_map())
+ 
+     @classmethod
+     def get_client_key(cls, client_id):
+diff --git a/src/pybind/mgr/dashboard/services/ganesha.py b/src/pybind/mgr/dashboard/services/ganesha.py
+index e9144db406..764ebb3739 100644
+--- a/src/pybind/mgr/dashboard/services/ganesha.py
++++ b/src/pybind/mgr/dashboard/services/ganesha.py
+@@ -69,7 +69,7 @@ class Ganesha(object):
+ 
+     @classmethod
+     def get_ganesha_clusters(cls):
+-        return [cluster_id for cluster_id in cls._get_clusters_locations()]
++        return list(cls._get_clusters_locations())
+ 
+     @staticmethod
+     def _get_orch_nfs_instances():
+@@ -325,7 +325,7 @@ class GaneshaConfParser(object):
+         for key, val in block.items():
+             if key == 'block_name':
+                 continue
+-            elif key == '_blocks_':
++            if key == '_blocks_':
+                 for blo in val:
+                     conf_str += GaneshaConfParser.write_block(blo, depth)
+             elif val:
+@@ -693,21 +693,21 @@ class Export(object):
+             result['attr_expiration_time'] = self.attr_expiration_time
+             result['security_label'] = self.security_label
+         if 'protocols' not in defaults:
+-            result['protocols'] = [p for p in self.protocols]
++            result['protocols'] = list(self.protocols)
+         else:
+             def_proto = defaults['protocols']
+             if not isinstance(def_proto, list):
+                 def_proto = set([def_proto])
+             if self.protocols != def_proto:
+-                result['protocols'] = [p for p in self.protocols]
++                result['protocols'] = list(self.protocols)
+         if 'transports' not in defaults:
+-            result['transports'] = [t for t in self.transports]
++            result['transports'] = list(self.transports)
+         else:
+             def_transp = defaults['transports']
+             if not isinstance(def_transp, list):
+                 def_transp = set([def_transp])
+             if self.transports != def_transp:
+-                result['transports'] = [t for t in self.transports]
++                result['transports'] = list(self.transports)
+ 
+         result['_blocks_'] = [self.fsal.to_fsal_block()]
+         result['_blocks_'].extend([client.to_client_block()
+@@ -737,14 +737,14 @@ class Export(object):
+             'path': self.path,
+             'fsal': self.fsal.to_dict(),
+             'cluster_id': self.cluster_id,
+-            'daemons': sorted([d for d in self.daemons]),
++            'daemons': sorted(list(self.daemons)),
+             'pseudo': self.pseudo,
+             'tag': self.tag,
+             'access_type': self.access_type,
+             'squash': self.squash,
+             'security_label': self.security_label,
+-            'protocols': sorted([p for p in self.protocols]),
+-            'transports': sorted([t for t in self.transports]),
++            'protocols': sorted(list(self.protocols)),
++            'transports': sorted(list(self.transports)),
+             'clients': [client.to_dict() for client in self.clients]
+         }
+ 
+@@ -992,7 +992,7 @@ class GaneshaConf(object):
+         return None
+ 
+     def list_daemons(self):
+-        return [daemon_id for daemon_id in self.daemons_conf_blocks]
++        return list(self.daemons_conf_blocks)
+ 
+     def reload_daemons(self, daemons):
+         with mgr.rados.open_ioctx(self.rados_pool) as ioctx:
+diff --git a/src/pybind/mgr/dashboard/services/iscsi_client.py b/src/pybind/mgr/dashboard/services/iscsi_client.py
+index b82a51a3d4..c5a6dfa0e7 100644
+--- a/src/pybind/mgr/dashboard/services/iscsi_client.py
++++ b/src/pybind/mgr/dashboard/services/iscsi_client.py
+@@ -12,7 +12,7 @@ try:
+ except ImportError:
+     from urllib.parse import urlparse
+ 
+-from .iscsi_config import IscsiGatewaysConfig  # pylint: disable=cyclic-import
++from .iscsi_config import IscsiGatewaysConfig
+ from ..settings import Settings
+ from ..rest_client import RestClient
+ 
+diff --git a/src/pybind/mgr/dashboard/services/iscsi_config.py b/src/pybind/mgr/dashboard/services/iscsi_config.py
+index ab90048500..86bdfc770d 100644
+--- a/src/pybind/mgr/dashboard/services/iscsi_config.py
++++ b/src/pybind/mgr/dashboard/services/iscsi_config.py
+@@ -57,7 +57,7 @@ class IscsiGatewaysConfig(object):
+         """
+         for gateway_name, gateway_config in config['gateways'].items():
+             if '.' not in gateway_name:
+-                from .iscsi_client import IscsiClient
++                from .iscsi_client import IscsiClient  # pylint: disable=cyclic-import
+                 from ..rest_client import RequestException
+                 try:
+                     service_url = gateway_config['service_url']
+diff --git a/src/pybind/mgr/dashboard/services/progress.py b/src/pybind/mgr/dashboard/services/progress.py
+index d8cf7521fa..d7b9ed973b 100644
+--- a/src/pybind/mgr/dashboard/services/progress.py
++++ b/src/pybind/mgr/dashboard/services/progress.py
+@@ -12,7 +12,7 @@ from __future__ import absolute_import
+ from datetime import datetime
+ import logging
+ 
+-from . import rbd
++from . import rbd  # pylint: disable=no-name-in-module
+ from .. import mgr
+ 
+ 
+diff --git a/src/pybind/mgr/dashboard/services/rgw_client.py b/src/pybind/mgr/dashboard/services/rgw_client.py
+index 5507eb6800..aee18acc54 100644
+--- a/src/pybind/mgr/dashboard/services/rgw_client.py
++++ b/src/pybind/mgr/dashboard/services/rgw_client.py
+@@ -16,7 +16,7 @@ from ..tools import build_url, dict_contains_path, json_str_to_object,\
+ from .. import mgr
+ 
+ try:
+-    from typing import Dict, List, Optional  # pylint: disable=unused-import
++    from typing import Dict, List, Optional
+ except ImportError:
+     pass  # For typing only
+ 
+@@ -303,6 +303,7 @@ class RgwClient(RestClient):
+         if self.userid != RgwClient._SYSTEM_USERID:
+             logger.info("Fetching new keys for user: %s", self.userid)
+             keys = RgwClient.admin_instance().get_user_keys(self.userid)
++            # pylint: disable=attribute-defined-outside-init
+             self.auth = S3Auth(keys['access_key'], keys['secret_key'],
+                                service_url=self.service_url)
+         else:
+diff --git a/src/pybind/mgr/dashboard/tests/__init__.py b/src/pybind/mgr/dashboard/tests/__init__.py
+index 421378a155..8eb5bb8af1 100644
+--- a/src/pybind/mgr/dashboard/tests/__init__.py
++++ b/src/pybind/mgr/dashboard/tests/__init__.py
+@@ -21,7 +21,7 @@ from ..services.auth import AuthManagerTool
+ from ..services.exception import dashboard_exception_handler
+ 
+ from ..plugins import PLUGIN_MANAGER
+-from ..plugins import feature_toggles, debug  # noqa # pylint: disable=unused-import
++from ..plugins import feature_toggles, debug  # noqa
+ 
+ 
+ PLUGIN_MANAGER.hook.init()
+diff --git a/src/pybind/mgr/dashboard/tests/helper.py b/src/pybind/mgr/dashboard/tests/helper.py
+index 9ec043d6be..06b83d42a8 100644
+--- a/src/pybind/mgr/dashboard/tests/helper.py
++++ b/src/pybind/mgr/dashboard/tests/helper.py
+@@ -2,7 +2,7 @@
+ from __future__ import absolute_import
+ 
+ try:
+-    from typing import Dict, Any  # pylint: disable=unused-import
++    from typing import Dict, Any
+ except ImportError:
+     pass
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_access_control.py b/src/pybind/mgr/dashboard/tests/test_access_control.py
+index 0039efc167..81604a161e 100644
+--- a/src/pybind/mgr/dashboard/tests/test_access_control.py
++++ b/src/pybind/mgr/dashboard/tests/test_access_control.py
+@@ -9,7 +9,7 @@ import unittest
+ 
+ from datetime import datetime, timedelta
+ 
+-from . import CmdException, CLICommandTestMixin
++from . import CmdException, CLICommandTestMixin  # pylint: disable=no-name-in-module
+ from .. import mgr
+ from ..security import Scope, Permission
+ from ..services.access_control import load_access_control_db, \
+diff --git a/src/pybind/mgr/dashboard/tests/test_api_auditing.py b/src/pybind/mgr/dashboard/tests/test_api_auditing.py
+index 0416c03638..023ea7992a 100644
+--- a/src/pybind/mgr/dashboard/tests/test_api_auditing.py
++++ b/src/pybind/mgr/dashboard/tests/test_api_auditing.py
+@@ -9,7 +9,7 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import ControllerTestCase, KVStoreMockMixin
++from . import ControllerTestCase, KVStoreMockMixin  # pylint: disable=no-name-in-module
+ from ..controllers import RESTController, Controller
+ from ..tools import RequestLoggingTool
+ from .. import mgr
+diff --git a/src/pybind/mgr/dashboard/tests/test_cephfs.py b/src/pybind/mgr/dashboard/tests/test_cephfs.py
+index e9abda5380..778b0aa275 100644
+--- a/src/pybind/mgr/dashboard/tests/test_cephfs.py
++++ b/src/pybind/mgr/dashboard/tests/test_cephfs.py
+@@ -6,7 +6,7 @@ except ImportError:
+     from unittest.mock import Mock
+ 
+ from .. import mgr
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers.cephfs import CephFS
+ 
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_controllers.py b/src/pybind/mgr/dashboard/tests/test_controllers.py
+index 0e88047061..b14878ff2e 100644
+--- a/src/pybind/mgr/dashboard/tests/test_controllers.py
++++ b/src/pybind/mgr/dashboard/tests/test_controllers.py
+@@ -1,7 +1,7 @@
+ # -*- coding: utf-8 -*-
+ from __future__ import absolute_import
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers import BaseController, RESTController, Controller, \
+                           ApiController, Endpoint
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_docs.py b/src/pybind/mgr/dashboard/tests/test_docs.py
+index a6e03b5267..ccb777aca5 100644
+--- a/src/pybind/mgr/dashboard/tests/test_docs.py
++++ b/src/pybind/mgr/dashboard/tests/test_docs.py
+@@ -1,7 +1,7 @@
+ # # -*- coding: utf-8 -*-
+ from __future__ import absolute_import
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers import RESTController, ApiController, Endpoint, EndpointDoc, ControllerDoc
+ from ..controllers.docs import Docs
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py b/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py
+index 557b7c1061..d266735e8f 100644
+--- a/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py
++++ b/src/pybind/mgr/dashboard/tests/test_erasure_code_profile.py
+@@ -1,7 +1,7 @@
+ # -*- coding: utf-8 -*-
+ 
+ from .. import mgr
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers.erasure_code_profile import ErasureCodeProfile
+ 
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_exceptions.py b/src/pybind/mgr/dashboard/tests/test_exceptions.py
+index 2bb25da1bf..b42c356479 100644
+--- a/src/pybind/mgr/dashboard/tests/test_exceptions.py
++++ b/src/pybind/mgr/dashboard/tests/test_exceptions.py
+@@ -5,7 +5,7 @@ import time
+ 
+ import rados
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..services.ceph_service import SendCommandError
+ from ..controllers import RESTController, Controller, Task, Endpoint
+ from ..services.exception import handle_rados_error, handle_send_command_error, \
+diff --git a/src/pybind/mgr/dashboard/tests/test_feature_toggles.py b/src/pybind/mgr/dashboard/tests/test_feature_toggles.py
+index 031d0ef839..23068c5eda 100644
+--- a/src/pybind/mgr/dashboard/tests/test_feature_toggles.py
++++ b/src/pybind/mgr/dashboard/tests/test_feature_toggles.py
+@@ -7,7 +7,7 @@ try:
+ except ImportError:
+     from unittest.mock import Mock, patch
+ 
+-from . import KVStoreMockMixin
++from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
+ from ..plugins.feature_toggles import FeatureToggles, Features
+ 
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_ganesha.py b/src/pybind/mgr/dashboard/tests/test_ganesha.py
+index 03f1f5b551..44498ac40c 100644
+--- a/src/pybind/mgr/dashboard/tests/test_ganesha.py
++++ b/src/pybind/mgr/dashboard/tests/test_ganesha.py
+@@ -9,7 +9,7 @@ except ImportError:
+     from unittest.mock import MagicMock, Mock
+ 
+ import orchestrator
+-from . import KVStoreMockMixin
++from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
+ from .. import mgr
+ from ..settings import Settings
+ from ..services import ganesha
+diff --git a/src/pybind/mgr/dashboard/tests/test_grafana.py b/src/pybind/mgr/dashboard/tests/test_grafana.py
+index 0eb46bf0f0..a5456905f2 100644
+--- a/src/pybind/mgr/dashboard/tests/test_grafana.py
++++ b/src/pybind/mgr/dashboard/tests/test_grafana.py
+@@ -8,7 +8,7 @@ except ImportError:
+ 
+ from requests import RequestException
+ 
+-from . import ControllerTestCase, KVStoreMockMixin
++from . import ControllerTestCase, KVStoreMockMixin  # pylint: disable=no-name-in-module
+ from ..controllers.grafana import Grafana
+ from ..grafana import GrafanaRestClient
+ from ..settings import Settings
+diff --git a/src/pybind/mgr/dashboard/tests/test_home.py b/src/pybind/mgr/dashboard/tests/test_home.py
+index c3088b7a65..c942eed9be 100644
+--- a/src/pybind/mgr/dashboard/tests/test_home.py
++++ b/src/pybind/mgr/dashboard/tests/test_home.py
+@@ -8,7 +8,7 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import ControllerTestCase, FakeFsMixin
++from . import ControllerTestCase, FakeFsMixin  # pylint: disable=no-name-in-module
+ from .. import mgr
+ 
+ from ..controllers.home import HomeController, LanguageMixin
+diff --git a/src/pybind/mgr/dashboard/tests/test_host.py b/src/pybind/mgr/dashboard/tests/test_host.py
+index ab7286074b..191c3f1245 100644
+--- a/src/pybind/mgr/dashboard/tests/test_host.py
++++ b/src/pybind/mgr/dashboard/tests/test_host.py
+@@ -7,7 +7,7 @@ except ImportError:
+ 
+ from orchestrator import HostSpec
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers.host import get_hosts, Host, HostUi
+ from .. import mgr
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_iscsi.py b/src/pybind/mgr/dashboard/tests/test_iscsi.py
+index 962ffeb684..72d64453ac 100644
+--- a/src/pybind/mgr/dashboard/tests/test_iscsi.py
++++ b/src/pybind/mgr/dashboard/tests/test_iscsi.py
+@@ -10,7 +10,8 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import CmdException, ControllerTestCase, CLICommandTestMixin, KVStoreMockMixin
++from . import CmdException, ControllerTestCase, CLICommandTestMixin, \
++    KVStoreMockMixin  # pylint: disable=no-name-in-module
+ from .. import mgr
+ from ..controllers.iscsi import Iscsi, IscsiTarget
+ from ..services.iscsi_client import IscsiClient
+diff --git a/src/pybind/mgr/dashboard/tests/test_orchestrator.py b/src/pybind/mgr/dashboard/tests/test_orchestrator.py
+index 714d59c085..9a9d179bbc 100644
+--- a/src/pybind/mgr/dashboard/tests/test_orchestrator.py
++++ b/src/pybind/mgr/dashboard/tests/test_orchestrator.py
+@@ -6,7 +6,7 @@ except ImportError:
+ 
+ from orchestrator import InventoryHost
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from .. import mgr
+ from ..controllers.orchestrator import get_device_osd_map
+ from ..controllers.orchestrator import Orchestrator
+diff --git a/src/pybind/mgr/dashboard/tests/test_osd.py b/src/pybind/mgr/dashboard/tests/test_osd.py
+index aeb32ed576..063705ddbb 100644
+--- a/src/pybind/mgr/dashboard/tests/test_osd.py
++++ b/src/pybind/mgr/dashboard/tests/test_osd.py
+@@ -11,11 +11,11 @@ except ImportError:
+ from ceph.deployment.drive_group import DeviceSelection, DriveGroupSpec
+ from ceph.deployment.service_spec import PlacementSpec
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers.osd import Osd
+ from ..tools import NotificationQueue, TaskManager
+ from .. import mgr
+-from .helper import update_dict
++from .helper import update_dict  # pylint: disable=import-error
+ 
+ try:
+     from typing import List, Dict, Any  # pylint: disable=unused-import
+diff --git a/src/pybind/mgr/dashboard/tests/test_plugin_debug.py b/src/pybind/mgr/dashboard/tests/test_plugin_debug.py
+index 4985540046..cb4d1afc21 100644
+--- a/src/pybind/mgr/dashboard/tests/test_plugin_debug.py
++++ b/src/pybind/mgr/dashboard/tests/test_plugin_debug.py
+@@ -1,7 +1,7 @@
+ # -*- coding: utf-8 -*-
+ from __future__ import absolute_import
+ 
+-from . import CLICommandTestMixin, ControllerTestCase
++from . import CLICommandTestMixin, ControllerTestCase  # pylint: disable=no-name-in-module
+ 
+ 
+ class TestPluginDebug(ControllerTestCase, CLICommandTestMixin):
+diff --git a/src/pybind/mgr/dashboard/tests/test_pool.py b/src/pybind/mgr/dashboard/tests/test_pool.py
+index e33e436540..179a8feeed 100644
+--- a/src/pybind/mgr/dashboard/tests/test_pool.py
++++ b/src/pybind/mgr/dashboard/tests/test_pool.py
+@@ -6,7 +6,7 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers.pool import Pool
+ from ..controllers.task import Task
+ from ..tools import NotificationQueue, TaskManager
+diff --git a/src/pybind/mgr/dashboard/tests/test_prometheus.py b/src/pybind/mgr/dashboard/tests/test_prometheus.py
+index 3385d66a97..ef669a6203 100644
+--- a/src/pybind/mgr/dashboard/tests/test_prometheus.py
++++ b/src/pybind/mgr/dashboard/tests/test_prometheus.py
+@@ -5,7 +5,7 @@ try:
+ except ImportError:
+     from unittest.mock import patch
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from .. import mgr
+ from ..controllers.prometheus import Prometheus, PrometheusReceiver, PrometheusNotifications
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py b/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py
+index ecb4856dc1..d7e0c7dd1e 100644
+--- a/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py
++++ b/src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py
+@@ -6,7 +6,7 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from .. import mgr
+ from ..controllers.summary import Summary
+ from ..controllers.rbd_mirroring import RbdMirroring, RbdMirroringSummary, \
+diff --git a/src/pybind/mgr/dashboard/tests/test_rest_tasks.py b/src/pybind/mgr/dashboard/tests/test_rest_tasks.py
+index e9d7907f05..aa158cd288 100644
+--- a/src/pybind/mgr/dashboard/tests/test_rest_tasks.py
++++ b/src/pybind/mgr/dashboard/tests/test_rest_tasks.py
+@@ -8,7 +8,7 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers import Controller, RESTController, Task
+ from ..controllers.task import Task as TaskController
+ from ..services import progress
+diff --git a/src/pybind/mgr/dashboard/tests/test_rgw.py b/src/pybind/mgr/dashboard/tests/test_rgw.py
+index 2c90e7d11b..11818ca2b7 100644
+--- a/src/pybind/mgr/dashboard/tests/test_rgw.py
++++ b/src/pybind/mgr/dashboard/tests/test_rgw.py
+@@ -3,7 +3,7 @@ try:
+ except ImportError:
+     import unittest.mock as mock
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..controllers.rgw import RgwUser
+ 
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_rgw_client.py b/src/pybind/mgr/dashboard/tests/test_rgw_client.py
+index d69ab2f48d..fa711b45ca 100644
+--- a/src/pybind/mgr/dashboard/tests/test_rgw_client.py
++++ b/src/pybind/mgr/dashboard/tests/test_rgw_client.py
+@@ -9,7 +9,7 @@ except ImportError:
+ 
+ from ..services.rgw_client import RgwClient, _parse_frontend_config
+ from ..settings import Settings
+-from . import KVStoreMockMixin
++from . import KVStoreMockMixin  # pylint: disable=no-name-in-module
+ 
+ 
+ class RgwClientTest(unittest.TestCase, KVStoreMockMixin):
+diff --git a/src/pybind/mgr/dashboard/tests/test_settings.py b/src/pybind/mgr/dashboard/tests/test_settings.py
+index da54a20655..abdb059c1d 100644
+--- a/src/pybind/mgr/dashboard/tests/test_settings.py
++++ b/src/pybind/mgr/dashboard/tests/test_settings.py
+@@ -3,7 +3,7 @@ from __future__ import absolute_import
+ 
+ import errno
+ import unittest
+-from . import KVStoreMockMixin, ControllerTestCase
++from . import KVStoreMockMixin, ControllerTestCase  # pylint: disable=no-name-in-module
+ from .. import settings
+ from ..controllers.settings import Settings as SettingsController
+ from ..settings import Settings, handle_option_command
+diff --git a/src/pybind/mgr/dashboard/tests/test_sso.py b/src/pybind/mgr/dashboard/tests/test_sso.py
+index f8681b89ed..e8141a09cc 100644
+--- a/src/pybind/mgr/dashboard/tests/test_sso.py
++++ b/src/pybind/mgr/dashboard/tests/test_sso.py
+@@ -5,7 +5,8 @@ from __future__ import absolute_import
+ import errno
+ import unittest
+ 
+-from . import CmdException, exec_dashboard_cmd, KVStoreMockMixin
++from . import CmdException, exec_dashboard_cmd, \
++    KVStoreMockMixin  # pylint: disable=no-name-in-module
+ from ..services.sso import handle_sso_command, load_sso_db
+ 
+ 
+diff --git a/src/pybind/mgr/dashboard/tests/test_tools.py b/src/pybind/mgr/dashboard/tests/test_tools.py
+index 0f27ec8e63..340ff8c41d 100644
+--- a/src/pybind/mgr/dashboard/tests/test_tools.py
++++ b/src/pybind/mgr/dashboard/tests/test_tools.py
+@@ -10,7 +10,7 @@ try:
+ except ImportError:
+     from unittest.mock import patch
+ 
+-from . import ControllerTestCase
++from . import ControllerTestCase  # pylint: disable=no-name-in-module
+ from ..services.exception import handle_rados_error
+ from ..controllers import RESTController, ApiController, Controller, \
+                           BaseController, Proxy
+diff --git a/src/pybind/mgr/dashboard/tools.py b/src/pybind/mgr/dashboard/tools.py
+index 2b6d92ca55..d9a2d813c0 100644
+--- a/src/pybind/mgr/dashboard/tools.py
++++ b/src/pybind/mgr/dashboard/tools.py
+@@ -30,7 +30,7 @@ from .services.auth import JwtManager
+ 
+ try:
+     from typing import Any, AnyStr, Callable, DefaultDict, Deque,\
+-        Dict, List, Set, Tuple, Union  # noqa pylint: disable=unused-import
++        Dict, List, Set, Tuple, Union  # noqa
+ except ImportError:
+     pass  # For typing only
+ 

Deleted: qa-src-update-mypy-to-0.782.patch
===================================================================
--- qa-src-update-mypy-to-0.782.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ qa-src-update-mypy-to-0.782.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,65 +0,0 @@
-From a61e8e3b6052bf158fe63ab1cd66197f4ffc3900 Mon Sep 17 00:00:00 2001
-From: Sebastian Wagner <sebastian.wagner at suse.com>
-Date: Thu, 25 Jun 2020 14:11:54 +0200
-Subject: [PATCH] qa,src: update mypy to 0.782
-
-(cherry picked from commit 78f3473f55afe14698dc702e24cf34030223a373)
----
- qa/tox.ini                              | 2 +-
- src/pybind/mgr/dashboard/rest_client.py | 2 +-
- src/pybind/mgr/tox.ini                  | 2 +-
- src/python-common/requirements.txt      | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/qa/tox.ini b/qa/tox.ini
-index 31a1ef4fd4..33ad2db968 100644
---- a/qa/tox.ini
-+++ b/qa/tox.ini
-@@ -16,7 +16,7 @@ commands=flake8 --select=F,E9 --exclude=venv,.tox
- 
- [testenv:mypy]
- basepython = python3
--deps = mypy==0.770
-+deps = mypy==0.782
- commands = mypy {posargs:.}
- 
- [testenv:pytest]
-diff --git a/src/pybind/mgr/dashboard/rest_client.py b/src/pybind/mgr/dashboard/rest_client.py
-index 4d58d0dfde..7c04f36a0d 100644
---- a/src/pybind/mgr/dashboard/rest_client.py
-+++ b/src/pybind/mgr/dashboard/rest_client.py
-@@ -511,7 +511,7 @@ class RestClient(object):
-                 resp_structure = api_kwargs.get('resp_structure', None)
-                 args_name = inspect.getargspec(func).args
-                 args_dict = dict(zip(args_name[1:], args))
--                for key, val in kwargs:
-+                for key, val in kwargs.items():
-                     args_dict[key] = val
-                 return func(
-                     self,
-diff --git a/src/pybind/mgr/tox.ini b/src/pybind/mgr/tox.ini
-index 3e129ba64e..4c65be7f16 100644
---- a/src/pybind/mgr/tox.ini
-+++ b/src/pybind/mgr/tox.ini
-@@ -47,7 +47,7 @@ basepython = python3
- deps =
-     cython
-     -rrequirements.txt
--    mypy==0.770
-+    mypy==0.782
- commands =
-     mypy --config-file=../../mypy.ini \
-            cephadm/module.py \
-diff --git a/src/python-common/requirements.txt b/src/python-common/requirements.txt
-index a269fada78..7df43fb736 100644
---- a/src/python-common/requirements.txt
-+++ b/src/python-common/requirements.txt
-@@ -1,7 +1,7 @@
- six
- pytest >=2.1.3,<5; python_version < '3.5'
- mock; python_version < '3.3'
--mypy==0.770; python_version >= '3'
-+mypy==0.782; python_version >= '3'
- pytest-mypy; python_version >= '3'
- pytest >= 2.1.3; python_version >= '3'
- pyyaml

Copied: ceph/repos/community-staging-x86_64/qa-src-update-mypy-to-0.782.patch (from rev 1062932, ceph/trunk/qa-src-update-mypy-to-0.782.patch)
===================================================================
--- qa-src-update-mypy-to-0.782.patch	                        (rev 0)
+++ qa-src-update-mypy-to-0.782.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,65 @@
+From a61e8e3b6052bf158fe63ab1cd66197f4ffc3900 Mon Sep 17 00:00:00 2001
+From: Sebastian Wagner <sebastian.wagner at suse.com>
+Date: Thu, 25 Jun 2020 14:11:54 +0200
+Subject: [PATCH] qa,src: update mypy to 0.782
+
+(cherry picked from commit 78f3473f55afe14698dc702e24cf34030223a373)
+---
+ qa/tox.ini                              | 2 +-
+ src/pybind/mgr/dashboard/rest_client.py | 2 +-
+ src/pybind/mgr/tox.ini                  | 2 +-
+ src/python-common/requirements.txt      | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/qa/tox.ini b/qa/tox.ini
+index 31a1ef4fd4..33ad2db968 100644
+--- a/qa/tox.ini
++++ b/qa/tox.ini
+@@ -16,7 +16,7 @@ commands=flake8 --select=F,E9 --exclude=venv,.tox
+ 
+ [testenv:mypy]
+ basepython = python3
+-deps = mypy==0.770
++deps = mypy==0.782
+ commands = mypy {posargs:.}
+ 
+ [testenv:pytest]
+diff --git a/src/pybind/mgr/dashboard/rest_client.py b/src/pybind/mgr/dashboard/rest_client.py
+index 4d58d0dfde..7c04f36a0d 100644
+--- a/src/pybind/mgr/dashboard/rest_client.py
++++ b/src/pybind/mgr/dashboard/rest_client.py
+@@ -511,7 +511,7 @@ class RestClient(object):
+                 resp_structure = api_kwargs.get('resp_structure', None)
+                 args_name = inspect.getargspec(func).args
+                 args_dict = dict(zip(args_name[1:], args))
+-                for key, val in kwargs:
++                for key, val in kwargs.items():
+                     args_dict[key] = val
+                 return func(
+                     self,
+diff --git a/src/pybind/mgr/tox.ini b/src/pybind/mgr/tox.ini
+index 3e129ba64e..4c65be7f16 100644
+--- a/src/pybind/mgr/tox.ini
++++ b/src/pybind/mgr/tox.ini
+@@ -47,7 +47,7 @@ basepython = python3
+ deps =
+     cython
+     -rrequirements.txt
+-    mypy==0.770
++    mypy==0.782
+ commands =
+     mypy --config-file=../../mypy.ini \
+            cephadm/module.py \
+diff --git a/src/python-common/requirements.txt b/src/python-common/requirements.txt
+index a269fada78..7df43fb736 100644
+--- a/src/python-common/requirements.txt
++++ b/src/python-common/requirements.txt
+@@ -1,7 +1,7 @@
+ six
+ pytest >=2.1.3,<5; python_version < '3.5'
+ mock; python_version < '3.3'
+-mypy==0.770; python_version >= '3'
++mypy==0.782; python_version >= '3'
+ pytest-mypy; python_version >= '3'
+ pytest >= 2.1.3; python_version >= '3'
+ pyyaml

Deleted: remove-distro-version-detection.patch
===================================================================
--- remove-distro-version-detection.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ remove-distro-version-detection.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,10 +0,0 @@
---- a/src/common/util.cc	2018-05-29 14:04:02.000000000 +0200
-+++ b/src/common/util.cc	2018-06-04 13:45:52.279495745 +0200
-@@ -96,7 +96,6 @@ static bool os_release_parse(map<string,
-   static const map<string, string> kvm = {
-     { "distro", "ID=" },
-     { "distro_description", "PRETTY_NAME=" },
--    { "distro_version", "VERSION_ID=" }
-   };
- 
-   FILE *fp = fopen("/etc/os-release", "r");

Copied: ceph/repos/community-staging-x86_64/remove-distro-version-detection.patch (from rev 1062932, ceph/trunk/remove-distro-version-detection.patch)
===================================================================
--- remove-distro-version-detection.patch	                        (rev 0)
+++ remove-distro-version-detection.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,10 @@
+--- a/src/common/util.cc	2018-05-29 14:04:02.000000000 +0200
++++ b/src/common/util.cc	2018-06-04 13:45:52.279495745 +0200
+@@ -96,7 +96,6 @@ static bool os_release_parse(map<string,
+   static const map<string, string> kvm = {
+     { "distro", "ID=" },
+     { "distro_description", "PRETTY_NAME=" },
+-    { "distro_version", "VERSION_ID=" }
+   };
+ 
+   FILE *fp = fopen("/etc/os-release", "r");

Deleted: suppress-pylint-warnings.patch
===================================================================
--- suppress-pylint-warnings.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ suppress-pylint-warnings.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,23 +0,0 @@
---- a/src/pybind/mgr/dashboard/.pylintrc	2019-12-06 17:42:34.000000000 +0100
-+++ b/src/pybind/mgr/dashboard/.pylintrc	2020-01-03 13:55:54.511393504 +0100
-@@ -119,7 +119,11 @@ disable=import-star-module-level,
-         too-many-arguments,
-         too-many-locals,
-         too-many-statements,
--        useless-object-inheritance
-+        useless-object-inheritance,
-+        no-else-raise,
-+        multiple-statements,
-+        unused-argument,
-+        protected-access
- 
- 
- # Enable the message, report, category or checker with the given id(s). You can
---- a/src/pybind/mgr/dashboard/services/rgw_client.py	2019-12-06 17:42:34.000000000 +0100
-+++ b/src/pybind/mgr/dashboard/services/rgw_client.py	2020-01-03 15:13:15.266131061 +0100
-@@ -1,4 +1,5 @@
- # -*- coding: utf-8 -*-
-+# pylint: disable=unused-argument
- from __future__ import absolute_import
- 
- import re

Copied: ceph/repos/community-staging-x86_64/suppress-pylint-warnings.patch (from rev 1062932, ceph/trunk/suppress-pylint-warnings.patch)
===================================================================
--- suppress-pylint-warnings.patch	                        (rev 0)
+++ suppress-pylint-warnings.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,23 @@
+--- a/src/pybind/mgr/dashboard/.pylintrc	2019-12-06 17:42:34.000000000 +0100
++++ b/src/pybind/mgr/dashboard/.pylintrc	2020-01-03 13:55:54.511393504 +0100
+@@ -119,7 +119,11 @@ disable=import-star-module-level,
+         too-many-arguments,
+         too-many-locals,
+         too-many-statements,
+-        useless-object-inheritance
++        useless-object-inheritance,
++        no-else-raise,
++        multiple-statements,
++        unused-argument,
++        protected-access
+ 
+ 
+ # Enable the message, report, category or checker with the given id(s). You can
+--- a/src/pybind/mgr/dashboard/services/rgw_client.py	2019-12-06 17:42:34.000000000 +0100
++++ b/src/pybind/mgr/dashboard/services/rgw_client.py	2020-01-03 15:13:15.266131061 +0100
+@@ -1,4 +1,5 @@
+ # -*- coding: utf-8 -*-
++# pylint: disable=unused-argument
+ from __future__ import absolute_import
+ 
+ import re

Deleted: use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch
===================================================================
--- use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,35 +0,0 @@
---- a/src/compressor/zstd/ZstdCompressor.h	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/compressor/zstd/ZstdCompressor.h	2019-07-17 19:11:33.177014923 +0200
-@@ -16,7 +16,7 @@
- #define CEPH_ZSTDCOMPRESSOR_H
- 
- #define ZSTD_STATIC_LINKING_ONLY
--#include "zstd/lib/zstd.h"
-+#include <zstd.h>
- 
- #include "include/buffer.h"
- #include "include/encoding.h"
-@@ -30,7 +30,13 @@ class ZstdCompressor : public Compressor
- 
-   int compress(const bufferlist &src, bufferlist &dst) override {
-     ZSTD_CStream *s = ZSTD_createCStream();
--    ZSTD_initCStream_srcSize(s, COMPRESSION_LEVEL, src.length());
-+
-+    // ZSTD_initCStream_srcSize(s, COMPRESSION_LEVEL, src.length());
-+    ZSTD_CCtx_reset(s, ZSTD_reset_session_only);
-+    ZSTD_CCtx_refCDict(s, NULL); // clear the dictionary (if any)
-+    ZSTD_CCtx_setParameter(s, ZSTD_c_compressionLevel, COMPRESSION_LEVEL);
-+    ZSTD_CCtx_setPledgedSrcSize(s, src.length());
-+
-     auto p = src.begin();
-     size_t left = src.length();
- 
-@@ -48,7 +54,7 @@ class ZstdCompressor : public Compressor
-       inbuf.size = p.get_ptr_and_advance(left, (const char**)&inbuf.src);
-       left -= inbuf.size;
-       ZSTD_EndDirective const zed = (left==0) ? ZSTD_e_end : ZSTD_e_continue;
--      size_t r = ZSTD_compress_generic(s, &outbuf, &inbuf, zed);
-+      size_t r = ZSTD_compressStream2(s, &outbuf, &inbuf, zed);
-       if (ZSTD_isError(r)) {
- 	return -EINVAL;
-       }

Copied: ceph/repos/community-staging-x86_64/use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch (from rev 1062932, ceph/trunk/use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch)
===================================================================
--- use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch	                        (rev 0)
+++ use-system-zstd-and-fix-zstd-1.4.0-compatbility.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,35 @@
+--- a/src/compressor/zstd/ZstdCompressor.h	2019-04-25 20:15:48.000000000 +0200
++++ b/src/compressor/zstd/ZstdCompressor.h	2019-07-17 19:11:33.177014923 +0200
+@@ -16,7 +16,7 @@
+ #define CEPH_ZSTDCOMPRESSOR_H
+ 
+ #define ZSTD_STATIC_LINKING_ONLY
+-#include "zstd/lib/zstd.h"
++#include <zstd.h>
+ 
+ #include "include/buffer.h"
+ #include "include/encoding.h"
+@@ -30,7 +30,13 @@ class ZstdCompressor : public Compressor
+ 
+   int compress(const bufferlist &src, bufferlist &dst) override {
+     ZSTD_CStream *s = ZSTD_createCStream();
+-    ZSTD_initCStream_srcSize(s, COMPRESSION_LEVEL, src.length());
++
++    // ZSTD_initCStream_srcSize(s, COMPRESSION_LEVEL, src.length());
++    ZSTD_CCtx_reset(s, ZSTD_reset_session_only);
++    ZSTD_CCtx_refCDict(s, NULL); // clear the dictionary (if any)
++    ZSTD_CCtx_setParameter(s, ZSTD_c_compressionLevel, COMPRESSION_LEVEL);
++    ZSTD_CCtx_setPledgedSrcSize(s, src.length());
++
+     auto p = src.begin();
+     size_t left = src.length();
+ 
+@@ -48,7 +54,7 @@ class ZstdCompressor : public Compressor
+       inbuf.size = p.get_ptr_and_advance(left, (const char**)&inbuf.src);
+       left -= inbuf.size;
+       ZSTD_EndDirective const zed = (left==0) ? ZSTD_e_end : ZSTD_e_continue;
+-      size_t r = ZSTD_compress_generic(s, &outbuf, &inbuf, zed);
++      size_t r = ZSTD_compressStream2(s, &outbuf, &inbuf, zed);
+       if (ZSTD_isError(r)) {
+ 	return -EINVAL;
+       }

Deleted: use-threadsafe-death-tests-objectstore-memstore.patch
===================================================================
--- use-threadsafe-death-tests-objectstore-memstore.patch	2021-12-02 23:22:39 UTC (rev 1062932)
+++ use-threadsafe-death-tests-objectstore-memstore.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -1,10 +0,0 @@
---- a/src/test/test_objectstore_memstore.sh	2019-04-25 20:15:48.000000000 +0200
-+++ b/src/test/test_objectstore_memstore.sh	2019-07-14 21:18:32.845040824 +0200
-@@ -1,6 +1,6 @@
- #!/bin/sh -ex
- 
- rm -rf memstore.test_temp_dir
--ceph_test_objectstore --gtest_filter=\*/0
-+ceph_test_objectstore --gtest_filter=\*/0 --gtest_death_test_style=threadsafe
- 
- echo OK

Copied: ceph/repos/community-staging-x86_64/use-threadsafe-death-tests-objectstore-memstore.patch (from rev 1062932, ceph/trunk/use-threadsafe-death-tests-objectstore-memstore.patch)
===================================================================
--- use-threadsafe-death-tests-objectstore-memstore.patch	                        (rev 0)
+++ use-threadsafe-death-tests-objectstore-memstore.patch	2021-12-02 23:23:02 UTC (rev 1062933)
@@ -0,0 +1,10 @@
+--- a/src/test/test_objectstore_memstore.sh	2019-04-25 20:15:48.000000000 +0200
++++ b/src/test/test_objectstore_memstore.sh	2019-07-14 21:18:32.845040824 +0200
+@@ -1,6 +1,6 @@
+ #!/bin/sh -ex
+ 
+ rm -rf memstore.test_temp_dir
+-ceph_test_objectstore --gtest_filter=\*/0
++ceph_test_objectstore --gtest_filter=\*/0 --gtest_death_test_style=threadsafe
+ 
+ echo OK



More information about the arch-commits mailing list