frappe_docker/scripts/easy-docker/lib/app/wizard/flows/split_services.sh

130 lines
4.4 KiB
Bash
Executable file

#!/usr/bin/env bash
handle_split_services_stack_flow() {
local stack_dir="${1}"
local data_mode=""
local database_choice=""
local redis_choice=""
local proxy_mode=""
local summary_action=""
local stack_env_path=""
local stack_apps_path=""
local generated_compose_path=""
local save_selection_status=0
local render_compose_status=0
data_mode="$(show_split_services_data_mode_menu "${stack_dir}" || true)"
case "${data_mode}" in
"Back to topology selection" | "")
return "${FLOW_CONTINUE}"
;;
*)
if ! get_split_services_data_mode_id "${data_mode}" >/dev/null; then
show_warning_and_wait "Unknown data services mode: ${data_mode}"
return "${FLOW_CONTINUE}"
fi
;;
esac
database_choice="$(show_split_services_database_menu "${stack_dir}" || true)"
case "${database_choice}" in
"Back to topology selection" | "")
return "${FLOW_CONTINUE}"
;;
*)
if ! get_single_host_database_id "${database_choice}" >/dev/null; then
show_warning_and_wait "Unknown database choice: ${database_choice}"
return "${FLOW_CONTINUE}"
fi
;;
esac
redis_choice="$(show_split_services_redis_mode_menu "${stack_dir}" || true)"
case "${redis_choice}" in
"Back to topology selection" | "")
return "${FLOW_CONTINUE}"
;;
*)
if ! get_split_services_redis_id "${redis_choice}" >/dev/null; then
show_warning_and_wait "Unknown Redis choice: ${redis_choice}"
return "${FLOW_CONTINUE}"
fi
;;
esac
proxy_mode="$(show_split_services_proxy_mode_menu "${stack_dir}" || true)"
case "${proxy_mode}" in
"Back to topology selection" | "")
return "${FLOW_CONTINUE}"
;;
*)
if ! get_single_host_proxy_mode_id "${proxy_mode}" >/dev/null; then
show_warning_and_wait "Unknown reverse proxy mode: ${proxy_mode}"
return "${FLOW_CONTINUE}"
fi
;;
esac
summary_action="$(show_split_services_summary_menu "${stack_dir}" "${data_mode}" "${database_choice}" "${redis_choice}" "${proxy_mode}" || true)"
case "${summary_action}" in
"Yes, write stack files") ;;
"Back to topology selection" | "")
return "${FLOW_CONTINUE}"
;;
"Abort wizard to main menu")
handle_abort_wizard_flow "${stack_dir}"
return $?
;;
*)
show_warning_and_wait "Unknown split-services summary action: ${summary_action}"
return "${FLOW_CONTINUE}"
;;
esac
if save_split_services_selection "${stack_dir}" "${proxy_mode}" "${data_mode}" "${database_choice}" "${redis_choice}"; then
:
else
save_selection_status=$?
if [ "${save_selection_status}" -eq 2 ] || [ "${save_selection_status}" -eq 130 ]; then
return "${FLOW_CONTINUE}"
fi
case "${save_selection_status}" in
31)
show_warning_and_wait "Could not write the split-services env file for stack: ${stack_dir}" 3
;;
32)
show_warning_and_wait "Could not write the split-services wizard metadata in ${stack_dir}/metadata.json." 3
;;
33)
show_warning_and_wait "Split-services app selection is empty. Select at least one app before writing stack files." 3
;;
34)
show_warning_and_wait "Could not write the selected app metadata in ${stack_dir}/metadata.json." 3
;;
35)
show_warning_and_wait "Could not generate ${stack_dir}/apps.json from the selected split-services apps." 3
;;
*)
show_warning_and_wait "Could not save split-services selection for stack: ${stack_dir} (${save_selection_status})." 3
;;
esac
return "${FLOW_CONTINUE}"
fi
if render_stack_compose_from_metadata "${stack_dir}"; then
:
else
render_compose_status=$?
stack_env_path="$(get_stack_env_path "${stack_dir}")"
stack_apps_path="${stack_dir}/apps.json"
generated_compose_path="$(get_stack_generated_compose_path "${stack_dir}")"
show_warning_and_wait "Selection saved in ${stack_dir}/metadata.json, ${stack_env_path}, and ${stack_apps_path}, but compose rendering failed (${render_compose_status}) for ${generated_compose_path}." 3
return "${FLOW_CONTINUE}"
fi
stack_env_path="$(get_stack_env_path "${stack_dir}")"
stack_apps_path="${stack_dir}/apps.json"
generated_compose_path="$(get_stack_generated_compose_path "${stack_dir}")"
show_warning_and_wait "Split-services selection saved in ${stack_dir}/metadata.json, ${stack_env_path}, and ${stack_apps_path}. Rendered compose: ${generated_compose_path}." 3
return "${FLOW_OPEN_MANAGE_STACK}"
}