diff --git a/INSTALL.md b/INSTALL.md index 6840626156f..45173c1aa03 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -28,6 +28,12 @@ Set up Maven (3.6.0): # echo export PATH=/usr/local/maven/bin:${PATH} >> ~/.bashrc # or .zshrc or .profile # source ~/.bashrc +Setup up NodeJS (LTS): + + # curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - + # sudo yum install nodejs + # sudo npm install -g @vue/cli npm-check-updates + Start the MySQL service: $ service mysqld start diff --git a/client/pom.xml b/client/pom.xml index 5a457223a69..45474369def 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -607,7 +607,8 @@ - + + diff --git a/debian/cloudstack-management.install b/debian/cloudstack-management.install index 289a4957fad..e637541076e 100644 --- a/debian/cloudstack-management.install +++ b/debian/cloudstack-management.install @@ -21,6 +21,7 @@ /etc/cloudstack/management/server.properties /etc/cloudstack/management/java.security.ciphers /etc/cloudstack/management/log4j-cloud.xml +/etc/cloudstack/management/config.json /etc/default/cloudstack-management /etc/security/limits.d/cloudstack-limits.conf /etc/sudoers.d/cloudstack diff --git a/debian/cloudstack-ui.install b/debian/cloudstack-ui.install new file mode 100644 index 00000000000..391c7b5b578 --- /dev/null +++ b/debian/cloudstack-ui.install @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +/etc/cloudstack/ui/config.json +/usr/share/cloudstack-ui/* diff --git a/debian/control b/debian/control index 15467dc29a9..15d3fb5b9fd 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: libs Priority: extra Maintainer: Wido den Hollander Build-Depends: debhelper (>= 9), openjdk-11-jdk | java11-sdk | java11-jdk | zulu-11, genisoimage, - python-mysql.connector | python3-mysql.connector, maven (>= 3) | maven3, python (>= 2.7), python3 (>= 3), lsb-release, dh-systemd, python-setuptools + python-mysql.connector | python3-mysql.connector, maven (>= 3) | maven3, python (>= 2.7), python3 (>= 3), nodejs (>= 12), lsb-release, dh-systemd, python-setuptools Standards-Version: 3.8.1 Homepage: http://www.cloudstack.org/ @@ -37,6 +37,11 @@ Description: CloudStack usage monitor The CloudStack usage monitor provides usage accounting across the entire cloud for cloud operators to charge based on usage parameters. +Package: cloudstack-ui +Architecture: all +Depends: ${misc:Depends} +Description: The CloudStack UI + Package: cloudstack-docs Architecture: all Depends: ${misc:Depends} diff --git a/debian/rules b/debian/rules index 9c4e58206f1..de45255d9bd 100755 --- a/debian/rules +++ b/debian/rules @@ -93,6 +93,20 @@ override_dh_auto_install: install -m0644 packaging/systemd/$(PACKAGE)-management.service debian/$(PACKAGE)-management/lib/systemd/system/$(PACKAGE)-management.service install -m0644 packaging/systemd/$(PACKAGE)-management.default $(DESTDIR)/$(SYSCONFDIR)/default/$(PACKAGE)-management + # cloudstack-ui + mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/ui + mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-ui + cd ui && npm install && npm run build && cd .. + cp -r ui/dist/config.json $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/ui/ + cp -r ui/dist/* $(DESTDIR)/usr/share/$(PACKAGE)-ui/ + rm -f $(DESTDIR)/usr/share/$(PACKAGE)-ui/config.json + ln -s /$(SYSCONFDIR)/$(PACKAGE)/ui/config.json $(DESTDIR)/usr/share/$(PACKAGE)-ui/config.json + # copy ui to cloudstack-management + cp -r ui/dist/config.json $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/ + cp -r ui/dist/* $(DESTDIR)/usr/share/$(PACKAGE)-management/webapp/ + rm -f $(DESTDIR)/usr/share/$(PACKAGE)-management/webapp/config.json + ln -s /$(SYSCONFDIR)/$(PACKAGE)/management/config.json $(DESTDIR)/usr/share/$(PACKAGE)-management/webapp/config.json + # cloudstack-common mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-common mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts diff --git a/packaging/centos7/cloud.spec b/packaging/centos7/cloud.spec index 366df32fcd1..5b0515cc599 100644 --- a/packaging/centos7/cloud.spec +++ b/packaging/centos7/cloud.spec @@ -49,6 +49,7 @@ BuildRequires: mysql-connector-python BuildRequires: maven => 3.0.0 BuildRequires: python-setuptools BuildRequires: wget +BuildRequires: nodejs %description CloudStack is a highly-scalable elastic, open source, @@ -137,6 +138,12 @@ Group: System Environment/Libraries %description usage The CloudStack usage calculation service +%package ui +Summary: CloudStack UI +Group: System Environment/Libraries +%description ui +The CloudStack UI + %package cli Summary: Apache CloudStack CLI Provides: python-marvin @@ -195,6 +202,7 @@ if [ "%{_sim}" == "SIMULATOR" -o "%{_sim}" == "simulator" ] ; then fi mvn -Psystemvm,developer $FLAGS clean package +cd ui && npm install && npm run build && cd .. %install [ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} @@ -255,6 +263,10 @@ cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}- cp -r client/target/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/ cp -r client/target/classes/META-INF/webapp ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp +cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/ +cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/ +rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json +ln -sf /etc/%{name}/management/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/cloudstack-%{_maventag}.jar cp client/target/lib/*jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/ @@ -280,6 +292,14 @@ install -D server/target/conf/cloudstack-sudoers ${RPM_BUILD_ROOT}%{_sysconfdir} touch ${RPM_BUILD_ROOT}%{_localstatedir}/run/%{name}-management.pid #install -D server/target/conf/cloudstack-catalina.logrotate ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}-catalina +# UI +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/ +cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui/ +cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/ +rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json +ln -sf /etc/%{name}/ui/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json + # Package mysql-connector-python wget -P ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup/wheel https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl wget -P ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup/wheel https://files.pythonhosted.org/packages/e9/93/4860cebd5ad3ff2664ad3c966490ccb46e3b88458b2095145bca11727ca4/setuptools-47.3.1-py3-none-any.whl @@ -355,6 +375,8 @@ install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-agent install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-agent-%{version}/LICENSE install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/NOTICE install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/LICENSE +install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE +install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/NOTICE install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/LICENSE install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-marvin-%{version}/NOTICE @@ -498,6 +520,7 @@ pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz %config(noreplace) %{_sysconfdir}/security/limits.d/cloud %config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/db.properties %config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/server.properties +%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/config.json %config(noreplace) %{_sysconfdir}/%{name}/management/log4j-cloud.xml %config(noreplace) %{_sysconfdir}/%{name}/management/log4j.xml %config(noreplace) %{_sysconfdir}/%{name}/management/environment.properties @@ -560,6 +583,12 @@ pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz %{_defaultdocdir}/%{name}-common-%{version}/LICENSE %{_defaultdocdir}/%{name}-common-%{version}/NOTICE +%files ui +%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/ui/config.json +%attr(0644,root,root) %{_datadir}/%{name}-ui/* +%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE +%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE + %files usage %attr(0644,root,root) %{_unitdir}/%{name}-usage.service %config(noreplace) %{_sysconfdir}/default/%{name}-usage diff --git a/packaging/centos8/cloud.spec b/packaging/centos8/cloud.spec index f893e786d35..60d86f7ca4c 100644 --- a/packaging/centos8/cloud.spec +++ b/packaging/centos8/cloud.spec @@ -48,6 +48,7 @@ BuildRequires: /usr/bin/mkisofs BuildRequires: maven => 3.0.0 BuildRequires: python3-setuptools BuildRequires: wget +BuildRequires: nodejs %description CloudStack is a highly-scalable elastic, open source, @@ -132,6 +133,12 @@ Group: System Environment/Libraries %description usage The CloudStack usage calculation service +%package ui +Summary: CloudStack UI +Group: System Environment/Libraries +%description ui +The CloudStack UI + %package cli Summary: Apache CloudStack CLI Provides: python-marvin @@ -192,6 +199,7 @@ if [ "%{_sim}" == "SIMULATOR" -o "%{_sim}" == "simulator" ] ; then fi mvn -Psystemvm,developer $FLAGS clean package +cd ui && npm install && npm run build && cd .. %install [ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} @@ -252,6 +260,10 @@ cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}- cp -r client/target/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/ cp -r client/target/classes/META-INF/webapp ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp +cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/ +cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/ +rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json +ln -sf /etc/%{name}/management/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/cloudstack-%{_maventag}.jar cp client/target/lib/*jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/ @@ -277,6 +289,14 @@ install -D server/target/conf/cloudstack-sudoers ${RPM_BUILD_ROOT}%{_sysconfdir} touch ${RPM_BUILD_ROOT}%{_localstatedir}/run/%{name}-management.pid #install -D server/target/conf/cloudstack-catalina.logrotate ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}-catalina +# UI +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/ +cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui/ +cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/ +rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json +ln -sf /etc/%{name}/ui/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json + # Package mysql-connector-python wget -P ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup/wheel https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl wget -P ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup/wheel https://files.pythonhosted.org/packages/e9/93/4860cebd5ad3ff2664ad3c966490ccb46e3b88458b2095145bca11727ca4/setuptools-47.3.1-py3-none-any.whl @@ -352,6 +372,8 @@ install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-agent install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-agent-%{version}/LICENSE install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/NOTICE install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/LICENSE +install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE +install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/NOTICE install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/LICENSE install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-marvin-%{version}/NOTICE @@ -495,6 +517,7 @@ pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz %config(noreplace) %{_sysconfdir}/security/limits.d/cloud %config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/db.properties %config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/server.properties +%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/config.json %config(noreplace) %{_sysconfdir}/%{name}/management/log4j-cloud.xml %config(noreplace) %{_sysconfdir}/%{name}/management/log4j.xml %config(noreplace) %{_sysconfdir}/%{name}/management/environment.properties @@ -557,6 +580,12 @@ pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz %{_defaultdocdir}/%{name}-common-%{version}/LICENSE %{_defaultdocdir}/%{name}-common-%{version}/NOTICE +%files ui +%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/ui/config.json +%attr(0644,root,root) %{_datadir}/%{name}-ui/* +%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE +%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE + %files usage %attr(0644,root,root) %{_unitdir}/%{name}-usage.service %config(noreplace) %{_sysconfdir}/default/%{name}-usage diff --git a/pom.xml b/pom.xml index 17622bc11cc..cd7c18b7a02 100644 --- a/pom.xml +++ b/pom.xml @@ -81,23 +81,23 @@ 1.1.1 - 1.14 + 1.15 4.4 - 1.19 + 1.20 1.3 1.4 3.1 - 2.6 - 3.9 + 2.8.0 + 3.11 1.2 - 3.6 + 3.7.2 1.6 1.10 - 1.2.2 - 2.7.0 + 1.2.3 + 2.8.0 0.5 2.6 - 2.7.0 + 2.9.0 3.6.1 @@ -116,45 +116,45 @@ 2.12.0 - 5.8.0 + 5.10.0 1.0.9 - 1.9.5 - 1.11.717 + 1.9.6 + 1.11.940 1.2.8 1.4 - 1.12 + 1.14 1.64 3.3.0 8.18 - 3.2.6 + 3.2.14 2.6.11 0.0.27 - 1.34.2 + 1.38.1 2.4.17 1.7.2 - 28.2-jre - 4.5.11 - 4.4.13 - 2.20 - 2.10.3 + 30.1-jre + 4.5.13 + 4.4.14 + 2.21 + 2.12.1 1.9.3 0.17 - 3.26.0-GA + 3.27.0-GA 3.1.1 1.3.2 2.3.0 2.3.2-1 1.19.4 - 9.4.27.v20200227 + 9.4.36.v20210114 9.4.27.v20200227 5.5.0 - 2.10.5 + 2.10.9 2.2.1 0.1.55 20090211 1.2 - 0.11.0.3 - 0.5.1 + 2.7.0 + 0.5.2 1.5.0-b01 8.0.19 2.0.4 @@ -162,16 +162,16 @@ 2.6.4 0.6.0 0.9.12 - 3.3.3_1 + 3.4.4_1 4.0.1 - 8.5.47 + 8.5.61 1.0.0-build222 6.7 0.5.0 6.2.0-3.1 3.1.3 - 1.4.11.1 - 5.2.3.RELEASE + 1.4.15 + 5.3.3 diff --git a/tools/travis/before_install.sh b/tools/travis/before_install.sh index 86a10a75a9d..f2ecd973b62 100755 --- a/tools/travis/before_install.sh +++ b/tools/travis/before_install.sh @@ -86,6 +86,12 @@ sudo apt-get -q -y -V install freeipmi-common libfreeipmi16 libgcrypt20 libgpg-e echo -e "\nIPMI version" ipmitool -V +curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - +sudo apt-get install -y nodejs + +echo -e "\nNode version" +npm version + echo " diff --git a/ui/error.html b/ui/public/error.html similarity index 100% rename from ui/error.html rename to ui/public/error.html