Skip to content

Commit ef35212

Browse files
committed
New IaaS example for support Service Portal.
1 parent bb07a35 commit ef35212

File tree

20 files changed

+880
-0
lines changed

20 files changed

+880
-0
lines changed

example/IaaS/forms.yaml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
create_site:
2+
- parameter: private_network
3+
forms: ChoiceField
4+
label: Virtual Network
5+
# TODO We need to define general syntex on YAML for network
6+
widget:
7+
forms: Select
8+
attrs:
9+
- class: form-control
10+
- required: required
11+
- parameter: image
12+
forms: ChoiceField
13+
label: Image
14+
choices:
15+
- Windows7-2015.3.0: Windows7-2015.3.0-beta
16+
- Ubuntu14.04-2015.3.0: Ubuntu14.04-2015.3.0
17+
widget:
18+
forms: Select
19+
attrs:
20+
- class: form-control
21+
- parameter: flavor
22+
forms: ChoiceField
23+
label: Flavor
24+
choices:
25+
- 2cores4GBmemory40GBdisk: 2cores4GBmemory40GBdisk
26+
- 4cores8GBmemory80GBdisk: 4cores8GBmemory80GBdisk
27+
- 8cores16GBmemory160GBdisk: 8cores16GBmemory160GBdisk
28+
widget:
29+
forms: Select
30+
attrs:
31+
- class: form-control
32+
- parameter: instance_number
33+
forms: ChoiceField
34+
label: Number of Machines
35+
choices:
36+
- 1: 1
37+
- 2: 2
38+
- 3: 3
39+
- 4: 4
40+
- 5: 5
41+
- 6: 6
42+
- 7: 7
43+
- 8: 8
44+
- 9: 9
45+
- 10: 10
46+
widget:
47+
forms: Select
48+
attrs:
49+
- class: form-control

