From 7546f56ccee35791b7dff62868f9c6d7da950877 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Wed, 8 Apr 2015 11:40:41 -0400 Subject: [PATCH] modularize mysql db saving let projects declare that they will have a database to be saved, and we'll do it for them, in the mysql case. Eventually other saving issues should be left to per project save-state.sh scripts. services which aren't always enabled in grenade jobs have their settings files guarded with conditionals. Eventually we'll do conditional loading of these settings files, however for now this lets the rest of the infrastructure around running actions based on PLUGIN_DIRS and UPGRADE_SERVICES be *non* conditional, which simplifies them. Change-Id: I06cad95ca319e4403772e5fb394c0f8965e0bf9d --- functions | 21 ++++----------------- grenade.sh | 1 + inc/upgrade | 19 +++++++++++++++++++ projects/10_keystone/settings | 3 ++- projects/20_ceilometer/settings | 5 ++++- projects/40_glance/settings | 3 ++- projects/50_neutron/settings | 6 +++++- projects/60_nova/settings | 3 ++- projects/70_cinder/settings | 3 ++- projects/90_ironic/settings | 5 ++++- 10 files changed, 45 insertions(+), 24 deletions(-) diff --git a/functions b/functions index f1f9ebda..3ced8100 100644 --- a/functions +++ b/functions @@ -21,27 +21,14 @@ set +o xtrace function save_data { local release=$1 local dir=$2 - local mysql_services="keystone glance nova cinder ironic" - - echo_summary "Sourcing $release DevStack config" - source $dir/functions - source $dir/stackrc echo_summary "Dumping $release databases" mkdir -p $SAVE_DIR - if grep -q 'connection *= *mysql' /etc/ceilometer/ceilometer.conf; then - mysql_services+=" ceilometer" - elif grep -q 'connection *= *mongo' /etc/ceilometer/ceilometer.conf; then + save_mysql_dbs $release $dir + + # TODO(sdague): this should go into per project save-state scripts + if grep -q 'connection *= *mongo' /etc/ceilometer/ceilometer.conf; then mongodump --db ceilometer --out $SAVE_DIR/ceilometer-dump.$release fi - for db in $mysql_services ; do - if mysql -uroot -p$MYSQL_PASSWORD -c $db -e ''; then - mysqldump -uroot -p$MYSQL_PASSWORD $db >$SAVE_DIR/$db.sql.$release - fi - done - neutron_db_names=$(mysql -uroot -p$MYSQL_PASSWORD -e "show databases;" | grep neutron || :) - for neutron_db in $neutron_db_names; do - mysqldump -uroot -p$MYSQL_PASSWORD $neutron_db >$SAVE_DIR/$neutron_db.sql.$release - done } diff --git a/grenade.sh b/grenade.sh index 07d7a77c..6c3cd663 100755 --- a/grenade.sh +++ b/grenade.sh @@ -218,6 +218,7 @@ function run_javelin() { # Install 'Base' Build of OpenStack # ================================= +ENABLED_SERVICES=$(source $BASE_DEVSTACK_DIR/stackrc; echo $ENABLED_SERVICES) load_settings if [[ "$RUN_BASE" == "True" ]]; then diff --git a/inc/upgrade b/inc/upgrade index 861242eb..c646669f 100644 --- a/inc/upgrade +++ b/inc/upgrade @@ -14,6 +14,25 @@ # License for the specific language governing permissions and limitations # under the License. +DATABASES_TO_SAVE="" + +# save_data +function save_mysql_dbs { + local release=$1 + local dir=$2 + # pull the mysql pass from the old config + local mysql_pass=$(source $dir/stackrc && echo $MYSQL_PASSWORD) + for db in $DATABASES_TO_SAVE; do + mysqldump -uroot -p$mysql_pass $db >$SAVE_DIR/$db.sql.$release + done +} + +# register a database we should save +function register_db_to_save { + for db in $@; do + DATABASES_TO_SAVE+=" $db" + done +} function upgrade_service { local local_service=$1 diff --git a/projects/10_keystone/settings b/projects/10_keystone/settings index 8a409ca0..36f6cf8e 100644 --- a/projects/10_keystone/settings +++ b/projects/10_keystone/settings @@ -1 +1,2 @@ -register_project_for_upgrade keystone \ No newline at end of file +register_project_for_upgrade keystone +register_db_to_save keystone diff --git a/projects/20_ceilometer/settings b/projects/20_ceilometer/settings index 698c3feb..38e41a67 100644 --- a/projects/20_ceilometer/settings +++ b/projects/20_ceilometer/settings @@ -1 +1,4 @@ -register_project_for_upgrade ceilometer \ No newline at end of file +register_project_for_upgrade ceilometer +if grep -q 'connection *= *mysql' /etc/ceilometer/ceilometer.conf; then + register_db_to_save ceilometer +fi \ No newline at end of file diff --git a/projects/40_glance/settings b/projects/40_glance/settings index 1893781f..24323a13 100644 --- a/projects/40_glance/settings +++ b/projects/40_glance/settings @@ -1 +1,2 @@ -register_project_for_upgrade glance \ No newline at end of file +register_project_for_upgrade glance +register_db_to_save glance \ No newline at end of file diff --git a/projects/50_neutron/settings b/projects/50_neutron/settings index b1241705..00c4b9cd 100644 --- a/projects/50_neutron/settings +++ b/projects/50_neutron/settings @@ -1 +1,5 @@ -register_project_for_upgrade neutron \ No newline at end of file +# eventually this conditional will end up at a different level +if is_service_enabled q-svc; then + register_project_for_upgrade neutron + register_db_to_save neutron +fi \ No newline at end of file diff --git a/projects/60_nova/settings b/projects/60_nova/settings index 4a243f32..a08f0a18 100644 --- a/projects/60_nova/settings +++ b/projects/60_nova/settings @@ -1 +1,2 @@ -register_project_for_upgrade nova \ No newline at end of file +register_project_for_upgrade nova +register_db_to_save nova \ No newline at end of file diff --git a/projects/70_cinder/settings b/projects/70_cinder/settings index ba358a76..2d27da44 100644 --- a/projects/70_cinder/settings +++ b/projects/70_cinder/settings @@ -1 +1,2 @@ -register_project_for_upgrade cinder \ No newline at end of file +register_project_for_upgrade cinder +register_db_to_save cinder \ No newline at end of file diff --git a/projects/90_ironic/settings b/projects/90_ironic/settings index 73fb5fdd..4dffe875 100644 --- a/projects/90_ironic/settings +++ b/projects/90_ironic/settings @@ -1 +1,4 @@ -register_project_for_upgrade ironic \ No newline at end of file +if is_ironic_enabled; then + register_project_for_upgrade ironic + register_db_to_save ironic +fi \ No newline at end of file