--- /dev/null
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) 2017 OPNFV.
+
+====================================
+Enabling OPNFV Doctor using DevStack
+====================================
+
+This directory contains the files necessary to run OpenStack with enabled
+OPNFV Doctor in DevStack.
+
+To configure DevStack to enable OPNFV Doctor edit
+``${DEVSTACK_DIR}/local.conf`` file and add::
+
+ enable_plugin aodh http://git.openstack.org/openstack/aodh
+ enable_plugin panko https://git.openstack.org/openstack/panko
+ enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer
+ enable_plugin osprofiler https://git.openstack.org/openstack/osprofiler
+ enable_plugin doctor https://git.opnfv.org/doctor
+
+to the ``[[local|localrc]]`` section.
+
+.. note:: The order of enabling plugins matters.
+
+Run DevStack as normal::
+
+ $ ./stack.sh
--- /dev/null
+#!/usr/bin/env bash
+
+##############################################################################
+# Copyright (c) 2017 ZTE Corporation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Defaults
+# --------
+
+CONF_FILES=(
+ $CINDER_CONF
+ $HEAT_CONF
+ $KEYSTONE_CONF
+ $NOVA_CONF
+ $NEUTRON_CONF
+ $GLANCE_API_CONF
+ $GLANCE_REGISTRY_CONF
+# Supported by osprofiler but not used in doctor at the moment
+# $TROVE_CONF
+# $TROVE_CONDUCTOR_CONF
+# $TROVE_GUESTAGENT_CONF
+# $TROVE_TASKMANAGER_CONF
+# $SENLIN_CONF
+# $MAGNUM_CONF
+# $ZUN_CONF
+)
+
+function install_doctor {
+ # no-op
+ :
+}
+
+function configure_doctor {
+ for conf in ${CONF_FILES[@]}; do
+ if [ -f $conf ]
+ then
+ iniset $conf profiler enabled true
+ iniset $conf profiler trace_sqlalchemy true
+ iniset $conf profiler hmac_keys $(iniget $conf profiler hmac_keys),${DOCTOR_HMAC_KEYS:=doctor}
+ iniset $conf profiler connection_string ${OSPROFILER_CONNECTION_STRING:=redis://127.0.0.1:6379}
+ fi
+ done
+}
+
+function init_doctor {
+ # no-op
+ :
+}
+
+# check for service enabled
+if is_service_enabled doctor; then
+
+ if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
+ # Set up system services
+ echo_summary "Configuring system services Doctor"
+ # install_package cowsay
+
+ elif [[ "$1" == "stack" && "$2" == "install" ]]; then
+ # Perform installation of service source
+ echo_summary "Installing Doctor"
+ install_doctor
+
+ elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
+ # Configure after the other layer 1 and 2 services have been configured
+ echo_summary "Configuring Doctor"
+ configure_doctor
+
+ elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
+ # Initialize and start the doctor service
+ echo_summary "Initializing Doctor"
+ init_doctor
+ fi
+
+ if [[ "$1" == "unstack" ]]; then
+ # Shut down doctor services
+ # no-op
+ :
+ fi
+
+ if [[ "$1" == "clean" ]]; then
+ # Remove state and transient data
+ # Remember clean.sh first calls unstack.sh
+ # no-op
+ :
+ fi
+fi
+
--- /dev/null
+# setting file for doctor
+
+enable_service doctor
from flask import request
import json
import logger as doctor_log
-import os
import time
LOG = doctor_log.Logger('doctor_consumer').getLogger()
auth_url = os.environ['OS_AUTH_URL']
username = os.environ['OS_USERNAME']
password = os.environ['OS_PASSWORD']
- user_domain_name = os.environ.get('OS_USER_DOMAIN_NAME')
+ user_domain_name = os.environ.get('OS_USER_DOMAIN_NAME') or 'default'
+ user_domain_id = os.environ.get('OS_USER_DOMAIN_ID') or 'default'
project_name = os.environ.get('OS_PROJECT_NAME') or os.environ.get('OS_TENANT_NAME')
- project_domain_name = os.environ.get('OS_PROJECT_DOMAIN_NAME')
+ project_domain_name = os.environ.get('OS_PROJECT_DOMAIN_NAME') or 'default'
+ project_domain_id = os.environ.get('OS_PROJECT_DOMAIN_ID') or 'default'
loader = loading.get_plugin_loader('password')
return loader.load_from_options(
username=username,
password=password,
user_domain_name=user_domain_name,
+ user_domain_id=user_domain_id,
project_name=project_name,
tenant_name=project_name,
- project_domain_name=project_domain_name)
+ project_domain_name=project_domain_name,
+ project_domain_id=project_domain_id)
def get_session(auth=None):
from flask import request
import json
import logger as doctor_log
-import os
import threading
import time
from datetime import datetime
import json
import logger as doctor_log
-import os
import requests
import socket
-import sys
import time
+from keystoneauth1 import session
from congressclient.v1 import client
import identity_auth
self.inspector_url = 'http://127.0.0.1:12345/events'
elif self.inspector_type == 'congress':
auth=identity_auth.get_identity_auth()
- sess=session.Session(auth=auth)
- congress = client.Client(session=sess, service_type='policy')
+ self.session=session.Session(auth=auth)
+ congress = client.Client(session=self.session, service_type='policy')
ds = congress.list_datasources()['results']
doctor_ds = next((item for item in ds if item['driver'] == 'doctor'),
None)
DOCTOR_PROJECT=doctor
DOCTOR_ROLE=_member_
PROFILER_TYPE=${PROFILER_TYPE:-none}
+PYTHON_ENABLE=${PYTHON_ENABLE:-false}
TOP_DIR=$(cd $(dirname "$0") && pwd)
# Main process
+if $PYTHON_ENABLE; then
+ cd $TOP_DIR
+ echo "executing tox..."
+ tox
+ exit $?
+fi
+
echo "Note: doctor/tests/run.sh has been executed."
git log --oneline -1 || true # ignore even you don't have git installed