[BASHATE] Extended code analysis

Followign code adds linting with bashate to
devstack/plugin.sh

Change-Id: Iec6e82a6ddc8ce4e405196509777c029139b5025
This commit is contained in:
Tomasz Trębski 2017-02-02 09:47:28 +01:00
parent 8d501d5443
commit 9d470036f5
3 changed files with 241 additions and 230 deletions

View File

@ -52,9 +52,9 @@ export MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_
export MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb} export MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}
# Make sure we use ORM mapping as default if postgresql is enabled # Make sure we use ORM mapping as default if postgresql is enabled
if is_service_enabled mysql; then if is_service_enabled mysql; then
MONASCA_DATABASE_USE_ORM=${MONASCA_DATABASE_USE_ORM:-false} MONASCA_DATABASE_USE_ORM=${MONASCA_DATABASE_USE_ORM:-false}
elif is_service_enabled postgresql; then elif is_service_enabled postgresql; then
MONASCA_DATABASE_USE_ORM=true MONASCA_DATABASE_USE_ORM=true
fi fi
MONASCA_DATABASE_USE_ORM=$(trueorfalse False MONASCA_DATABASE_USE_ORM) MONASCA_DATABASE_USE_ORM=$(trueorfalse False MONASCA_DATABASE_USE_ORM)
@ -81,18 +81,18 @@ MON_DB_HOSTS=("%" "localhost" "$DATABASE_HOST" "$MYSQL_HOST")
MON_DB_HOSTS=$(echo "${MON_DB_HOSTS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ') MON_DB_HOSTS=$(echo "${MON_DB_HOSTS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
function pre_install_monasca { function pre_install_monasca {
echo_summary "Pre-Installing Monasca Components" echo_summary "Pre-Installing Monasca Components"
install_git install_git
install_maven install_maven
install_openjdk_8_jdk install_openjdk_8_jdk
install_kafka install_kafka
if is_service_enabled monasca-storm; then if is_service_enabled monasca-storm; then
install_storm install_storm
fi fi
install_monasca_$MONASCA_METRICS_DB install_monasca_$MONASCA_METRICS_DB
} }
function install_monasca { function install_monasca {
@ -103,57 +103,56 @@ function install_monasca {
download_monasca_libraries download_monasca_libraries
if is_service_enabled monasca-persister; then if is_service_enabled monasca-persister; then
install_monasca_persister_$MONASCA_PERSISTER_IMPLEMENTATION_LANG install_monasca_persister_$MONASCA_PERSISTER_IMPLEMENTATION_LANG
sudo systemctl enable monasca-persister sudo systemctl enable monasca-persister
fi fi
if is_service_enabled monasca-notification; then if is_service_enabled monasca-notification; then
install_monasca_notification install_monasca_notification
fi fi
if is_service_enabled monasca-thresh; then if is_service_enabled monasca-thresh; then
if ! is_service_enabled monasca-storm; then if ! is_service_enabled monasca-storm; then
die "monasca-thresh requires monasca-storm service to be enabled" die "monasca-thresh requires monasca-storm service to be enabled"
fi fi
install_monasca_thresh install_monasca_thresh
fi fi
if is_service_enabled monasca-api; then if is_service_enabled monasca-api; then
install_monasca_api_$MONASCA_API_IMPLEMENTATION_LANG install_monasca_api_$MONASCA_API_IMPLEMENTATION_LANG
sudo systemctl enable monasca-api sudo systemctl enable monasca-api
fi fi
install_cli_creds install_cli_creds
} }
function post_config_monasca { function post_config_monasca {
echo_summary "Configuring Monasca" echo_summary "Configuring Monasca"
#(trebskit) Installing should happen in post-config phase #(trebskit) Installing should happen in post-config phase
# at this point databases is already configured # at this point databases is already configured
install_schema install_schema
configure_screen configure_screen
} }
function configure_screen { function configure_screen {
if [[ -n ${SCREEN_LOGDIR} ]]; then if [[ -n ${SCREEN_LOGDIR} ]]; then
sudo ln -sf /var/log/influxdb/influxd.log ${SCREEN_LOGDIR}/screen-influxdb.log || true sudo ln -sf /var/log/influxdb/influxd.log ${SCREEN_LOGDIR}/screen-influxdb.log || true
sudo ln -sf /var/log/monasca/api/monasca-api.log ${SCREEN_LOGDIR}/screen-monasca-api.log || true sudo ln -sf /var/log/monasca/api/monasca-api.log ${SCREEN_LOGDIR}/screen-monasca-api.log || true
sudo ln -sf /var/log/monasca/persister/persister.log ${SCREEN_LOGDIR}/screen-monasca-persister.log || true sudo ln -sf /var/log/monasca/persister/persister.log ${SCREEN_LOGDIR}/screen-monasca-persister.log || true
sudo ln -sf /var/log/monasca/notification/notification.log ${SCREEN_LOGDIR}/screen-monasca-notification.log || true sudo ln -sf /var/log/monasca/notification/notification.log ${SCREEN_LOGDIR}/screen-monasca-notification.log || true
sudo ln -sf /var/log/monasca/agent/statsd.log ${SCREEN_LOGDIR}/screen-monasca-agent-statsd.log || true sudo ln -sf /var/log/monasca/agent/statsd.log ${SCREEN_LOGDIR}/screen-monasca-agent-statsd.log || true
sudo ln -sf /var/log/monasca/agent/supervisor.log ${SCREEN_LOGDIR}/screen-monasca-agent-supervisor.log || true sudo ln -sf /var/log/monasca/agent/supervisor.log ${SCREEN_LOGDIR}/screen-monasca-agent-supervisor.log || true
sudo ln -sf /var/log/monasca/agent/collector.log ${SCREEN_LOGDIR}/screen-monasca-agent-collector.log || true sudo ln -sf /var/log/monasca/agent/collector.log ${SCREEN_LOGDIR}/screen-monasca-agent-collector.log || true
sudo ln -sf /var/log/monasca/agent/forwarder.log ${SCREEN_LOGDIR}/screen-monasca-agent-forwarder.log || true sudo ln -sf /var/log/monasca/agent/forwarder.log ${SCREEN_LOGDIR}/screen-monasca-agent-forwarder.log || true
sudo ln -sf /var/log/storm/access.log${SCREEN_LOGDIR}/screen-monasca-thresh-access.log || true sudo ln -sf /var/log/storm/access.log${SCREEN_LOGDIR}/screen-monasca-thresh-access.log || true
sudo ln -sf /var/log/storm/supervisor.log ${SCREEN_LOGDIR}/screen-monasca-thresh-supervisor.log || true sudo ln -sf /var/log/storm/supervisor.log ${SCREEN_LOGDIR}/screen-monasca-thresh-supervisor.log || true
sudo ln -sf /var/log/storm/metrics.log${SCREEN_LOGDIR}/screen-monasca-thresh-metrics.log || true sudo ln -sf /var/log/storm/metrics.log${SCREEN_LOGDIR}/screen-monasca-thresh-metrics.log || true
sudo ln -sf /var/log/storm/nimbus.log${SCREEN_LOGDIR}/screen-monasca-thresh-nimbus.log || true sudo ln -sf /var/log/storm/nimbus.log${SCREEN_LOGDIR}/screen-monasca-thresh-nimbus.log || true
sudo ln -sf /var/log/storm/worker-6701.log ${SCREEN_LOGDIR}/screen-monasca-thresh-worker-6701.log || true sudo ln -sf /var/log/storm/worker-6701.log ${SCREEN_LOGDIR}/screen-monasca-thresh-worker-6701.log || true
sudo ln -sf /var/log/storm/worker-6702.log ${SCREEN_LOGDIR}/screen-monasca-thresh-worker-6702.log || true sudo ln -sf /var/log/storm/worker-6702.log ${SCREEN_LOGDIR}/screen-monasca-thresh-worker-6702.log || true
fi fi
} }
function extra_monasca { function extra_monasca {
@ -182,7 +181,7 @@ function extra_monasca {
function start_monasca_services { function start_monasca_services {
if is_service_enabled monasca-api; then if is_service_enabled monasca-api; then
start_service monasca-api || restart_service monasca-api start_service monasca-api || restart_service monasca-api
fi fi
if is_service_enabled monasca-persister; then if is_service_enabled monasca-persister; then
start_service monasca-persister || restart_service monasca-persister start_service monasca-persister || restart_service monasca-persister
@ -197,8 +196,8 @@ function start_monasca_services {
start_service grafana-server || restart_service grafana-server start_service grafana-server || restart_service grafana-server
fi fi
if is_service_enabled monasca-agent; then if is_service_enabled monasca-agent; then
sudo /usr/local/bin/monasca-reconfigure sudo /usr/local/bin/monasca-reconfigure
start_service monasca-agent || restart_service monasca-agent start_service monasca-agent || restart_service monasca-agent
fi fi
} }
@ -251,7 +250,7 @@ function clean_monasca {
clean_monasca_default_alarms clean_monasca_default_alarms
if is_service_enabled monasca-agent; then if is_service_enabled monasca-agent; then
clean_monasca_agent clean_monasca_agent
fi fi
clean_monasca_keystone_client clean_monasca_keystone_client
@ -637,54 +636,60 @@ function clean_cli_creds {
} }
function install_schema { function install_schema {
echo_summary "Install Monasca Schema" echo_summary "Install Monasca Schema"
sudo mkdir -p $MONASCA_SCHEMA_DIR || true sudo mkdir -p $MONASCA_SCHEMA_DIR || true
sudo chmod 0755 $MONASCA_SCHEMA_DIR sudo chmod 0755 $MONASCA_SCHEMA_DIR
install_schema_metric_database_$MONASCA_METRICS_DB install_schema_metric_database_$MONASCA_METRICS_DB
install_schema_alarm_database install_schema_alarm_database
install_schema_kafka_topics install_schema_kafka_topics
} }
function install_schema_metric_database_influxdb { function install_schema_metric_database_influxdb {
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/schema/influxdb_setup.py $MONASCA_SCHEMA_DIR/influxdb_setup.py sudo cp -f "${MONASCA_API_DIR}"/devstack/files/schema/influxdb_setup.py $MONASCA_SCHEMA_DIR/influxdb_setup.py
sudo chmod 0750 $MONASCA_SCHEMA_DIR/influxdb_setup.py sudo chmod 0750 $MONASCA_SCHEMA_DIR/influxdb_setup.py
sudo chown root:root $MONASCA_SCHEMA_DIR/influxdb_setup.py sudo chown root:root $MONASCA_SCHEMA_DIR/influxdb_setup.py
sudo $MONASCA_SCHEMA_DIR/influxdb_setup.py sudo $MONASCA_SCHEMA_DIR/influxdb_setup.py
} }
function install_schema_kafka_topics { function install_schema_kafka_topics {
sudo mkdir -p /opt/kafka/logs || true sudo mkdir -p /opt/kafka/logs || true
sudo chown kafka:kafka /opt/kafka/logs sudo chown kafka:kafka /opt/kafka/logs
sudo chmod 0766 /opt/kafka/logs sudo chmod 0766 /opt/kafka/logs
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 64 --topic metrics /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic events --replication-factor 1 --partitions 64 --topic metrics
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-state-transitions /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-notifications --replication-factor 1 --partitions 12 --topic events
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic retry-notifications /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic 60-seconds-notifications --replication-factor 1 --partitions 12 --topic alarm-state-transitions
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 12 --topic alarm-notifications
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 3 --topic retry-notifications
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 3 --topic 60-seconds-notifications
} }
function install_schema_alarm_database { function install_schema_alarm_database {
local databaseName="mon" local databaseName="mon"
# copy the file with the $DATABASE_TYPE to just know what DB is used # copy the file with the $DATABASE_TYPE to just know what DB is used
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/schema/mon_$DATABASE_TYPE.sql $MONASCA_SCHEMA_DIR/mon_$DATABASE_TYPE.sql sudo cp -f "${MONASCA_API_DIR}"/devstack/files/schema/mon_$DATABASE_TYPE.sql $MONASCA_SCHEMA_DIR/mon_$DATABASE_TYPE.sql
sudo ln -sf $MONASCA_SCHEMA_DIR/mon_$DATABASE_TYPE.sql $MONASCA_SCHEMA_DIR/mon.sql sudo ln -sf $MONASCA_SCHEMA_DIR/mon_$DATABASE_TYPE.sql $MONASCA_SCHEMA_DIR/mon.sql
sudo chmod 0644 $MONASCA_SCHEMA_DIR/mon.sql sudo chmod 0644 $MONASCA_SCHEMA_DIR/mon.sql
sudo chown root:root $MONASCA_SCHEMA_DIR/mon.sql sudo chown root:root $MONASCA_SCHEMA_DIR/mon.sql
recreate_database $databaseName recreate_database $databaseName
if is_service_enabled mysql; then if is_service_enabled mysql; then
sudo mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST < $MONASCA_SCHEMA_DIR/mon.sql sudo mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST < $MONASCA_SCHEMA_DIR/mon.sql
elif is_service_enabled postgresql; then elif is_service_enabled postgresql; then
sudo -u root sudo -u postgres -i psql -d $databaseName -f $MONASCA_SCHEMA_DIR/mon.sql sudo -u root sudo -u postgres -i psql -d $databaseName -f $MONASCA_SCHEMA_DIR/mon.sql
fi fi
# for postgres, creating users must be after schema has been deployed # for postgres, creating users must be after schema has been deployed
recreate_users $databaseName MON_DB_USERS MON_DB_HOSTS recreate_users $databaseName MON_DB_USERS MON_DB_HOSTS
} }
@ -693,9 +698,9 @@ function clean_schema {
echo_summary "Clean Monasca Schema" echo_summary "Clean Monasca Schema"
if is_service_enabled mysql; then if is_service_enabled mysql; then
sudo echo "drop database mon;" | mysql -u$DATABASE_USER -p$DATABASE_PASSWORD sudo echo "drop database mon;" | mysql -u$DATABASE_USER -p$DATABASE_PASSWORD
elif is_service_enabled postgresql; then elif is_service_enabled postgresql; then
sudo -u postgres psql -c "DROP DATABASE mon;" sudo -u postgres psql -c "DROP DATABASE mon;"
fi fi
sudo rm -rf $MONASCA_SCHEMA_DIR sudo rm -rf $MONASCA_SCHEMA_DIR
@ -744,9 +749,8 @@ function install_git {
} }
function download_monasca_libraries { function download_monasca_libraries {
echo_summary "Download Monasca monasca_common and monasca_statsd" echo_summary "Download Monasca monasca_common and monasca_statsd"
GIT_DEPTH_OLD=$GIT_DEPTH GIT_DEPTH_OLD=$GIT_DEPTH
GIT_DEPTH=0 GIT_DEPTH=0
git_clone $MONASCA_COMMON_REPO $MONASCA_COMMON_DIR $MONASCA_COMMON_BRANCH git_clone $MONASCA_COMMON_REPO $MONASCA_COMMON_DIR $MONASCA_COMMON_BRANCH
@ -771,10 +775,11 @@ function install_monasca_api_java {
(cd "${MONASCA_API_DIR}"/java ; sudo mvn clean package -DskipTests) (cd "${MONASCA_API_DIR}"/java ; sudo mvn clean package -DskipTests)
local version="$(get_version_from_pom "${MONASCA_API_DIR}"/java)" local version=""
version="$(get_version_from_pom "${MONASCA_API_DIR}"/java)"
sudo cp -f "${MONASCA_API_DIR}"/java/target/monasca-api-${version}-shaded.jar \ sudo cp -f "${MONASCA_API_DIR}"/java/target/monasca-api-${version}-shaded.jar \
/opt/monasca/monasca-api.jar /opt/monasca/monasca-api.jar
sudo useradd --system -g monasca mon-api || true sudo useradd --system -g monasca mon-api || true
@ -815,10 +820,10 @@ function install_monasca_api_java {
local dbPort=3306 local dbPort=3306
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
dbEngine="org.postgresql.ds.PGPoolingDataSource" dbEngine="org.postgresql.ds.PGPoolingDataSource"
dbPort=5432 dbPort=5432
fi fi
fi fi
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-api/api-config.yml /etc/monasca/api-config.yml sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-api/api-config.yml /etc/monasca/api-config.yml
@ -826,23 +831,23 @@ function install_monasca_api_java {
sudo chmod 0640 /etc/monasca/api-config.yml sudo chmod 0640 /etc/monasca/api-config.yml
sudo sed -e " sudo sed -e "
s|%KAFKA_HOST%|$SERVICE_HOST|g; s|%KAFKA_HOST%|$SERVICE_HOST|g;
s|%MONASCA_DATABASE_USE_ORM%|$MONASCA_DATABASE_USE_ORM|g; s|%MONASCA_DATABASE_USE_ORM%|$MONASCA_DATABASE_USE_ORM|g;
s|%MONASCA_API_DATABASE_ENGINE%|$dbEngine|g; s|%MONASCA_API_DATABASE_ENGINE%|$dbEngine|g;
s|%MONASCA_API_DATABASE_USER%|$MONASCA_API_DATABASE_USER|g; s|%MONASCA_API_DATABASE_USER%|$MONASCA_API_DATABASE_USER|g;
s|%DATABASE_HOST%|$DATABASE_HOST|g; s|%DATABASE_HOST%|$DATABASE_HOST|g;
s|%DATABASE_PORT%|$dbPort|g; s|%DATABASE_PORT%|$dbPort|g;
s|%MYSQL_HOST%|$MYSQL_HOST|g; s|%MYSQL_HOST%|$MYSQL_HOST|g;
s|%MYSQL_PORT%|$dbPort|g; s|%MYSQL_PORT%|$dbPort|g;
s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g; s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g;
s|%MONASCA_METRICS_DB%|$MONASCA_METRICS_DB|g; s|%MONASCA_METRICS_DB%|$MONASCA_METRICS_DB|g;
s|%INFLUXDB_HOST%|$SERVICE_HOST|g; s|%INFLUXDB_HOST%|$SERVICE_HOST|g;
s|%INFLUXDB_PORT%|8086|g; s|%INFLUXDB_PORT%|8086|g;
s|%VERTICA_HOST%|$SERVICE_HOST|g; s|%VERTICA_HOST%|$SERVICE_HOST|g;
s|%SERVICE_HOST%|$SERVICE_HOST|g; s|%SERVICE_HOST%|$SERVICE_HOST|g;
s|%ADMIN_PASSWORD%|$ADMIN_PASSWORD|g; s|%ADMIN_PASSWORD%|$ADMIN_PASSWORD|g;
s|%KEYSTONE_SERVICE_PORT%|$KEYSTONE_SERVICE_PORT|g; s|%KEYSTONE_SERVICE_PORT%|$KEYSTONE_SERVICE_PORT|g;
s|%KEYSTONE_SERVICE_HOST%|$KEYSTONE_SERVICE_HOST|g; s|%KEYSTONE_SERVICE_HOST%|$KEYSTONE_SERVICE_HOST|g;
" -i /etc/monasca/api-config.yml " -i /etc/monasca/api-config.yml
} }
@ -874,11 +879,11 @@ function install_monasca_api_python {
pip_install cassandra-driver>=2.1.4,!=3.6.0 pip_install cassandra-driver>=2.1.4,!=3.6.0
fi fi
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
apt_get -y install libpq-dev apt_get -y install libpq-dev
pip_install psycopg2==2.6.2 pip_install psycopg2==2.6.2
elif is_service_enabled mysql; then elif is_service_enabled mysql; then
apt_get -y install libmysqlclient-dev apt_get -y install libmysqlclient-dev
pip_install PyMySQL pip_install PyMySQL
fi fi
setup_install $MONASCA_API_DIR setup_install $MONASCA_API_DIR
@ -914,11 +919,15 @@ function install_monasca_api_python {
# if monasca devstack would use DATABASE_USER everywhere, following line # if monasca devstack would use DATABASE_USER everywhere, following line
# might be replaced with database_connection_url call # might be replaced with database_connection_url call
local dbAlarmUrl=`get_database_type_$DATABASE_TYPE`://$MONASCA_API_DATABASE_USER:$DATABASE_PASSWORD@$DATABASE_HOST/mon local dbAlarmUrl
local dbMetricDriver="monasca_api.common.repositories.influxdb.metrics_repository:MetricsRepository" local dbMetricDriver
if [[ "${MONASCA_METRICS_DB,,}" == 'cassandra' ]]; then if [[ "${MONASCA_METRICS_DB,,}" == 'cassandra' ]]; then
dbMetricDriver="monasca_api.common.repositories.cassandra.metrics_repository:MetricsRepository" dbMetricDriver="monasca_api.common.repositories.cassandra.metrics_repository:MetricsRepository"
else
dbMetricDriver="monasca_api.common.repositories.influxdb.metrics_repository:MetricsRepository"
fi fi
dbAlarmUrl=`get_database_type_$DATABASE_TYPE`://$MONASCA_API_DATABASE_USER:$DATABASE_PASSWORD@$DATABASE_HOST/mon
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-api/python/api-config.conf /etc/monasca/api-config.conf sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-api/python/api-config.conf /etc/monasca/api-config.conf
sudo chown mon-api:root /etc/monasca/api-config.conf sudo chown mon-api:root /etc/monasca/api-config.conf
@ -936,24 +945,24 @@ function install_monasca_api_python {
sudo ln -sf /etc/monasca/api-config.ini /etc/api-config.ini sudo ln -sf /etc/monasca/api-config.ini /etc/api-config.ini
sudo sed -e " sudo sed -e "
s|%KEYSTONE_AUTH_HOST%|$KEYSTONE_AUTH_HOST|g; s|%KEYSTONE_AUTH_HOST%|$KEYSTONE_AUTH_HOST|g;
s|%KEYSTONE_AUTH_PORT%|$KEYSTONE_AUTH_PORT|g; s|%KEYSTONE_AUTH_PORT%|$KEYSTONE_AUTH_PORT|g;
s|%KEYSTONE_SERVICE_HOST%|$KEYSTONE_SERVICE_HOST|g; s|%KEYSTONE_SERVICE_HOST%|$KEYSTONE_SERVICE_HOST|g;
s|%KEYSTONE_SERVICE_PORT%|$KEYSTONE_SERVICE_PORT|g; s|%KEYSTONE_SERVICE_PORT%|$KEYSTONE_SERVICE_PORT|g;
s|%DATABASE_HOST%|$DATABASE_HOST|g; s|%DATABASE_HOST%|$DATABASE_HOST|g;
s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g; s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g;
s|%MONASCA_API_DATABASE_USER%|$MONASCA_API_DATABASE_USER|g; s|%MONASCA_API_DATABASE_USER%|$MONASCA_API_DATABASE_USER|g;
s|%MONASCA_API_DATABASE_URL%|$dbAlarmUrl|g; s|%MONASCA_API_DATABASE_URL%|$dbAlarmUrl|g;
s|%MONASCA_METRIC_DATABASE_DRIVER%|$dbMetricDriver|g; s|%MONASCA_METRIC_DATABASE_DRIVER%|$dbMetricDriver|g;
s|%CASSANDRA_HOST%|$SERVICE_HOST|g; s|%CASSANDRA_HOST%|$SERVICE_HOST|g;
s|%INFLUXDB_HOST%|$SERVICE_HOST|g; s|%INFLUXDB_HOST%|$SERVICE_HOST|g;
s|%INFLUXDB_PORT%|8086|g; s|%INFLUXDB_PORT%|8086|g;
s|%KAFKA_HOST%|$SERVICE_HOST|g; s|%KAFKA_HOST%|$SERVICE_HOST|g;
s|%ADMIN_PASSWORD%|$ADMIN_PASSWORD|g; s|%ADMIN_PASSWORD%|$ADMIN_PASSWORD|g;
" -i /etc/monasca/api-config.conf " -i /etc/monasca/api-config.conf
sudo sed -e " sudo sed -e "
s|%SERVICE_HOST%|$SERVICE_HOST|g; s|%SERVICE_HOST%|$SERVICE_HOST|g;
" -i /etc/monasca/api-config.ini " -i /etc/monasca/api-config.ini
} }
@ -1008,10 +1017,10 @@ function clean_monasca_api_python {
sudo userdel mon-api sudo userdel mon-api
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
apt_get -y purge libpq-dev apt_get -y purge libpq-dev
elif is_service_enabled mysql; then elif is_service_enabled mysql; then
apt_get -y purge libpq-dev apt_get -y purge libpq-dev
apt_get -y purge libmysqlclient-dev apt_get -y purge libmysqlclient-dev
fi fi
} }
@ -1023,10 +1032,11 @@ function install_monasca_persister_java {
git_clone $MONASCA_PERSISTER_REPO $MONASCA_PERSISTER_DIR $MONASCA_PERSISTER_BRANCH git_clone $MONASCA_PERSISTER_REPO $MONASCA_PERSISTER_DIR $MONASCA_PERSISTER_BRANCH
(cd "${MONASCA_PERSISTER_DIR}"/java ; sudo mvn clean package -DskipTests) (cd "${MONASCA_PERSISTER_DIR}"/java ; sudo mvn clean package -DskipTests)
local version="$(get_version_from_pom "${MONASCA_PERSISTER_DIR}"/java)" local version=""
version="$(get_version_from_pom "${MONASCA_PERSISTER_DIR}"/java)"
sudo cp -f "${MONASCA_PERSISTER_DIR}"/java/target/monasca-persister-${version}-shaded.jar \ sudo cp -f "${MONASCA_PERSISTER_DIR}"/java/target/monasca-persister-${version}-shaded.jar \
/opt/monasca/monasca-persister.jar /opt/monasca/monasca-persister.jar
sudo useradd --system -g monasca mon-persister || true sudo useradd --system -g monasca mon-persister || true
@ -1246,16 +1256,16 @@ function install_monasca_notification {
PIP_VIRTUAL_ENV=/opt/monasca PIP_VIRTUAL_ENV=/opt/monasca
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
apt_get -y install libpq-dev apt_get -y install libpq-dev
pip_install psycopg2==2.6.2 pip_install psycopg2==2.6.2
elif is_service_enabled mysql; then elif is_service_enabled mysql; then
apt_get -y install python-mysqldb apt_get -y install python-mysqldb
apt_get -y install libmysqlclient-dev apt_get -y install libmysqlclient-dev
pip_install PyMySQL pip_install PyMySQL
pip_install mysql-python pip_install mysql-python
fi fi
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
pip_install sqlalchemy pip_install sqlalchemy
fi fi
setup_install $MONASCA_COMMON_DIR setup_install $MONASCA_COMMON_DIR
@ -1290,27 +1300,27 @@ function install_monasca_notification {
local dbEngine local dbEngine
local dbPort local dbPort
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
dbDriver="monasca_notification.common.repositories.postgres.pgsql_repo:PostgresqlRepo" dbDriver="monasca_notification.common.repositories.postgres.pgsql_repo:PostgresqlRepo"
dbEngine="postgres" dbEngine="postgres"
dbPort=5432 dbPort=5432
else else
dbDriver="monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo" dbDriver="monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo"
dbEngine="mysql" dbEngine="mysql"
dbPort=3306 dbPort=3306
fi fi
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
dbDriver="monasca_notification.common.repositories.orm.orm_repo:OrmRepo" dbDriver="monasca_notification.common.repositories.orm.orm_repo:OrmRepo"
fi fi
sudo sed -e " sudo sed -e "
s|%DATABASE_HOST%|$DATABASE_HOST|g; s|%DATABASE_HOST%|$DATABASE_HOST|g;
s|%DATABASE_PORT%|$dbPort|g; s|%DATABASE_PORT%|$dbPort|g;
s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g; s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g;
s|%MONASCA_NOTIFICATION_DATABASE_USER%|$MONASCA_NOTIFICATION_DATABASE_USER|g; s|%MONASCA_NOTIFICATION_DATABASE_USER%|$MONASCA_NOTIFICATION_DATABASE_USER|g;
s|%MONASCA_NOTIFICATION_DATABASE_DRIVER%|$dbDriver|g; s|%MONASCA_NOTIFICATION_DATABASE_DRIVER%|$dbDriver|g;
s|%MONASCA_NOTIFICATION_DATABASE_ENGINE%|$dbEngine|g; s|%MONASCA_NOTIFICATION_DATABASE_ENGINE%|$dbEngine|g;
s|%KAFKA_HOST%|$SERVICE_HOST|g; s|%KAFKA_HOST%|$SERVICE_HOST|g;
s|%MONASCA_STATSD_PORT%|$MONASCA_STATSD_PORT|g; s|%MONASCA_STATSD_PORT%|$MONASCA_STATSD_PORT|g;
" -i /etc/monasca/notification.yaml " -i /etc/monasca/notification.yaml
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-notification/monasca-notification.service /etc/systemd/system/monasca-notification.service sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-notification/monasca-notification.service /etc/systemd/system/monasca-notification.service
@ -1352,10 +1362,10 @@ function clean_monasca_notification {
apt_get -y purge mailutils apt_get -y purge mailutils
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
apt_get -y purge libpq-dev apt_get -y purge libpq-dev
elif is_service_enabled mysql; then elif is_service_enabled mysql; then
apt_get -y purge libmysqlclient-dev apt_get -y purge libmysqlclient-dev
apt_get -y purge python-mysqldb apt_get -y purge python-mysqldb
fi fi
} }
@ -1465,10 +1475,11 @@ function install_monasca_thresh {
git_clone $MONASCA_THRESH_REPO $MONASCA_THRESH_DIR $MONASCA_THRESH_BRANCH git_clone $MONASCA_THRESH_REPO $MONASCA_THRESH_DIR $MONASCA_THRESH_BRANCH
(cd "${MONASCA_THRESH_DIR}"/thresh ; sudo mvn clean package -DskipTests) (cd "${MONASCA_THRESH_DIR}"/thresh ; sudo mvn clean package -DskipTests)
local version="$(get_version_from_pom "${MONASCA_THRESH_DIR}"/thresh)" local version=""
version="$(get_version_from_pom "${MONASCA_THRESH_DIR}"/thresh)"
sudo cp -f "${MONASCA_THRESH_DIR}"/thresh/target/monasca-thresh-${version}-shaded.jar \ sudo cp -f "${MONASCA_THRESH_DIR}"/thresh/target/monasca-thresh-${version}-shaded.jar \
/opt/monasca/monasca-thresh.jar /opt/monasca/monasca-thresh.jar
sudo useradd --system -g monasca mon-thresh || true sudo useradd --system -g monasca mon-thresh || true
@ -1488,22 +1499,22 @@ function install_monasca_thresh {
local dbPort=3306 local dbPort=3306
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
if is_service_enabled postgresql; then if is_service_enabled postgresql; then
dbEngine="org.postgresql.ds.PGPoolingDataSource" dbEngine="org.postgresql.ds.PGPoolingDataSource"
dbPort=5432 dbPort=5432
fi fi
fi fi
sudo sed -e " sudo sed -e "
s|%KAFKA_HOST%|$SERVICE_HOST|g; s|%KAFKA_HOST%|$SERVICE_HOST|g;
s|%MONASCA_THRESH_DATABASE_ENGINE%|$dbEngine|g; s|%MONASCA_THRESH_DATABASE_ENGINE%|$dbEngine|g;
s|%MONASCA_THRESH_DATABASE_USER%|$MONASCA_THRESH_DATABASE_USER|g; s|%MONASCA_THRESH_DATABASE_USER%|$MONASCA_THRESH_DATABASE_USER|g;
s|%MONASCA_DATABASE_USE_ORM%|$MONASCA_DATABASE_USE_ORM|g; s|%MONASCA_DATABASE_USE_ORM%|$MONASCA_DATABASE_USE_ORM|g;
s|%DATABASE_TYPE%|$DATABASE_TYPE|g; s|%DATABASE_TYPE%|$DATABASE_TYPE|g;
s|%DATABASE_HOST%|$DATABASE_HOST|g; s|%DATABASE_HOST%|$DATABASE_HOST|g;
s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g; s|%DATABASE_PASSWORD%|$DATABASE_PASSWORD|g;
s|%DATABASE_PORT%|$dbPort|g; s|%DATABASE_PORT%|$dbPort|g;
s|%MONASCA_STATSD_PORT%|$MONASCA_STATSD_PORT|g; s|%MONASCA_STATSD_PORT%|$MONASCA_STATSD_PORT|g;
" -i /etc/monasca/thresh-config.yml " -i /etc/monasca/thresh-config.yml
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-thresh/monasca-thresh /etc/init.d/monasca-thresh sudo cp -f "${MONASCA_API_DIR}"/devstack/files/monasca-thresh/monasca-thresh /etc/init.d/monasca-thresh
@ -1588,8 +1599,8 @@ function install_monasca_agent {
# clients needs to be downloaded without git_clone wrapper # clients needs to be downloaded without git_clone wrapper
# because of the GIT_DEPTH flag that affects python package version # because of the GIT_DEPTH flag that affects python package version
if [ ! -d "${MONASCA_CLIENT_DIR}" ]; then if [ ! -d "${MONASCA_CLIENT_DIR}" ]; then
# project is cloned in the gate already, do not reclone # project is cloned in the gate already, do not reclone
git_timed clone $MONASCA_CLIENT_REPO $MONASCA_CLIENT_DIR git_timed clone $MONASCA_CLIENT_REPO $MONASCA_CLIENT_DIR
fi fi
(cd "${MONASCA_CLIENT_DIR}" ; git checkout $MONASCA_CLIENT_BRANCH ; sudo python setup.py sdist) (cd "${MONASCA_CLIENT_DIR}" ; git checkout $MONASCA_CLIENT_BRANCH ; sudo python setup.py sdist)
MONASCA_CLIENT_SRC_DIST=$(ls -td "${MONASCA_CLIENT_DIR}"/dist/python-monascaclient*.tar.gz | head -1) MONASCA_CLIENT_SRC_DIST=$(ls -td "${MONASCA_CLIENT_DIR}"/dist/python-monascaclient*.tar.gz | head -1)
@ -1642,7 +1653,7 @@ function install_monasca_agent {
sudo sed -i "s/--keystone_url 'http:\/\/127\.0\.0\.1:35357\/v3'/--keystone_url 'http:\/\/${SERVICE_HOST}:35357\/v3'/" /usr/local/bin/monasca-reconfigure sudo sed -i "s/--keystone_url 'http:\/\/127\.0\.0\.1:35357\/v3'/--keystone_url 'http:\/\/${SERVICE_HOST}:35357\/v3'/" /usr/local/bin/monasca-reconfigure
fi fi
sudo sed -e " sudo sed -e "
s|%MONASCA_STATSD_PORT%|$MONASCA_STATSD_PORT|g; s|%MONASCA_STATSD_PORT%|$MONASCA_STATSD_PORT|g;
" -i /usr/local/bin/monasca-reconfigure " -i /usr/local/bin/monasca-reconfigure
} }
@ -1744,12 +1755,12 @@ function install_node_nvm {
set -i set -i
bash ${nvm_dest} bash ${nvm_dest}
( (
source "${HOME}"/.nvm/nvm.sh >> /dev/null; \ source "${HOME}"/.nvm/nvm.sh >> /dev/null; \
nvm install ${NODE_JS_VERSION}; \ nvm install ${NODE_JS_VERSION}; \
nvm use ${NODE_JS_VERSION}; \ nvm use ${NODE_JS_VERSION}; \
npm config set registry "http://registry.npmjs.org/"; \ npm config set registry "http://registry.npmjs.org/"; \
npm config set proxy "${HTTP_PROXY}"; \ npm config set proxy "${HTTP_PROXY}"; \
npm set strict-ssl false; npm set strict-ssl false;
) )
set +i set +i
} }
@ -1852,43 +1863,43 @@ function clean_go {
###### extra functions ###### extra functions
function recreate_users { function recreate_users {
local db=$1 local db=$1
local users=$2 local users=$2
local hosts=$3 local hosts=$3
recreate_users_$DATABASE_TYPE $db $users $hosts recreate_users_$DATABASE_TYPE $db $users $hosts
} }
function recreate_users_mysql { function recreate_users_mysql {
local db=$1 local db=$1
local -n users=$2 local -n users=$2
local -n hosts=$3 local -n hosts=$3
for user in "${users[@]}"; do for user in "${users[@]}"; do
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
# loading grants needs to be done from localhost and by root at this very point # loading grants needs to be done from localhost and by root at this very point
# after loading schema is moved to post-config it could be possible to this as # after loading schema is moved to post-config it could be possible to this as
# DATABASE_USER # DATABASE_USER
mysql -uroot -p$DATABASE_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON $db.* TO '$user'@'$host' identified by '$DATABASE_PASSWORD';" mysql -uroot -p$DATABASE_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON $db.* TO '$user'@'$host' identified by '$DATABASE_PASSWORD';"
done
done done
done
} }
function recreate_users_postgresql { function recreate_users_postgresql {
local db=$1 local db=$1
local -n users=$2 local -n users=$2
local dbPermissions="SELECT, UPDATE, INSERT, DELETE, REFERENCES" local dbPermissions="SELECT, UPDATE, INSERT, DELETE, REFERENCES"
local echoFlag="" local echoFlag=""
if [[ "$VERBOSE" != "True" ]]; then if [[ "$VERBOSE" != "True" ]]; then
echoFlag="-e" echoFlag="-e"
fi fi
for user in "${users[@]}"; do for user in "${users[@]}"; do
createuser $echoFlag -h $DATABASE_HOST -U$DATABASE_USER -c $MAX_DB_CONNECTIONS -E $user createuser $echoFlag -h $DATABASE_HOST -U$DATABASE_USER -c $MAX_DB_CONNECTIONS -E $user
sudo -u root sudo -u postgres -i psql -c "ALTER USER $user WITH PASSWORD '$DATABASE_PASSWORD';" sudo -u root sudo -u postgres -i psql -c "ALTER USER $user WITH PASSWORD '$DATABASE_PASSWORD';"
sudo -u root sudo -u postgres -i psql -c "GRANT ALL PRIVILEGES ON DATABASE $db TO $user;" sudo -u root sudo -u postgres -i psql -c "GRANT ALL PRIVILEGES ON DATABASE $db TO $user;"
sudo -u root sudo -u postgres -i psql -d $db -c "GRANT $dbPermissions ON ALL TABLES IN SCHEMA public TO $user;" sudo -u root sudo -u postgres -i psql -d $db -c "GRANT $dbPermissions ON ALL TABLES IN SCHEMA public TO $user;"
done done
} }
# Validate a program version string is of the form 1.0.0. # Validate a program version string is of the form 1.0.0.
@ -1896,8 +1907,7 @@ function recreate_users_postgresql {
function validate_version { function validate_version {
version_regex="^([0-9]+\.)?([0-9]+\.)?([0-9]+)$" version_regex="^([0-9]+\.)?([0-9]+\.)?([0-9]+)$"
if [[ $1 =~ $version_regex ]]; if [[ $1 =~ $version_regex ]]; then
then
return 0 return 0
else else
return 1 return 1
@ -1907,32 +1917,26 @@ function validate_version {
# Compares two program version strings of the form 1.0.0. # Compares two program version strings of the form 1.0.0.
# Returns "lt" if $1 is less than $2, "eq" if equal, and "gt" if greater than. # Returns "lt" if $1 is less than $2, "eq" if equal, and "gt" if greater than.
function compare_versions { function compare_versions {
if [[ $1 == $2 ]] if [[ $1 == $2 ]]; then
then
echo eq echo eq
return return
fi fi
local IFS=. local IFS=.
local i ver1=($1) ver2=($2) local i ver1=($1) ver2=($2)
# fill empty fields in ver1 with zeros # fill empty fields in ver1 with zeros
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do
do
ver1[i]=0 ver1[i]=0
done done
for ((i=0; i<${#ver1[@]}; i++)) for ((i=0; i<${#ver1[@]}; i++)); do
do if [[ -z ${ver2[i]} ]]; then
if [[ -z ${ver2[i]} ]]
then
# fill empty fields in ver2 with zeros # fill empty fields in ver2 with zeros
ver2[i]=0 ver2[i]=0
fi fi
if ((10#${ver1[i]} > 10#${ver2[i]})) if ((10#${ver1[i]} > 10#${ver2[i]})); then
then
echo gt echo gt
return return
fi fi
if ((10#${ver1[i]} < 10#${ver2[i]})) if ((10#${ver1[i]} < 10#${ver2[i]})); then
then
echo lt echo lt
return return
fi fi
@ -1944,9 +1948,9 @@ function compare_versions {
# Prints the version specified in the pom.xml file in the directory given by # Prints the version specified in the pom.xml file in the directory given by
# the argument # the argument
function get_version_from_pom { function get_version_from_pom {
python -c "import xml.etree.ElementTree as ET; \ python -c "import xml.etree.ElementTree as ET; \
print(ET.parse(open('$1/pom.xml')).getroot().find( \ print(ET.parse(open('$1/pom.xml')).getroot().find( \
'{http://maven.apache.org/POM/4.0.0}version').text)" '{http://maven.apache.org/POM/4.0.0}version').text)"
} }
# download_file # download_file
@ -1958,8 +1962,6 @@ function get_version_from_pom {
# Uses global variables: # Uses global variables:
# - OFFLINE # - OFFLINE
# - DOWNLOAD_FILE_TIMEOUT # - DOWNLOAD_FILE_TIMEOUT
# note(trebskit) maybe this function will enter upstream devstack in case it does
# we should remove it from here
function download_file { function download_file {
local url=$1 local url=$1
local file=$2 local file=$2
@ -1967,11 +1969,11 @@ function download_file {
# If in OFFLINE mode check if file already exists # If in OFFLINE mode check if file already exists
if [[ ${OFFLINE} == "True" ]] && [[ ! -f ${file} ]]; then if [[ ${OFFLINE} == "True" ]] && [[ ! -f ${file} ]]; then
die $LINENO "You are running in OFFLINE mode but die $LINENO "You are running in OFFLINE mode but
the target file \"$file\" was not found" the target file \"$file\" was not found"
fi fi
local curl_z_flag="" local curl_z_flag=""
if [[ -f ${file} ]]; then if [[ -f "${file}" ]]; then
# If the file exists tell cURL to download only if newer version # If the file exists tell cURL to download only if newer version
# is available # is available
curl_z_flag="-z $file" curl_z_flag="-z $file"

View File

@ -3,6 +3,7 @@
# process, which may cause wedges in the gate later. # process, which may cause wedges in the gate later.
# Hacking already pins down pep8, pyflakes and flake8 # Hacking already pins down pep8, pyflakes and flake8
bandit>=1.1.0 # Apache-2.0 bandit>=1.1.0 # Apache-2.0
bashate>=0.2 # Apache-2.0
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
Babel>=2.3.4 # BSD Babel>=2.3.4 # BSD
coverage>=4.0 # Apache-2.0 coverage>=4.0 # Apache-2.0

View File

@ -66,12 +66,20 @@ commands =
# B101(assert_ussed) - asserts in test layers seems appropriate # B101(assert_ussed) - asserts in test layers seems appropriate
bandit -r monasca_tempest_tests -n5 -s B101 bandit -r monasca_tempest_tests -n5 -s B101
[testenv:bashate]
whitelist_externals = bashate
commands =
# Ignore too long lines error E006 from bashate and treat
# E005, E042 as errors.
bashate -v -iE006 -eE005,E042 devstack/plugin.sh
[testenv:pep8] [testenv:pep8]
deps = deps =
{[testenv]deps} {[testenv]deps}
commands = commands =
{[testenv:flake8]commands} {[testenv:flake8]commands}
{[testenv:bandit]commands} {[testenv:bandit]commands}
{[testenv:bashate]commands}
[testenv:venv] [testenv:venv]
commands = {posargs} commands = {posargs}