From 24e216b519795ba6a5d427790399a595fbb19b27 Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Wed, 28 Feb 2018 10:08:55 +0100 Subject: [PATCH] mgr/dashboard_v2: Add CMake target to build the frontend. * Added new CMake flag `WITH_MGR_DASHBOARD_V2_FRONTEND`: Build the mgr/dashboard_v2 frontend using `npm install && npm run build` * Set this flag to `OFF` when building packages. * Removed creation of the frontend from `vstart.sh` Signed-off-by: Sebastian Wagner --- CMakeLists.txt | 3 ++ ceph.spec.in | 1 + debian/rules | 2 +- src/pybind/mgr/dashboard_v2/CMakeLists.txt | 54 +++++++++++++++++++++- src/vstart.sh | 9 ++-- 5 files changed, 60 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1db462b72012e..f25a7715852b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -590,6 +590,9 @@ else() endif() set(Boost_USE_MULTITHREADED ON) +# dashboard angular2 frontend +option(WITH_MGR_DASHBOARD_V2_FRONTEND "Build the mgr/dashboard_v2 frontend using `npm`" ON) + include_directories(SYSTEM ${PROJECT_BINARY_DIR}/include) find_package(Threads REQUIRED) diff --git a/ceph.spec.in b/ceph.spec.in index 961f94952b057..b8eebd082d2df 100644 --- a/ceph.spec.in +++ b/ceph.spec.in @@ -906,6 +906,7 @@ cmake .. \ -DWITH_EMBEDDED=OFF \ -DWITH_MANPAGE=ON \ -DWITH_PYTHON3=ON \ + -DWITH_MGR_DASHBOARD_V2_FRONTEND=OFF \ %if %{with python2} -DWITH_PYTHON2=ON \ %else diff --git a/debian/rules b/debian/rules index 5f8923b48fa20..17a0d804b306e 100755 --- a/debian/rules +++ b/debian/rules @@ -5,7 +5,7 @@ export DESTDIR=$(CURDIR)/debian/tmp export DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) -extraopts += -DUSE_CRYPTOPP=OFF -DWITH_OCF=ON -DWITH_LTTNG=ON -DWITH_PYTHON3=ON -DWITH_EMBEDDED=OFF +extraopts += -DUSE_CRYPTOPP=OFF -DWITH_OCF=ON -DWITH_LTTNG=ON -DWITH_PYTHON3=ON -DWITH_EMBEDDED=OFF -DWITH_MGR_DASHBOARD_V2_FRONTEND=OFF extraopts += -DWITH_CEPHFS_JAVA=ON extraopts += -DWITH_SYSTEMD=ON -DCEPH_SYSTEMD_ENV_DIR=/etc/default # assumes that ceph is exmpt from multiarch support, so we override the libdir. diff --git a/src/pybind/mgr/dashboard_v2/CMakeLists.txt b/src/pybind/mgr/dashboard_v2/CMakeLists.txt index 695a3a26725f1..d5c22c1610a04 100644 --- a/src/pybind/mgr/dashboard_v2/CMakeLists.txt +++ b/src/pybind/mgr/dashboard_v2/CMakeLists.txt @@ -8,5 +8,55 @@ add_custom_target(mgr-dashboard_v2-test-venv COMMENT "dashboard_v2 tests virtualenv is being created") add_dependencies(tests mgr-dashboard_v2-test-venv) -include(Distutils) -distutils_install_module(mgr_dashboard_v2) +if(WITH_MGR_DASHBOARD_V2_FRONTEND AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM") + +add_custom_command( + OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard_v2/frontend/node_modules" + COMMAND npm install + DEPENDS frontend/package.json + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard_v2/frontend + COMMENT "dashboard_v2 frontend dependencies are being installed" +) + +add_custom_target(mgr-dashboard_v2-frontend-deps + DEPENDS frontend/node_modules + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard_v2/frontend +) + +# Glob some frontend files. With CMake 3.6, this can be simplified +# to *.ts *.html. Just add: +# list(FILTER frontend_src INCLUDE REGEX "frontend/src") +file( + GLOB_RECURSE frontend_src + frontend/src/*.ts + frontend/src/*.html + frontend/src/*/*.ts + frontend/src/*/*.html + frontend/src/*/*/*.ts + frontend/src/*/*/*.html + frontend/src/*/*/*/*.ts + frontend/src/*/*/*/*.html + frontend/src/*/*/*/*/*.ts + frontend/src/*/*/*/*/*.html + frontend/src/*/*/*/*/*/*.ts + frontend/src/*/*/*/*/*/*.html) + +if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) + set(npm_command npm run build -- --prod) +else() + set(npm_command npm run build) +endif() + +add_custom_command( + OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard_v2/frontend/dist" + COMMAND ${npm_command} + DEPENDS ${frontend_src} frontend/node_modules + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard_v2/frontend + COMMENT "dashboard_v2 frontend is being created" +) +add_custom_target(mgr-dashboard_v2-frontend-build + DEPENDS frontend/dist mgr-dashboard_v2-frontend-deps + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard_v2/frontend +) +add_dependencies(ceph-mgr mgr-dashboard_v2-frontend-build) +endif(WITH_MGR_DASHBOARD_V2_FRONTEND AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM") diff --git a/src/vstart.sh b/src/vstart.sh index fc7228ba0a020..d523037188c63 100755 --- a/src/vstart.sh +++ b/src/vstart.sh @@ -720,13 +720,10 @@ EOF fi # dashboard_v2 - # build frontend - pushd $MGR_PYTHON_PATH/dashboard_v2/frontend - npm install - npm run build - popd - # setting login credentials for dashboard_v2 + sleep 5 # when running with more than 1 mgrs, if we enable dashboard_v2 + # immediately it will fail, so we just wait for a bit ceph_adm mgr module enable dashboard_v2 + # setting login credentials for dashboard_v2 ceph_adm tell mgr dashboard set-login-credentials admin admin } -- 2.39.5