remove.inc 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/bin/bash
  2. hestia_module_remove() {
  3. source $HESTIA/bin/module/func.inc
  4. if [ "$1" ]; then
  5. local mod_name=$1
  6. shift
  7. local mod_providers=$(hestia module what-provides $mod_name --all)
  8. #echo "$mod_providers" equals "$mod_name"
  9. if [ "$mod_providers" == "$mod_name" ]; then
  10. # It's a final module name, remove immediately
  11. local requiredby=$(hestia_module_remove_check_requiredby $mod_name)
  12. if [ "$requiredby" ]; then
  13. if [ "$param_force" ]; then
  14. for mod_required in $requiredby; do
  15. hestia module remove $mod_required --force
  16. done
  17. else
  18. echo "Module '${mod_name}' is required by '${requiredby}'. Use --force to remove recursively."
  19. return 1
  20. fi
  21. else
  22. hestia module $mod_name remove "$@"
  23. hestia module $mod_name integrate
  24. fi
  25. else
  26. # It's provided by something else
  27. for mod in $mod_providers; do
  28. if hestia_module_isinstalled $mod; then
  29. echo "Ok, 'remove ${mod_name}' means 'remove ${mod}'"
  30. if ! hestia module remove $mod --nointegrate; then
  31. echo "Unable to remove '${mod_name}' because '${mod}' refuses to uninstall."
  32. fi
  33. fi
  34. done
  35. hestia module $mod_name integrate
  36. for mod in $mod_providers; do
  37. hestia module $mod integrate
  38. done
  39. fi
  40. else
  41. echo "Usage: module remove module_name"
  42. return 0
  43. fi
  44. }
  45. # Check whether a module is required by other installed modules
  46. hestia_module_remove_check_requiredby() {
  47. local mod_name=$1
  48. shift
  49. local requiredby=''
  50. for mod_conf in $HESTIA_CONF_MODULES/*.conf; do
  51. local mod_hmd=$(osal_kv_read $mod_conf 'hmd')
  52. if [ "$mod_hmd" ]; then
  53. # This module is a provider. Check it isn't needed
  54. local mod_requires=$(osal_kv_read $mod_hmd 'requires')
  55. local mod_requires_expanded=$(hestia_module_remove_expand_requires $mod_requires)
  56. #echo >&2 "uuu $mod_requires expands to $mod_requires_expanded uuu"
  57. if osal_value_in_list $mod_name $mod_requires_expanded; then
  58. local mod_requires_name=$(osal_kv_read $mod_hmd 'name')
  59. #echo >&2 "$mod_name is in the required list of $mod_requires_name (which is $mod_requires_expanded)"
  60. requiredby="$mod_requires_name $requiredby"
  61. #else
  62. #echo >&2 "$mod_name is NOT in the required list (which is $mod_requires_expanded)"
  63. fi
  64. fi
  65. done
  66. if [ "$requiredby" ]; then
  67. echo $requiredby
  68. return 1
  69. else
  70. return 0
  71. fi
  72. }
  73. # Expands 'web' to 'web apache nginx'
  74. hestia_module_remove_expand_requires() {
  75. local expanded=$@
  76. for mod in $@; do
  77. local extra_requires=$(hestia module what-provides $mod --all)
  78. for er in $extra_requires; do
  79. if ! osal_value_in_list $er $expanded; then
  80. # FIXME: allow recursive expansion?
  81. expanded="$expanded $er"
  82. fi
  83. done
  84. done
  85. echo $expanded
  86. }