| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | #!/usr/bin/env bash | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 02:38:27 +08:00
										 |  |  | SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | init_rabbitmq() { | 
					
						
							|  |  |  |   RABBITMQ_CONFIG_DIR=${TEST_CONFIG_DIR} | 
					
						
							|  |  |  |   RABBITMQ_DOCKER_IMAGE=${RABBITMQ_DOCKER_IMAGE:-rabbitmq} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   print "> RABBITMQ_CONFIG_DIR: ${RABBITMQ_CONFIG_DIR}" | 
					
						
							|  |  |  |   print "> RABBITMQ_DOCKER_IMAGE: ${RABBITMQ_DOCKER_IMAGE}" | 
					
						
							|  |  |  |   [[ -z "${OAUTH_SERVER_CONFIG_BASEDIR}" ]] || print "> OAUTH_SERVER_CONFIG_BASEDIR: ${OAUTH_SERVER_CONFIG_BASEDIR}" | 
					
						
							|  |  |  |   [[ -z "${OAUTH_SERVER_CONFIG_DIR}" ]] || print "> OAUTH_SERVER_CONFIG_DIR: ${OAUTH_SERVER_CONFIG_DIR}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 02:38:27 +08:00
										 |  |  |   if [[ ! -d "${RABBITMQ_CONFIG_DIR}/certs" ]]; then  | 
					
						
							|  |  |  |     mkdir ${RABBITMQ_CONFIG_DIR}/certs | 
					
						
							|  |  |  |   fi  | 
					
						
							|  |  |  |   generate-ca-server-client-kpi rabbitmq $RABBITMQ_CONFIG_DIR/certs | 
					
						
							|  |  |  |   generate-server-keystore-if-required rabbitmq $RABBITMQ_CONFIG_DIR/certs | 
					
						
							|  |  |  |   generate-client-keystore-if-required rabbitmq $RABBITMQ_CONFIG_DIR/certs | 
					
						
							|  |  |  |   generate-truststore-if-required rabbitmq $RABBITMQ_CONFIG_DIR/certs | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | start_rabbitmq() { | 
					
						
							|  |  |  |   if [[ "$PROFILES" == *"docker"* ]]; then | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  |       if [[ "$PROFILES" == *"cluster"* ]]; then | 
					
						
							|  |  |  |           start_docker_cluster_rabbitmq | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |           start_docker_rabbitmq | 
					
						
							|  |  |  |       fi | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   else | 
					
						
							|  |  |  |     start_local_rabbitmq | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  | stop_rabbitmq() { | 
					
						
							|  |  |  |   if [[ "$PROFILES" == *"docker"* ]]; then | 
					
						
							|  |  |  |       if [[ "$PROFILES" == *"cluster"* ]]; then | 
					
						
							|  |  |  |           docker compose -f $CONF_DIR/rabbitmq/compose.yml kill | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |           kill_container_if_exist "$component" | 
					
						
							|  |  |  |       fi | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |       stop_local_rabbitmq | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | stop_local_rabbitmq() { | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |     RABBITMQ_SERVER_ROOT=$(realpath ../) | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  |     gmake --directory=${RABBITMQ_SERVER_ROOT} stop-node | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | save_logs_rabbitmq() { | 
					
						
							|  |  |  |     if [[ "$PROFILES" == *"docker"* ]]; then | 
					
						
							|  |  |  |         if [[ "$PROFILES" == *"cluster"* ]]; then | 
					
						
							|  |  |  |             docker compose -f $CONF_DIR/rabbitmq/compose.yml logs > $LOGS/rabbitmq.log | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             save_container_logs "rabbitmq" | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | start_local_rabbitmq() { | 
					
						
							|  |  |  |   begin "Starting rabbitmq ..." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   init_rabbitmq | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |   RABBITMQ_SERVER_ROOT=$(realpath ../) | 
					
						
							| 
									
										
										
										
											2024-09-10 02:42:40 +08:00
										 |  |  |    | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   MOUNT_RABBITMQ_CONF="/etc/rabbitmq/rabbitmq.conf" | 
					
						
							|  |  |  |   MOUNT_ADVANCED_CONFIG="/etc/rabbitmq/advanced.config" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-27 21:14:11 +08:00
										 |  |  |   RABBITMQ_TEST_DIR="${RABBITMQ_CONFIG_DIR}" ${BIN_DIR}/gen-rabbitmq-conf ${RABBITMQ_CONFIG_DIR} $ENV_FILE /tmp$MOUNT_RABBITMQ_CONF | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   print "> EFFECTIVE RABBITMQ_CONFIG_FILE: /tmp$MOUNT_RABBITMQ_CONF" | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  |   cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins /tmp/etc/rabbitmq/ | 
					
						
							| 
									
										
										
										
											2025-04-15 14:23:49 +08:00
										 |  |  |   RABBITMQ_ENABLED_PLUGINS=`cat /tmp/etc/rabbitmq/enabled_plugins | tr -d " \t\n\r" | awk -F'[][]' '{print $2}'` | 
					
						
							| 
									
										
										
										
											2025-04-15 13:06:20 +08:00
										 |  |  |   print "> EFFECTIVE PLUGINS: $RABBITMQ_ENABLED_PLUGINS" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ${BIN_DIR}/gen-advanced-config ${RABBITMQ_CONFIG_DIR} $ENV_FILE /tmp$MOUNT_ADVANCED_CONFIG | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   RESULT=$? | 
					
						
							|  |  |  |   if [ $RESULT -eq 0 ]; then | 
					
						
							| 
									
										
										
										
											2025-04-15 13:06:20 +08:00
										 |  |  |     print "> EFFECTIVE RABBITMQ_CONFIG_FILE: /tmp$MOUNT_ADVANCED_CONFIG"     | 
					
						
							|  |  |  |     gmake --directory=${RABBITMQ_SERVER_ROOT}  \ | 
					
						
							|  |  |  |         RABBITMQ_ENABLED_PLUGINS="$RABBITMQ_ENABLED_PLUGINS" \ | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   		RABBITMQ_CONFIG_FILE=/tmp$MOUNT_RABBITMQ_CONF \ | 
					
						
							| 
									
										
										
										
											2025-04-15 13:06:20 +08:00
										 |  |  |         RABBITMQ_ADVANCED_CONFIG_FILE=/tmp$MOUNT_ADVANCED_CONFIG run-broker | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   else | 
					
						
							| 
									
										
										
										
											2025-04-15 13:06:20 +08:00
										 |  |  |     gmake --directory=${RABBITMQ_SERVER_ROOT} \ | 
					
						
							|  |  |  |         RABBITMQ_ENABLED_PLUGINS="$RABBITMQ_ENABLED_PLUGINS" \ | 
					
						
							|  |  |  |   		RABBITMQ_CONFIG_FILE=/tmp$MOUNT_RABBITMQ_CONF run-broker | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   fi | 
					
						
							|  |  |  |   print "> RABBITMQ_TEST_DIR: ${RABBITMQ_CONFIG_DIR}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  | start_docker_cluster_rabbitmq() { | 
					
						
							|  |  |  |     begin "Starting rabbitmq cluster in docker ..." | 
					
						
							|  |  |  |     init_rabbitmq | 
					
						
							|  |  |  |     kill_container_if_exist rabbitmq | 
					
						
							|  |  |  |     kill_container_if_exist rabbitmq1 | 
					
						
							|  |  |  |     kill_container_if_exist rabbitmq2 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-08 17:06:50 +08:00
										 |  |  |     mkdir -pv $CONF_DIR/rabbitmq/conf.d/ | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     RABBITMQ_TEST_DIR="/var/rabbitmq" ${BIN_DIR}/gen-rabbitmq-conf ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/rabbitmq.conf | 
					
						
							|  |  |  |     print "> EFFECTIVE RABBITMQ_CONFIG_FILE: $CONF_DIR/rabbitmq/rabbitmq.conf" | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |     ${BIN_DIR}/gen-advanced-config ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/advanced.config | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  |     RESULT=$? | 
					
						
							|  |  |  |     if [ $RESULT -eq 0 ]; then | 
					
						
							|  |  |  |         if [ -s $RESULT ]; then | 
					
						
							|  |  |  |             print "> EFFECTIVE ADVANCED_CONFIG_FILE: $CONF_DIR/rabbitmq/advanced.config" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             rm $CONF_DIR/rabbitmq/advanced.config | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |     if [ -f ${RABBITMQ_CONFIG_DIR}/logging.conf ]; then | 
					
						
							|  |  |  |         cp ${RABBITMQ_CONFIG_DIR}/logging.conf $CONF_DIR/rabbitmq/conf.d/ | 
					
						
							|  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2024-09-04 17:06:54 +08:00
										 |  |  |     if [ -f ${RABBITMQ_CONFIG_DIR}/enabled_plugins ]; then | 
					
						
							|  |  |  |         cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins $CONF_DIR/rabbitmq | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     if [ -d ${RABBITMQ_CONFIG_DIR}/certs ]; then | 
					
						
							|  |  |  |         cp -r ${RABBITMQ_CONFIG_DIR}/certs $CONF_DIR/rabbitmq | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     if [ -d ${RABBITMQ_CONFIG_DIR}/imports ]; then | 
					
						
							|  |  |  |         cp -r ${RABBITMQ_CONFIG_DIR}/imports $CONF_DIR/rabbitmq | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     cat > $CONF_DIR/rabbitmq/image_compose.yml <<EOF | 
					
						
							|  |  |  | x-rabbitmq_image: &rabbitmq_image | 
					
						
							|  |  |  |     image: ${RABBITMQ_DOCKER_IMAGE} | 
					
						
							|  |  |  |     volumes: | 
					
						
							|  |  |  |     - $CONF_DIR/rabbitmq/:/etc/rabbitmq | 
					
						
							|  |  |  |     - $CONF_DIR/rabbitmq/:/var/rabbitmq | 
					
						
							|  |  |  |     - ${TEST_DIR}:/config | 
					
						
							|  |  |  | EOF | 
					
						
							|  |  |  |     cat $CONF_DIR/rabbitmq/image_compose.yml > $CONF_DIR/rabbitmq/compose.yml | 
					
						
							|  |  |  |     cat ${BIN_DIR}/components/../rabbit-compose.yml >> $CONF_DIR/rabbitmq/compose.yml | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     docker compose -f $CONF_DIR/rabbitmq/compose.yml up -d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     wait_for_message rabbitmq "Server startup complete" | 
					
						
							|  |  |  |     wait_for_message rabbitmq1 "Server startup complete" | 
					
						
							|  |  |  |     wait_for_message rabbitmq2 "Server startup complete" | 
					
						
							|  |  |  |     end "RabbitMQ cluster ready" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | start_docker_rabbitmq() { | 
					
						
							|  |  |  |   begin "Starting rabbitmq in docker ..." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   init_rabbitmq | 
					
						
							|  |  |  |   kill_container_if_exist rabbitmq | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-25 19:23:45 +08:00
										 |  |  |   mkdir -pv $CONF_DIR/rabbitmq/conf.d/ | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   RABBITMQ_TEST_DIR="/var/rabbitmq" ${BIN_DIR}/gen-rabbitmq-conf ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/rabbitmq.conf | 
					
						
							|  |  |  |   print "> EFFECTIVE RABBITMQ_CONFIG_FILE: $CONF_DIR/rabbitmq/rabbitmq.conf" | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |   ${BIN_DIR}/gen-advanced-config ${RABBITMQ_CONFIG_DIR} $ENV_FILE $CONF_DIR/rabbitmq/advanced.config | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   RESULT=$? | 
					
						
							|  |  |  |   if [ $RESULT -eq 0 ]; then | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |       if [ -s $RESULT ]; then | 
					
						
							|  |  |  |           print "> EFFECTIVE ADVANCED_CONFIG_FILE: $CONF_DIR/rabbitmq/advanced.config" | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |           rm $CONF_DIR/rabbitmq/advanced.config | 
					
						
							|  |  |  |       fi | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   if [ -f ${RABBITMQ_CONFIG_DIR}/logging.conf ]; then | 
					
						
							|  |  |  |       cp ${RABBITMQ_CONFIG_DIR}/logging.conf $CONF_DIR/rabbitmq/conf.d/ | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   fi | 
					
						
							| 
									
										
										
										
											2024-02-09 23:40:55 +08:00
										 |  |  |   if [ -f ${RABBITMQ_CONFIG_DIR}/enabled_plugins ]; then | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |       cp ${RABBITMQ_CONFIG_DIR}/enabled_plugins $CONF_DIR/rabbitmq | 
					
						
							| 
									
										
										
										
											2024-02-09 23:40:55 +08:00
										 |  |  |   fi | 
					
						
							| 
									
										
										
										
											2025-02-25 19:23:45 +08:00
										 |  |  |   if [ -d "${RABBITMQ_CONFIG_DIR}/certs" ]; then | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |       cp -r ${RABBITMQ_CONFIG_DIR}/certs $CONF_DIR/rabbitmq | 
					
						
							| 
									
										
										
										
											2024-02-09 23:40:55 +08:00
										 |  |  |   fi | 
					
						
							| 
									
										
										
										
											2024-02-10 15:36:15 +08:00
										 |  |  |   if [ -d ${RABBITMQ_CONFIG_DIR}/imports ]; then | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |       cp -r ${RABBITMQ_CONFIG_DIR}/imports $CONF_DIR/rabbitmq | 
					
						
							| 
									
										
										
										
											2024-02-09 23:40:55 +08:00
										 |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   print "> RABBITMQ_TEST_DIR: /var/rabbitmq" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   docker run \ | 
					
						
							|  |  |  |     --detach \ | 
					
						
							|  |  |  |     --name rabbitmq \ | 
					
						
							|  |  |  |     --net ${DOCKER_NETWORK} \ | 
					
						
							| 
									
										
										
										
											2024-02-10 15:36:15 +08:00
										 |  |  |     -p 5672:5672 \ | 
					
						
							|  |  |  |     -p 5671:5671 \ | 
					
						
							|  |  |  |     -p 15672:15672 \ | 
					
						
							|  |  |  |     -p 15671:15671 \ | 
					
						
							| 
									
										
										
										
											2024-09-04 21:59:58 +08:00
										 |  |  |     -v $CONF_DIR/rabbitmq/:/etc/rabbitmq \ | 
					
						
							| 
									
										
										
										
											2024-11-15 02:38:27 +08:00
										 |  |  |     -v $CONF_DIR/rabbitmq/imports:/var/rabbitmq/imports \ | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |     -v ${TEST_DIR}:/config \ | 
					
						
							|  |  |  |     ${RABBITMQ_DOCKER_IMAGE} | 
					
						
							| 
									
										
										
										
											2025-04-08 17:06:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-03 16:28:36 +08:00
										 |  |  |   wait_for_message rabbitmq "Server startup complete" | 
					
						
							|  |  |  |   end "RabbitMQ ready" | 
					
						
							|  |  |  | } |