example/IaaS/install_app.sh

Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
1+
#!/bin/bash
2+
3+
# *** shell script for Solution Foundry to add an app ***
4+
# Step 1: install app's logo
5+
# Step 2: install template files (~.html files)
6+
# Step 3: install js files if there are js files in package folder
7+
# Step 4: install css files if there are css files in package folder
8+
# Step 5: install app's files (~.py files)
9+
# Step 6: add app to INSTALLED_APPS in settings.py
10+
# Step 7: include app's urls.py to project's urls.py
11+
# Step 8: sync GOC Portal Solution list to Service Portal
12+
# Step 9: database migrate
13+
# Step 10: chown to www-data for Service Portal Django project folder
14+
# (if exception happens in Step x, Step 1 ~ Step x-1 oprations will rollback)
15+
# *** end ***
16+
17+
function error_exit
18+
{
19+
echo "$1" 1>&2
20+
exit 1
21+
}
22+
23+
# < get service name from argument and convert it to lowercase >
24+
# if [ -z "$1" ]; then
25+
# error_exit "Please input Service Name"
26+
# fi
27+
# SERVICE_NAME=$1
28+
# LOWER_NAME=`echo $SERVICE_NAME | tr '[:upper:]' '[:lower:]'`
29+
SERVICE_NAME="IaaS"
30+
LOWER_NAME="iaas"
31+
32+
# < get package root path from argument >
33+
# if [ -z "$2" ]; then
34+
# error_exit "Please input package's root path"
35+
# fi
36+
# PACKAGE_ROOT=$2
37+
PACKAGE_ROOT=$1
38+
if [ "${PACKAGE_ROOT: -1}" = "/" ]; then
39+
PACKAGE_ROOT="${PACKAGE_ROOT::-1}"
40+
fi
41+
42+
# Service Portal folder path vars
43+
PROJECT_ROOT="/usr/share/sportal"
44+
STATIC_ROOT="${PROJECT_ROOT}/static"
45+
TEMPLATES_ROOT="${PROJECT_ROOT}/templates"
46+
APP_ROOT="${PROJECT_ROOT}/sportal"
47+
JS_ROOT="${STATIC_ROOT}/js"
48+
CSS_ROOT="${STATIC_ROOT}/css"
49+
IMG_ROOT="${STATIC_ROOT}/img"
50+
51+
# < Step 1: service logo >
52+
IMG_PATH="${IMG_ROOT}/service_logo/${LOWER_NAME}"
53+
if [ -d "${IMG_PATH}" ]; then
54+
error_exit "${IMG_PATH} exists. Aborting..."
55+
else
56+
if [ "$(ls -A ${PACKAGE_ROOT}/img)" ]; then
57+
mkdir ${IMG_PATH}
58+
if cp -r ${PACKAGE_ROOT}/img/* ${IMG_PATH}; then
59+
echo "Service logo files have been installed"
60+
else
61+
# rollback
62+
rm -r ${IMG_PATH}
63+
error_exit "Install service logo files unsuccessfully. Aborting..."
64+
fi
65+
else
66+
error_exit "Cannot find service logo files. Aborting..."
67+
fi
68+
fi
69+
70+
# < Step 2: template files (~.html) >
71+
TEMPLATES_PATH="${TEMPLATES_ROOT}/service/${LOWER_NAME}"
72+
if [ -d "${TEMPLATES_PATH}" ]; then
73+
# rollback
74+
rm -r ${IMG_PATH}
75+
error_exit "${TEMPLATES_PATH} exists. Aborting..."
76+
else
77+
if [ "$(ls -A ${PACKAGE_ROOT}/templates)" ]; then
78+
mkdir ${TEMPLATES_PATH}
79+
if cp -r ${PACKAGE_ROOT}/templates/* ${TEMPLATES_PATH}; then
80+
echo "Template files have been installed"
81+
else
82+
# rollback
83+
rm -r ${IMG_PATH}
84+
rm -r ${TEMPLATES_PATH}
85+
error_exit "Install template files unsuccessfully. Aborting..."
86+
fi
87+
else
88+
error_exit "Cannot find template files. Aborting..."
89+
fi
90+
fi
91+
92+
# < Step 3: js files >
93+
JS_PATH="${JS_ROOT}/service/${LOWER_NAME}"
94+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
95+
if [ -d "${JS_PATH}" ]; then
96+
# rollback
97+
rm -r ${IMG_PATH}
98+
rm -r ${TEMPLATES_PATH}
99+
error_exit "${JS_PATH} exists. Aborting..."
100+
else
101+
mkdir ${JS_PATH}
102+
if cp -r ${PACKAGE_ROOT}/js/* ${JS_PATH}; then
103+
echo "js files have been installed"
104+
else
105+
# rollback
106+
rm -r ${IMG_PATH}
107+
rm -r ${TEMPLATES_PATH}
108+
rm -r ${JS_PATH}
109+
error_exit "Install js files unsuccessfully. Aborting..."
110+
fi
111+
fi
112+
else
113+
echo "No need to install js files"
114+
fi
115+
116+
# < Step 4: css files >
117+
CSS_PATH="${CSS_ROOT}/service/${LOWER_NAME}"
118+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
119+
if [ -d "${CSS_PATH}" ]; then
120+
# rollback
121+
rm -r ${IMG_PATH}
122+
rm -r ${TEMPLATES_PATH}
123+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
124+
rm -r ${JS_PATH}
125+
fi
126+
error_exit "${CSS_PATH} exists. Aborting..."
127+
else
128+
mkdir ${CSS_PATH}
129+
if cp -r ${PACKAGE_ROOT}/css/* ${CSS_PATH}; then
130+
echo "css files have been installed"
131+
else
132+
# rollback
133+
rm -r ${IMG_PATH}
134+
rm -r ${TEMPLATES_PATH}
135+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
136+
rm -r ${JS_PATH}
137+
fi
138+
rm -r ${CSS_PATH}
139+
error_exit "Install css files unsuccessfully. Aborting..."
140+
fi
141+
fi
142+
else
143+
echo "No need to install css files"
144+
fi
145+
146+
# < Step 5: app files (~.py) >
147+
APP_PATH="${APP_ROOT}/service/${LOWER_NAME}"
148+
if [ -d "${APP_PATH}" ]; then
149+
# rollback
150+
rm -r ${IMG_PATH}
151+
rm -r ${TEMPLATES_PATH}
152+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
153+
rm -r ${JS_PATH}
154+
fi
155+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
156+
rm -r ${CSS_PATH}
157+
fi
158+
error_exit "${APP_PATH} exists. Aborting..."
159+
else
160+
if [ "$(ls -A ${PACKAGE_ROOT}/app)" ]; then
161+
mkdir ${APP_PATH}
162+
if cp -r ${PACKAGE_ROOT}/app/* ${APP_PATH}; then
163+
echo "app files have been installed"
164+
else
165+
# rollback
166+
rm -r ${IMG_PATH}
167+
rm -r ${TEMPLATES_PATH}
168+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
169+
rm -r ${JS_PATH}
170+
fi
171+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
172+
rm -r ${CSS_PATH}
173+
fi
174+
rm -r ${APP_PATH}
175+
error_exit "Install app files unsuccessfully. Aborting..."
176+
fi
177+
else
178+
error_exit "Cannot find app files. Aborting..."
179+
fi
180+
fi
181+
182+
# < Step 6: add app to settings.py >
183+
SETTINGS_PATH="${APP_ROOT}/settings.py"
184+
NEW_INSTALLED_APPS_TEXT="'sportal.service.$LOWER_NAME'"
185+
if sed -i "/INSTALLED_APPS/a \ \ \ \ ${NEW_INSTALLED_APPS_TEXT}," ${SETTINGS_PATH}; then
186+
echo "add app to INSTALLED_APPS successfully"
187+
else
188+
# rollback
189+
rm -r ${IMG_PATH}
190+
rm -r ${TEMPLATES_PATH}
191+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
192+
rm -r ${JS_PATH}
193+
fi
194+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
195+
rm -r ${CSS_PATH}
196+
fi
197+
rm -r ${APP_PATH}
198+
error_exit "Add app to INSTALLED_APPS unsuccessfully. Aborting..."
199+
fi
200+
201+
# < Step 7: include app's urlpatterns to urls.py >
202+
URLS_PATH="${APP_ROOT}/urls.py"
203+
IMPORT_URLS_FILE_TEXT="from service.${LOWER_NAME} import urls as ${LOWER_NAME}_urls"
204+
INCLUDE_URLPATTERNS_TEXT="url(r'^${LOWER_NAME}/', include(${LOWER_NAME}_urls.urlpatterns), kwargs={'service_name': '${SERVICE_NAME}'})"
205+
if sed -i "/from sportal.service import views as service_views/a ${IMPORT_URLS_FILE_TEXT}" ${URLS_PATH}; then
206+
echo "Import urls file successfully"
207+
if sed -i "/# services/a \ \ \ \ ${INCLUDE_URLPATTERNS_TEXT}," ${URLS_PATH}; then
208+
echo "Include url patterns successfully"
209+
else
210+
# rollback
211+
rm -r ${IMG_PATH}
212+
rm -r ${TEMPLATES_PATH}
213+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
214+
rm -r ${JS_PATH}
215+
fi
216+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
217+
rm -r ${CSS_PATH}
218+
fi
219+
rm -r ${APP_PATH}
220+
sed -i "/${NEW_INSTALLED_APPS_TEXT}/d" ${SETTINGS_PATH}
221+
sed -i "/${IMPORT_URLS_FILE_TEXT}/d" ${URLS_PATH}
222+
error_exit "Include url patterns unsuccessfully. Aborting..."
223+
fi
224+
else
225+
# rollback
226+
rm -r ${IMG_PATH}
227+
rm -r ${TEMPLATES_PATH}
228+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
229+
rm -r ${JS_PATH}
230+
fi
231+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
232+
rm -r ${CSS_PATH}
233+
fi
234+
rm -r ${APP_PATH}
235+
sed -i "/${NEW_INSTALLED_APPS_TEXT}/d" ${SETTINGS_PATH}
236+
error_exit "Import service urls unsuccessfully. Aborting..."
237+
fi
238+
239+
# < Step 8: sync GOC Portal Solutions to Service Portal >
240+
cd ${PROJECT_ROOT}
241+
if python -c 'import init_util; init_util.sync_admin_role_user_service()'; then
242+
echo "Sync GOC Portal Solution list successfully"
243+
else
244+
# rollback
245+
rm -r ${IMG_PATH}
246+
rm -r ${TEMPLATES_PATH}
247+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
248+
rm -r ${JS_PATH}
249+
fi
250+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
251+
rm -r ${CSS_PATH}
252+
fi
253+
rm -r ${APP_PATH}
254+
sed -i "/${NEW_INSTALLED_APPS_TEXT}/d" ${SETTINGS_PATH}
255+
sed -i "/${IMPORT_URLS_FILE_TEXT}/d" ${URLS_PATH}
256+
sed -i "/${INCLUDE_URLPATTERNS_TEXT}/d" ${URLS_PATH}
257+
error_exit "Sync GOC Portal Solution list unsuccessfully"
258+
fi
259+
260+
# < Step 9: database migration >
261+
if python ${PROJECT_ROOT}/manage.py migrate; then
262+
echo "Database migrate successfully"
263+
else
264+
# rollback
265+
rm -r ${IMG_PATH}
266+
rm -r ${TEMPLATES_PATH}
267+
if [ "$(ls -A ${PACKAGE_ROOT}/js)" ]; then
268+
rm -r ${JS_PATH}
269+
fi
270+
if [ "$(ls -A ${PACKAGE_ROOT}/css)" ]; then
271+
rm -r ${CSS_PATH}
272+
fi
273+
rm -r ${APP_PATH}
274+
sed -i "/${NEW_INSTALLED_APPS_TEXT}/d" ${SETTINGS_PATH}
275+
sed -i "/${IMPORT_URLS_FILE_TEXT}/d" ${URLS_PATH}
276+
sed -i "/${INCLUDE_URLPATTERNS_TEXT}/d" ${URLS_PATH}
277+
error_exit "Database migrate unsuccessfully. Aborting..."
278+
fi
279+
280+
# < Step 10: chown to www-data for Service Portal Django project folder >
281+
chown -R www-data:www-data ${PROJECT_ROOT}
282+
283+
echo "Done"

example/IaaS/logo.jpg

51.1 KB
Loading

example/IaaS/metadata.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Solution name
2+
name: IaaS
3+
# Human-readable name for your solution
4+
title: IaaS
5+
# Solution version
6+
version: '1.0.0'
7+
# Description
8+
description: IaaS Service for Service Portal
9+
# Category
10+
category: Bare
11+
# Required gemini version
12+
gemini_version: ['2016.4.0']

0 commit comments

Comments
 (0)