From 7ab4cff418b6b1188dcec9d2dd016ad8b96a21d0 Mon Sep 17 00:00:00 2001 From: shihanzhang Date: Wed, 14 Sep 2016 16:01:26 +0800 Subject: [PATCH] add devstack plugin for nimble Change-Id: I45736f20848bb2bb37ecae4fbb272185c8cf553c --- devstack/README.rst | 16 ++++ devstack/plugin.sh | 219 ++++++++++++++++++++++++++++++++++++++++++++ devstack/settings | 29 ++++++ etc/policy.json | 3 + 4 files changed, 267 insertions(+) create mode 100644 devstack/README.rst create mode 100644 devstack/plugin.sh create mode 100644 devstack/settings create mode 100644 etc/policy.json diff --git a/devstack/README.rst b/devstack/README.rst new file mode 100644 index 00000000..99db8ed0 --- /dev/null +++ b/devstack/README.rst @@ -0,0 +1,16 @@ +==================== +Enabling in Devstack +==================== + +1. Download DevStack:: + + git clone https://git.openstack.org/openstack-dev/devstack.git + cd devstack + +2. Add this repo as an external repository:: + + > cat local.conf + [[local|localrc]] + enable_plugin nimble https://git.openstack.org/openstack/nimble + +3. run ``stack.sh`` diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 00000000..bbebe95d --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,219 @@ +# ``stack.sh`` calls the entry points in this order: +# +# install_nimble +# install_python_nimbleclient +# configure_nimble +# start_nimble +# stop_nimble +# cleanup_nimble + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set -o xtrace + +# Defaults +# -------- + +# Support entry points installation of console scripts +if [[ -d ${NIMBLE_DIR}/bin ]]; then + NIMBLE_BIN_DIR=${NIMBLE_DIR}/bin +else + NIMBLE_BIN_DIR=$(get_python_exec_prefix) +fi + +# create_nimble_accounts - Set up common required nimble accounts +# +# Tenant User Roles +# ------------------------------ +# service nimble admin +function create_nimble_accounts { + create_service_user "nimble" "admin" + + if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + get_or_create_service "nimble" "baremetal_compute" "Baremetal Compute" + get_or_create_endpoint "baremetal_compute" \ + "$REGION_NAME" \ + "${NIMBLE_SERVICE_PROTOCOL}://${NIMBLE_SERVICE_HOST}:${NIMBLE_SERVICE_PORT}/v1" \ + "${NIMBLE_SERVICE_PROTOCOL}://${NIMBLE_SERVICE_HOST}:${NIMBLE_SERVICE_PORT}/v1" \ + "${NIMBLE_SERVICE_PROTOCOL}://${NIMBLE_SERVICE_HOST}:${NIMBLE_SERVICE_PORT}/v1" + fi +} + + +function mkdir_chown_stack { + if [[ ! -d "$1" ]]; then + sudo mkdir -p "$1" + fi + sudo chown $STACK_USER "$1" +} + +# Entry points +# ------------ + +# configure_nimble - Set config files, create data dirs, etc +function configure_nimble { + mkdir_chown_stack "${NIMBLE_CONF_DIR}" + + # Generate Nimble configuration file and configure common parameters. + oslo-config-generator --config-file ${NIMBLE_DIR}/tools/config/nimble-config-generator.conf --output-file ${NIMBLE_CONF_FILE} + iniset ${NIMBLE_CONF_FILE} DEFAULT debug ${NIMBLE_DEBUG} + + NIMBLE_POLICY_FILE=${NIMBLE_CONF_DIR}/policy.json + cp ${NIMBLE_DIR}/etc/policy.json ${NIMBLE_POLICY_FILE} + + # Nimble Configuration + #------------------------- + + # Setup keystone_authtoken section + iniset ${NIMBLE_CONF_FILE} keystone_authtoken auth_uri ${KEYSTONE_SERVICE_URI} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken project_domain_name ${SERVICE_DOMAIN_NAME} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken project_name ${SERVICE_TENANT_NAME} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken user_domain_name ${SERVICE_DOMAIN_NAME} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken username ${NIMBLE_ADMIN_USER} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken password ${SERVICE_PASSWORD} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken auth_url ${KEYSTONE_AUTH_URI} + iniset ${NIMBLE_CONF_FILE} keystone_authtoken auth_type "password" + + # Setup RabbitMQ credentials + iniset ${NIMBLE_CONF_FILE} oslo_messaging_rabbit rabbit_userid ${RABBIT_USERID} + iniset ${NIMBLE_CONF_FILE} oslo_messaging_rabbit rabbit_password ${RABBIT_PASSWORD} + + # Configure the database. + iniset ${NIMBLE_CONF_FILE} database connection `database_connection_url nimble` + + # Setup ironic section + iniset ${NIMBLE_CONF_FILE} ironic admin_tenant_name ${SERVICE_TENANT_NAME} + iniset ${NIMBLE_CONF_FILE} ironic admin_username "ironic" + iniset ${NIMBLE_CONF_FILE} ironic admin_password ${SERVICE_PASSWORD} + iniset ${NIMBLE_CONF_FILE} ironic admin_url "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_AUTH_HOST}:${KEYSTONE_SERVICE_PORT}/v2.0" + iniset ${NIMBLE_CONF_FILE} ironic api_endpoint "${KEYSTONE_AUTH_PROTOCOL}://${SERVICE_HOST}:${IRONIC_SERVICE_PORT}" + + # Setup neutron section + iniset ${NIMBLE_CONF_FILE} neutron url "${NIMBLE_SERVICE_PROTOCOL}://${SERVICE_HOST}:${NEUTRON_SERVICE_PORT}" + + # Setup keystone section + iniset ${NIMBLE_CONF_FILE} keystone region_name ${REGION_NAME} + + # Path of policy.json file. + iniset ${NIMBLE_CONF} oslo_policy policy_file ${NIMBLE_POLICY_FILE} + + if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then + setup_colorized_logging ${NIMBLE_CONF_FILE} DEFAULT tenant user + fi +} + + +# init_nimble - Initialize the database +function init_nimble { + # (re)create Nimble database + recreate_database nimble utf8 + ${NIMBLE_BIN_DIR}/nimble-dbsync --config-file ${NIMBLE_CONF_FILE} upgrade +} + + +# install_nimble - Collect source and prepare +function install_nimble { + # make sure all needed service were enabled + local req_services="key glance neutron ironic" + for srv in $req_services; do + if ! is_service_enabled "$srv"; then + die $LINENO "$srv should be enabled for Nimble." + fi + done + + setup_develop ${NIMBLE_DIR} + + if is_service_enabled horizon; then + _install_nimble_dashboard + fi +} + + +function _install_nimble_dashboard { + # add it when nimble dashboard is ready + : + #git_clone ${NIMBLE_DASHBOARD_REPO} ${NIMBLE_DASHBOARD_DIR} ${NIMBLE_DASHBOARD_BRANCH} + #setup_develop ${NIMBLE_DASHBOARD_DIR} + # add it when nimble dashboard is ready + #ln -fs ${NIMBLE_DASHBOARD_DIR}/_xx_nimble.py.example ${HORIZON_DIR}/openstack_dashboard/local/enabled/_xx_nimble.py +} + + +function install_nimble_pythonclient { + if use_library_from_git "python-nimbleclient"; then + # add it when nimble nimble-pythonclient is ready + : + #git_clone ${NIMBLE_PYTHONCLIENT_REPO} ${NIMBLE_PYTHONCLIENT_DIR} ${NIMBLE_PYTHONCLIENT_BRANCH} + #setup_develop ${NIMBLE_PYTHONCLIENT_DIR} + fi +} + + +# start_nimble - Start running processes, including screen +function start_nimble { + if is_service_enabled nimble-api && is_service_enabled nimble-engine ; then + echo_summary "Installing all nimble services in separate processes" + run_process nimble-api "${NIMBLE_BIN_DIR}/nimble-api --config-file ${NIMBLE_CONF_DIR}/nimble.conf" + if ! wait_for_service ${SERVICE_TIMEOUT} ${NIMBLE_SERVICE_PROTOCOL}://${NIMBLE_SERVICE_HOST}:${NIMBLE_SERVICE_PORT}; then + die $LINENO "nimble-api did not start" + fi + run_process nimble-engine "${NIMBLE_BIN_DIR}/nimble-engine --config-file ${NIMBLE_CONF_DIR}/nimble.conf" + fi +} + + +# stop_nimble - Stop running processes +function stop_nimble { + # Kill the Nimble screen windows + for serv in nimble-api nimble-engine; do + stop_process $serv + done +} + + +function cleanup_nimble { + if is_service_enabled horizon; then + _nimble_cleanup_nimble_dashboard + fi +} + + +function _nimble_cleanup_nimble_dashboard { + rm -f ${HORIZON_DIR}/openstack_dashboard/local/enabled/_xx_nimble.py +} + + +if is_service_enabled nimble; then + if [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing nimble" + install_nimble + install_nimble_pythonclient + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + echo_summary "Configuring nimble" + configure_nimble + create_nimble_accounts + elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + echo_summary "Initializing nimble" + init_nimble + start_nimble + fi + + if [[ "$1" == "unstack" ]]; then + echo_summary "Shutting down nimble" + stop_nimble + fi + + if [[ "$1" == "clean" ]]; then + echo_summary "Cleaning nimble" + #add it when nimble dashboard + #cleanup_nimble + fi +fi + + +# Restore xtrace +$XTRACE + +# Local variables: +# mode: shell-script +# End: diff --git a/devstack/settings b/devstack/settings new file mode 100644 index 00000000..82a71e3e --- /dev/null +++ b/devstack/settings @@ -0,0 +1,29 @@ +# Devstack settings + +# We have to add Nimble to enabled services for run_process to work +# Now we just support to run services in separate processes and screens: +# enable_service nimble nimble-api nimble-engine +enable_service nimble nimble-api nimble-engine + +# Set up default repos +NIMBLE_REPO=${NIMBLE_REPO:-${GIT_BASE}/openstack/nimble.git} +NIMBLE_BRANCH=${NIMBLE_BRANCH:-master} +#NIMBLE_DASHBOARD_REPO=${NIMBLE_DASHBOARD_REPO:-${GIT_BASE}/openstack/nimble-dashboard.git} +#NIMBLE_DASHBOARD_BRANCH=${NIMBLE_DASHBOARD_BRANCH:-${NIMBLE_BRANCH}} + +#NIMBLE_PYTHONCLIENT_REPO=${NIMBLE_PYTHONCLIENT_REPO:-${GIT_BASE}/openstack/python-nimbleclient.git} +#NIMBLE_PYTHONCLIENT_BRANCH=${NIMBLE_PYTHONCLIENT_BRANCH:-master} +#NIMBLE_PYTHONCLIENT_DIR=$DEST/python-nimbleclient + +# Set up default directories +NIMBLE_DIR=$DEST/nimble +NIMBLE_DASHBOARD_DIR=$DEST/nimble-dashboard +NIMBLE_CONF_DIR=${NIMBLE_CONF_DIR:-/etc/nimble} +NIMBLE_CONF_FILE=${NIMBLE_CONF_DIR}/nimble.conf +NIMBLE_DEBUG=${NIMBLE_DEBUG:-True} + +NIMBLE_SERVICE_HOST=${NIMBLE_SERVICE_HOST:-$SERVICE_HOST} +NIMBLE_SERVICE_PORT=${NIMBLE_SERVICE_PORT:-6688} +NIMBLE_SERVICE_PROTOCOL=${NIMBLE_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL} + +NIMBLE_ADMIN_USER=${NIMBLE_ADMIN_USER:-nimble} diff --git a/etc/policy.json b/etc/policy.json new file mode 100644 index 00000000..0db3279e --- /dev/null +++ b/etc/policy.json @@ -0,0 +1,3 @@ +{ + +}