2015-08-27 18:09:20 -07:00
|
|
|
#!/bin/bash
|
|
|
|
|
2016-11-05 02:28:02 +08:00
|
|
|
set -o errexit
|
|
|
|
|
2017-06-15 15:20:11 +01:00
|
|
|
FORCE_GENERATE="${FORCE_GENERATE}"
|
|
|
|
|
|
|
|
if [[ ${KOLLA_INSTALL_TYPE} == "binary" ]]; then
|
|
|
|
SITE_PACKAGES="/usr/lib/python2.7/site-packages"
|
|
|
|
elif [[ ${KOLLA_INSTALL_TYPE} == "source" ]]; then
|
|
|
|
SITE_PACKAGES="/var/lib/kolla/venv/lib/python2.7/site-packages"
|
|
|
|
fi
|
|
|
|
|
2017-07-24 18:03:02 +02:00
|
|
|
if [[ ${KOLLA_INSTALL_TYPE} == "source" ]] && [[ ! -f ${SITE_PACKAGES}/openstack_dashboard/local/local_settings.py ]]; then
|
2017-06-15 15:20:11 +01:00
|
|
|
ln -s /etc/openstack-dashboard/local_settings \
|
|
|
|
${SITE_PACKAGES}/openstack_dashboard/local/local_settings.py
|
|
|
|
fi
|
|
|
|
|
2016-09-08 12:49:02 +01:00
|
|
|
# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
|
|
|
|
# of the KOLLA_BOOTSTRAP variable being set, including empty.
|
|
|
|
if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
|
|
|
|
MANAGE_PY="/usr/bin/python /usr/bin/manage.py"
|
|
|
|
if [[ -f "/var/lib/kolla/venv/bin/python" ]]; then
|
|
|
|
MANAGE_PY="/var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/manage.py"
|
|
|
|
fi
|
2016-11-04 22:42:11 +08:00
|
|
|
$MANAGE_PY migrate --noinput
|
2016-09-08 12:49:02 +01:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2016-11-27 23:19:01 +08:00
|
|
|
function config_dashboard {
|
|
|
|
ENABLE=$1
|
|
|
|
SRC=$2
|
|
|
|
DEST=$3
|
2017-12-21 19:55:19 +08:00
|
|
|
if [[ ! -f ${SRC} ]]; then
|
|
|
|
echo "WARNING: ${SRC} is required"
|
|
|
|
elif [[ "${ENABLE}" == "yes" ]] && [[ ! -f "${DEST}" ]]; then
|
2016-11-27 23:19:01 +08:00
|
|
|
cp -a "${SRC}" "${DEST}"
|
2016-11-05 02:28:02 +08:00
|
|
|
FORCE_GENERATE="yes"
|
2016-11-27 23:19:01 +08:00
|
|
|
elif [[ "${ENABLE}" != "yes" ]] && [[ -f "${DEST}" ]]; then
|
2016-11-05 02:28:02 +08:00
|
|
|
# remove pyc pyo files too
|
2016-11-27 23:19:01 +08:00
|
|
|
rm -f "${DEST}" "${DEST}c" "${DEST}o"
|
2016-11-05 02:28:02 +08:00
|
|
|
FORCE_GENERATE="yes"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2016-11-11 08:28:47 +00:00
|
|
|
function config_cloudkitty_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/cloudkittydashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_CLOUDKITTY}" \
|
|
|
|
"${SITE_PACKAGES}/cloudkittydashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-12-02 06:03:41 +00:00
|
|
|
function config_designate_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/designatedashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_DESIGNATE}" \
|
|
|
|
"${SITE_PACKAGES}/designatedashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2017-09-24 13:26:03 +08:00
|
|
|
function config_fwaas_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/neutron_fwaas_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_FWAAS}" \
|
|
|
|
"${SITE_PACKAGES}/neutron_fwaas_dashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2017-02-05 21:23:23 +08:00
|
|
|
function config_freezer_ui {
|
|
|
|
for file in ${SITE_PACKAGES}/disaster_recovery/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_FREEZER}" \
|
|
|
|
"${SITE_PACKAGES}/disaster_recovery/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2017-12-11 13:57:38 +08:00
|
|
|
function config_heat_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/heat_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_HEAT}" \
|
|
|
|
"${SITE_PACKAGES}/heat_dashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-11-27 23:19:01 +08:00
|
|
|
function config_ironic_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/ironic_ui/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_IRONIC}" \
|
|
|
|
"${SITE_PACKAGES}/ironic_ui/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2017-01-21 10:38:13 +08:00
|
|
|
function config_karbor_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/karbor_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_KARBOR}" \
|
|
|
|
"${SITE_PACKAGES}/karbor_dashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-12-01 12:49:52 +00:00
|
|
|
function config_magnum_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/magnum_ui/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_MAGNUM}" \
|
|
|
|
"${SITE_PACKAGES}/magnum_ui/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-11-30 08:48:45 -03:00
|
|
|
function config_manila_ui {
|
2016-12-14 15:21:04 -03:00
|
|
|
for file in ${SITE_PACKAGES}/manila_ui/local/enabled/_*[^__].py; do
|
2016-11-30 08:48:45 -03:00
|
|
|
config_dashboard "${ENABLE_MANILA}" \
|
2016-12-14 15:21:04 -03:00
|
|
|
"${SITE_PACKAGES}/manila_ui/local/enabled/${file##*/}" \
|
2016-11-30 08:48:45 -03:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-11-05 02:28:02 +08:00
|
|
|
function config_murano_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/muranodashboard/local/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_MURANO}" \
|
|
|
|
"${SITE_PACKAGES}/muranodashboard/local/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
config_dashboard "${ENABLE_MURANO}"\
|
|
|
|
"${SITE_PACKAGES}/muranodashboard/conf/murano_policy.json" \
|
2017-01-27 21:51:30 +08:00
|
|
|
"/etc/openstack-dashboard/murano_policy.json"
|
2016-11-05 02:28:02 +08:00
|
|
|
|
|
|
|
config_dashboard "${ENABLE_MURANO}"\
|
|
|
|
"${SITE_PACKAGES}/muranodashboard/local/local_settings.d/_50_murano.py" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/local_settings.d/_50_murano.py"
|
|
|
|
}
|
|
|
|
|
2016-12-05 14:20:10 +08:00
|
|
|
function config_mistral_dashboard {
|
2016-12-15 15:03:10 +08:00
|
|
|
config_dashboard "${ENABLE_MISTRAL}" \
|
2017-01-06 15:09:26 +08:00
|
|
|
"${SITE_PACKAGES}/mistraldashboard/enabled/_50_mistral.py" \
|
2016-12-15 15:03:10 +08:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/_50_mistral.py"
|
2016-12-05 14:20:10 +08:00
|
|
|
}
|
|
|
|
|
2016-11-27 23:19:01 +08:00
|
|
|
function config_neutron_lbaas {
|
|
|
|
config_dashboard "${ENABLE_NEUTRON_LBAAS}" \
|
|
|
|
"${SITE_PACKAGES}/neutron_lbaas_dashboard/enabled/_1481_project_ng_loadbalancersv2_panel.py" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/_1481_project_ng_loadbalancersv2_panel.py"
|
|
|
|
}
|
|
|
|
|
2016-11-28 13:01:21 +08:00
|
|
|
function config_sahara_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/sahara_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_SAHARA}" \
|
|
|
|
"${SITE_PACKAGES}/sahara_dashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-12-15 15:03:10 +08:00
|
|
|
function config_searchlight_ui {
|
|
|
|
for file in ${SITE_PACKAGES}/searchlight_ui/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_SEARCHLIGHT}" \
|
|
|
|
"${SITE_PACKAGES}/searchlight_ui/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
|
|
|
|
config_dashboard "${ENABLE_SEARCHLIGHT}" \
|
2017-01-22 22:06:39 +08:00
|
|
|
"${SITE_PACKAGES}/searchlight_ui/local_settings.d/_1001_search_settings.py" \
|
2016-12-15 15:03:10 +08:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/local_settings.d/_1001_search_settings.py"
|
|
|
|
|
|
|
|
config_dashboard "${ENABLE_SEARCHLIGHT}" \
|
2017-01-22 22:06:39 +08:00
|
|
|
"${SITE_PACKAGES}/searchlight_ui/conf/searchlight_policy.json" \
|
2017-02-04 17:29:39 +08:00
|
|
|
"/etc/openstack-dashboard/searchlight_policy.json"
|
2016-12-15 15:03:10 +08:00
|
|
|
}
|
|
|
|
|
2016-12-05 17:46:57 +08:00
|
|
|
function config_senlin_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/senlin_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_SENLIN}" \
|
|
|
|
"${SITE_PACKAGES}/senlin_dashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
|
|
|
|
config_dashboard "${ENABLE_SENLIN}" \
|
|
|
|
"${SITE_PACKAGES}/senlin_dashboard/conf/senlin_policy.json" \
|
2017-02-04 17:29:39 +08:00
|
|
|
"/etc/openstack-dashboard/senlin_policy.json"
|
2016-12-05 17:46:57 +08:00
|
|
|
}
|
|
|
|
|
2016-12-14 16:14:07 +08:00
|
|
|
function config_solum_dashboard {
|
2017-02-06 15:33:33 +08:00
|
|
|
for file in ${SITE_PACKAGES}/solumdashboard/local/enabled/_*[^__].py; do
|
2017-01-22 21:36:54 +08:00
|
|
|
config_dashboard "${ENABLE_SOLUM}" \
|
2017-02-06 15:33:33 +08:00
|
|
|
"${SITE_PACKAGES}/solumdashboard/local/enabled/${file##*/}" \
|
2017-01-22 21:36:54 +08:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
2016-12-14 16:14:07 +08:00
|
|
|
}
|
|
|
|
|
2017-02-03 00:58:37 -05:00
|
|
|
function config_tacker_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/tacker_horizon/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_TACKER}" \
|
2017-02-06 15:50:27 +08:00
|
|
|
"${SITE_PACKAGES}/tacker_horizon/enabled/${file##*/}" \
|
2017-02-03 00:58:37 -05:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-12-01 04:00:35 +00:00
|
|
|
function config_trove_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/trove_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_TROVE}" \
|
|
|
|
"${SITE_PACKAGES}/trove_dashboard/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2017-12-29 17:49:03 +08:00
|
|
|
function config_vitrage_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/vitrage_dashboard/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_VITRAGE}" \
|
|
|
|
"${SITE_PACKAGES}/vitrage_dashboard/anabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-12-04 22:58:18 +08:00
|
|
|
function config_watcher_dashboard {
|
2017-07-13 22:18:57 +02:00
|
|
|
for file in ${SITE_PACKAGES}/watcher_dashboard/local/enabled/_*[^__].py; do
|
2016-12-04 22:58:18 +08:00
|
|
|
config_dashboard "${ENABLE_WATCHER}" \
|
2017-07-12 22:07:37 +02:00
|
|
|
"${SITE_PACKAGES}/watcher_dashboard/local/enabled/${file##*/}" \
|
2016-12-04 22:58:18 +08:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
|
|
|
|
config_dashboard "${ENABLE_WATCHER}" \
|
|
|
|
"${SITE_PACKAGES}/watcher_dashboard/conf/watcher_policy.json" \
|
2017-02-04 17:29:39 +08:00
|
|
|
"/etc/openstack-dashboard/watcher_policy.json"
|
2016-12-04 22:58:18 +08:00
|
|
|
}
|
|
|
|
|
2016-12-04 22:42:25 +08:00
|
|
|
function config_zaqar_dashboard {
|
2016-12-05 13:41:36 -03:00
|
|
|
for file in ${SITE_PACKAGES}/zaqar_ui/enabled/_*[^__].py; do
|
2016-12-04 22:42:25 +08:00
|
|
|
config_dashboard "${ENABLE_ZAQAR}" \
|
2016-12-05 13:41:36 -03:00
|
|
|
"${SITE_PACKAGES}/zaqar_ui/enabled/${file##*/}" \
|
2016-12-04 22:42:25 +08:00
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2017-03-31 09:21:53 +08:00
|
|
|
function config_zun_dashboard {
|
|
|
|
for file in ${SITE_PACKAGES}/zun_ui/enabled/_*[^__].py; do
|
|
|
|
config_dashboard "${ENABLE_ZUN}" \
|
|
|
|
"${SITE_PACKAGES}/zun_ui/enabled/${file##*/}" \
|
|
|
|
"${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-11-11 08:28:47 +00:00
|
|
|
config_cloudkitty_dashboard
|
2016-12-02 06:03:41 +00:00
|
|
|
config_designate_dashboard
|
2017-09-24 13:26:03 +08:00
|
|
|
config_fwaas_dashboard
|
2017-02-05 21:23:23 +08:00
|
|
|
config_freezer_ui
|
2017-12-11 13:57:38 +08:00
|
|
|
config_heat_dashboard
|
2016-11-27 23:19:01 +08:00
|
|
|
config_ironic_dashboard
|
2017-01-21 10:38:13 +08:00
|
|
|
config_karbor_dashboard
|
2016-12-01 12:49:52 +00:00
|
|
|
config_magnum_dashboard
|
2016-11-30 08:48:45 -03:00
|
|
|
config_manila_ui
|
2016-12-05 14:20:10 +08:00
|
|
|
config_mistral_dashboard
|
2016-11-05 02:28:02 +08:00
|
|
|
config_murano_dashboard
|
2016-11-05 02:28:02 +08:00
|
|
|
config_neutron_lbaas
|
2016-11-30 08:48:45 -03:00
|
|
|
config_sahara_dashboard
|
2016-12-02 14:56:47 +08:00
|
|
|
config_searchlight_ui
|
2016-12-05 17:46:57 +08:00
|
|
|
config_senlin_dashboard
|
2016-12-14 16:14:07 +08:00
|
|
|
config_solum_dashboard
|
2017-02-03 00:58:37 -05:00
|
|
|
config_tacker_dashboard
|
2016-12-01 04:00:35 +00:00
|
|
|
config_trove_dashboard
|
2017-12-29 17:49:03 +08:00
|
|
|
config_vitrage_dashboard
|
2016-12-04 22:58:18 +08:00
|
|
|
config_watcher_dashboard
|
2016-12-04 22:42:25 +08:00
|
|
|
config_zaqar_dashboard
|
2017-03-31 09:21:53 +08:00
|
|
|
config_zun_dashboard
|
2016-11-05 02:28:02 +08:00
|
|
|
|
2016-03-21 18:56:52 +00:00
|
|
|
# NOTE(pbourke): httpd will not clean up after itself in some cases which
|
|
|
|
# results in the container not being able to restart. (bug #1489676, 1557036)
|
|
|
|
if [[ "${KOLLA_BASE_DISTRO}" =~ debian|ubuntu ]]; then
|
2015-08-27 18:09:20 -07:00
|
|
|
# Loading Apache2 ENV variables
|
2016-08-23 19:11:41 +02:00
|
|
|
. /etc/apache2/envvars
|
2016-03-21 18:56:52 +00:00
|
|
|
rm -rf /var/run/apache2/*
|
|
|
|
else
|
2015-11-11 11:11:44 +00:00
|
|
|
rm -rf /var/run/httpd/* /run/httpd/* /tmp/httpd*
|
|
|
|
fi
|
2016-01-26 00:27:58 +08:00
|
|
|
|
|
|
|
# NOTE(jeffrey4l): The local_settings file affect django-compress
|
|
|
|
# behavior, so re-generate the compressed javascript and css if it
|
|
|
|
# is changed
|
2017-10-04 16:19:02 +01:00
|
|
|
MD5SUM_TXT_PATH="/var/lib/kolla/.local_settings.md5sum.txt"
|
2016-11-05 02:28:02 +08:00
|
|
|
if [[ ! -f ${MD5SUM_TXT_PATH} || $(md5sum -c --status ${MD5SUM_TXT_PATH};echo $?) != 0 || ${FORCE_GENERATE} == "yes" ]]; then
|
2016-01-26 00:27:58 +08:00
|
|
|
md5sum /etc/openstack-dashboard/local_settings > ${MD5SUM_TXT_PATH}
|
|
|
|
if [[ "${KOLLA_INSTALL_TYPE}" == "binary" ]]; then
|
2016-11-05 21:09:44 +08:00
|
|
|
/usr/bin/manage.py collectstatic --noinput --clear
|
2016-11-27 23:19:01 +08:00
|
|
|
/usr/bin/manage.py compress --force
|
2016-01-26 00:27:58 +08:00
|
|
|
elif [[ "${KOLLA_INSTALL_TYPE}" == "source" ]]; then
|
2016-11-05 21:09:44 +08:00
|
|
|
/var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/manage.py collectstatic --noinput --clear
|
2016-11-27 23:19:01 +08:00
|
|
|
/var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/manage.py compress --force
|
2016-01-26 00:27:58 +08:00
|
|
|
fi
|
|
|
|
fi
|
2016-03-23 12:04:16 -04:00
|
|
|
|
|
|
|
# NOTE(sbezverk) since Horizon is now storing logs in its own location, /var/log/horizon
|
|
|
|
# needs to be created if it does not exist
|
|
|
|
if [[ ! -d "/var/log/kolla/horizon" ]]; then
|
|
|
|
mkdir -p /var/log/kolla/horizon
|
|
|
|
fi
|
2017-06-15 15:20:11 +01:00
|
|
|
|
2016-03-23 12:04:16 -04:00
|
|
|
if [[ $(stat -c %a /var/log/kolla/horizon) != "755" ]]; then
|
|
|
|
chmod 755 /var/log/kolla/horizon
|
|
|
|
fi
|
2017-06-15 15:20:11 +01:00
|
|
|
|
2017-07-24 18:03:02 +02:00
|
|
|
if [[ -f ${SITE_PACKAGES}/openstack_dashboard/local/.secret_key_store ]] && [[ $(stat -c %U ${SITE_PACKAGES}/openstack_dashboard/local/.secret_key_store) != "horizon" ]]; then
|
2017-06-15 15:20:11 +01:00
|
|
|
chown horizon ${SITE_PACKAGES}/openstack_dashboard/local/.secret_key_store
|
|
|
|
fi
|