Skip to content

Commit abec6d1

Browse files
authored
packaging: build and bundle UI using npm in deb and rpm packages (#4605)
This changes deb and rpm packaging to build the UI using npm and bundle it in the `cloudstack-management` package and a new `cloudstack-ui` package. The `cloudstack-ui` package will install the UI under `/usr/share/cloudstack-ui/`. For both packages the config.json will not be overridden on upgrade and hosted at /etc/cloudstack/management for the cloudstack-mangement package, and at /etc/cloudstack/ui for the cloudstack-ui package. The cloudstack-ui package is for advanced users who only want the UI want to setup reverse proxy (separate hosting of UI). Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent 74bae56 commit abec6d1

File tree

11 files changed

+140
-30
lines changed

11 files changed

+140
-30
lines changed

INSTALL.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ Set up Maven (3.6.0):
2828
# echo export PATH=/usr/local/maven/bin:${PATH} >> ~/.bashrc # or .zshrc or .profile
2929
# source ~/.bashrc
3030

31+
Setup up NodeJS (LTS):
32+
33+
# curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
34+
# sudo yum install nodejs
35+
# sudo npm install -g @vue/cli npm-check-updates
36+
3137
Start the MySQL service:
3238

3339
$ service mysqld start

client/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,8 @@
607607
</copy>
608608
<copy todir="${project.build.directory}/classes/META-INF/webapp">
609609
<fileset dir="${basedir}/../ui">
610-
<exclude name=".*"/>
610+
<include name="index.html"/>
611+
<include name="legacy/**"/>
611612
</fileset>
612613
</copy>
613614
<copy overwrite="true" todir="${basedir}/target/utilities/bin">

debian/cloudstack-management.install

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
/etc/cloudstack/management/server.properties
2222
/etc/cloudstack/management/java.security.ciphers
2323
/etc/cloudstack/management/log4j-cloud.xml
24+
/etc/cloudstack/management/config.json
2425
/etc/default/cloudstack-management
2526
/etc/security/limits.d/cloudstack-limits.conf
2627
/etc/sudoers.d/cloudstack

debian/cloudstack-ui.install

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
/etc/cloudstack/ui/config.json
19+
/usr/share/cloudstack-ui/*

debian/control

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Section: libs
33
Priority: extra
44
Maintainer: Wido den Hollander <wido@widodh.nl>
55
Build-Depends: debhelper (>= 9), openjdk-11-jdk | java11-sdk | java11-jdk | zulu-11, genisoimage,
6-
python-mysql.connector | python3-mysql.connector, maven (>= 3) | maven3, python (>= 2.7), python3 (>= 3), lsb-release, dh-systemd, python-setuptools
6+
python-mysql.connector | python3-mysql.connector, maven (>= 3) | maven3, python (>= 2.7), python3 (>= 3), nodejs (>= 12), lsb-release, dh-systemd, python-setuptools
77
Standards-Version: 3.8.1
88
Homepage: http://www.cloudstack.org/
99

@@ -37,6 +37,11 @@ Description: CloudStack usage monitor
3737
The CloudStack usage monitor provides usage accounting across the entire cloud for
3838
cloud operators to charge based on usage parameters.
3939

40+
Package: cloudstack-ui
41+
Architecture: all
42+
Depends: ${misc:Depends}
43+
Description: The CloudStack UI
44+
4045
Package: cloudstack-docs
4146
Architecture: all
4247
Depends: ${misc:Depends}

debian/rules

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,20 @@ override_dh_auto_install:
9393
install -m0644 packaging/systemd/$(PACKAGE)-management.service debian/$(PACKAGE)-management/lib/systemd/system/$(PACKAGE)-management.service
9494
install -m0644 packaging/systemd/$(PACKAGE)-management.default $(DESTDIR)/$(SYSCONFDIR)/default/$(PACKAGE)-management
9595

96+
# cloudstack-ui
97+
mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/ui
98+
mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-ui
99+
cd ui && npm install && npm run build && cd ..
100+
cp -r ui/dist/config.json $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/ui/
101+
cp -r ui/dist/* $(DESTDIR)/usr/share/$(PACKAGE)-ui/
102+
rm -f $(DESTDIR)/usr/share/$(PACKAGE)-ui/config.json
103+
ln -s /$(SYSCONFDIR)/$(PACKAGE)/ui/config.json $(DESTDIR)/usr/share/$(PACKAGE)-ui/config.json
104+
# copy ui to cloudstack-management
105+
cp -r ui/dist/config.json $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/
106+
cp -r ui/dist/* $(DESTDIR)/usr/share/$(PACKAGE)-management/webapp/
107+
rm -f $(DESTDIR)/usr/share/$(PACKAGE)-management/webapp/config.json
108+
ln -s /$(SYSCONFDIR)/$(PACKAGE)/management/config.json $(DESTDIR)/usr/share/$(PACKAGE)-management/webapp/config.json
109+
96110
# cloudstack-common
97111
mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-common
98112
mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts

packaging/centos7/cloud.spec

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ BuildRequires: mysql-connector-python
4949
BuildRequires: maven => 3.0.0
5050
BuildRequires: python-setuptools
5151
BuildRequires: wget
52+
BuildRequires: nodejs
5253

5354
%description
5455
CloudStack is a highly-scalable elastic, open source,
@@ -137,6 +138,12 @@ Group: System Environment/Libraries
137138
%description usage
138139
The CloudStack usage calculation service
139140

141+
%package ui
142+
Summary: CloudStack UI
143+
Group: System Environment/Libraries
144+
%description ui
145+
The CloudStack UI
146+
140147
%package cli
141148
Summary: Apache CloudStack CLI
142149
Provides: python-marvin
@@ -195,6 +202,7 @@ if [ "%{_sim}" == "SIMULATOR" -o "%{_sim}" == "simulator" ] ; then
195202
fi
196203

197204
mvn -Psystemvm,developer $FLAGS clean package
205+
cd ui && npm install && npm run build && cd ..
198206

199207
%install
200208
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT}
@@ -255,6 +263,10 @@ cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-
255263

256264
cp -r client/target/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/
257265
cp -r client/target/classes/META-INF/webapp ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp
266+
cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/
267+
cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/
268+
rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json
269+
ln -sf /etc/%{name}/management/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json
258270
mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/cloudstack-%{_maventag}.jar
259271
cp client/target/lib/*jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/
260272

@@ -280,6 +292,14 @@ install -D server/target/conf/cloudstack-sudoers ${RPM_BUILD_ROOT}%{_sysconfdir}
280292
touch ${RPM_BUILD_ROOT}%{_localstatedir}/run/%{name}-management.pid
281293
#install -D server/target/conf/cloudstack-catalina.logrotate ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}-catalina
282294

295+
# UI
296+
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui
297+
mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/
298+
cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui/
299+
cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/
300+
rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json
301+
ln -sf /etc/%{name}/ui/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json
302+
283303
# Package mysql-connector-python
284304
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
285305
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
355375
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-agent-%{version}/LICENSE
356376
install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/NOTICE
357377
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/LICENSE
378+
install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE
379+
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE
358380
install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/NOTICE
359381
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/LICENSE
360382
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
498520
%config(noreplace) %{_sysconfdir}/security/limits.d/cloud
499521
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/db.properties
500522
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/server.properties
523+
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/config.json
501524
%config(noreplace) %{_sysconfdir}/%{name}/management/log4j-cloud.xml
502525
%config(noreplace) %{_sysconfdir}/%{name}/management/log4j.xml
503526
%config(noreplace) %{_sysconfdir}/%{name}/management/environment.properties
@@ -560,6 +583,12 @@ pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz
560583
%{_defaultdocdir}/%{name}-common-%{version}/LICENSE
561584
%{_defaultdocdir}/%{name}-common-%{version}/NOTICE
562585

586+
%files ui
587+
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/ui/config.json
588+
%attr(0644,root,root) %{_datadir}/%{name}-ui/*
589+
%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE
590+
%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE
591+
563592
%files usage
564593
%attr(0644,root,root) %{_unitdir}/%{name}-usage.service
565594
%config(noreplace) %{_sysconfdir}/default/%{name}-usage

packaging/centos8/cloud.spec

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ BuildRequires: /usr/bin/mkisofs
4848
BuildRequires: maven => 3.0.0
4949
BuildRequires: python3-setuptools
5050
BuildRequires: wget
51+
BuildRequires: nodejs
5152

5253
%description
5354
CloudStack is a highly-scalable elastic, open source,
@@ -132,6 +133,12 @@ Group: System Environment/Libraries
132133
%description usage
133134
The CloudStack usage calculation service
134135

136+
%package ui
137+
Summary: CloudStack UI
138+
Group: System Environment/Libraries
139+
%description ui
140+
The CloudStack UI
141+
135142
%package cli
136143
Summary: Apache CloudStack CLI
137144
Provides: python-marvin
@@ -192,6 +199,7 @@ if [ "%{_sim}" == "SIMULATOR" -o "%{_sim}" == "simulator" ] ; then
192199
fi
193200

194201
mvn -Psystemvm,developer $FLAGS clean package
202+
cd ui && npm install && npm run build && cd ..
195203

196204
%install
197205
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT}
@@ -252,6 +260,10 @@ cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-
252260

253261
cp -r client/target/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/
254262
cp -r client/target/classes/META-INF/webapp ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp
263+
cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/
264+
cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/
265+
rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json
266+
ln -sf /etc/%{name}/management/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapp/config.json
255267
mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/cloud-client-ui-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/cloudstack-%{_maventag}.jar
256268
cp client/target/lib/*jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib/
257269

@@ -277,6 +289,14 @@ install -D server/target/conf/cloudstack-sudoers ${RPM_BUILD_ROOT}%{_sysconfdir}
277289
touch ${RPM_BUILD_ROOT}%{_localstatedir}/run/%{name}-management.pid
278290
#install -D server/target/conf/cloudstack-catalina.logrotate ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}-catalina
279291

292+
# UI
293+
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui
294+
mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/
295+
cp ui/dist/config.json ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/ui/
296+
cp -r ui/dist/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/
297+
rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json
298+
ln -sf /etc/%{name}/ui/config.json ${RPM_BUILD_ROOT}%{_datadir}/%{name}-ui/config.json
299+
280300
# Package mysql-connector-python
281301
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
282302
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
352372
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-agent-%{version}/LICENSE
353373
install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/NOTICE
354374
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-usage-%{version}/LICENSE
375+
install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE
376+
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE
355377
install -D tools/whisker/NOTICE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/NOTICE
356378
install -D tools/whisker/LICENSE ${RPM_BUILD_ROOT}%{_defaultdocdir}/%{name}-cli-%{version}/LICENSE
357379
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
495517
%config(noreplace) %{_sysconfdir}/security/limits.d/cloud
496518
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/db.properties
497519
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/server.properties
520+
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/config.json
498521
%config(noreplace) %{_sysconfdir}/%{name}/management/log4j-cloud.xml
499522
%config(noreplace) %{_sysconfdir}/%{name}/management/log4j.xml
500523
%config(noreplace) %{_sysconfdir}/%{name}/management/environment.properties
@@ -557,6 +580,12 @@ pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz
557580
%{_defaultdocdir}/%{name}-common-%{version}/LICENSE
558581
%{_defaultdocdir}/%{name}-common-%{version}/NOTICE
559582

583+
%files ui
584+
%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/ui/config.json
585+
%attr(0644,root,root) %{_datadir}/%{name}-ui/*
586+
%{_defaultdocdir}/%{name}-ui-%{version}/LICENSE
587+
%{_defaultdocdir}/%{name}-ui-%{version}/NOTICE
588+
560589
%files usage
561590
%attr(0644,root,root) %{_unitdir}/%{name}-usage.service
562591
%config(noreplace) %{_sysconfdir}/default/%{name}-usage

0 commit comments

Comments
 (0)