You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.4 KiB
153 lines
4.4 KiB
#!/opt/brepo/ruby33/bin/ruby
|
|
# info: action with extended modules
|
|
# options: COMMAND [COMMAND_OPTION | FORMAT] [FORMAT]
|
|
#
|
|
# example: v-ext-modules list json
|
|
#
|
|
# This function enables and disables additional modules
|
|
|
|
#----------------------------------------------------------#
|
|
# Variables & Functions #
|
|
#----------------------------------------------------------#
|
|
|
|
# Argument definition
|
|
v_command = ARGV[0]
|
|
v_ext_option = ARGV[1]
|
|
v_format = ARGV[2]
|
|
|
|
require "/usr/local/hestia/func_ruby/global_options"
|
|
|
|
load_ruby_options_defaults
|
|
$HESTIA = load_hestia_default_path_from_env
|
|
|
|
require "main"
|
|
require "modules"
|
|
|
|
hestia_check_privileged_user
|
|
|
|
load_global_bash_variables "/etc/hestiacp/hestia.conf"
|
|
if $HESTIA.nil?
|
|
hestia_print_error_message_to_cli "Can't find HESTIA base path"
|
|
exit 1
|
|
end
|
|
|
|
load_global_bash_variables "#{$HESTIA}/conf/hestia.conf"
|
|
|
|
#----------------------------------------------------------#
|
|
# Verifications #
|
|
#----------------------------------------------------------#
|
|
|
|
check_args 1, ARGV, "COMMAND [COMMAND_OPTION] [ACTION]"
|
|
|
|
# Perform verification if read-only mode is enabled
|
|
check_hestia_demo_mode
|
|
|
|
#----------------------------------------------------------#
|
|
# Action #
|
|
#----------------------------------------------------------#
|
|
|
|
case v_command.to_sym
|
|
when :list, :state
|
|
info = []
|
|
pm = PluginManager.new
|
|
if v_command.to_sym == :state
|
|
if v_ext_option.nil?
|
|
hestia_print_error_message_to_cli "no module name specified"
|
|
log_event E_ARGS, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
load_module = v_ext_option.to_s.strip.split(",")[0].to_s.strip
|
|
pm.load_plugins(nil, load_module)
|
|
else
|
|
pm.load_plugins
|
|
end
|
|
pm.get_loaded_plugins.each_key do |mod|
|
|
next if mod == "default"
|
|
|
|
inst = pm.get_instance(mod)
|
|
if inst.key != pm.get_key
|
|
hestia_print_error_message_to_cli "incorrect module with incorrect rights #{mod}"
|
|
log_event E_ARGS, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
info_result = inst.info
|
|
info_result[:STATE] = hestia_ext_module_state_in_conf(info_result[:NAME], :get)
|
|
info << info_result
|
|
end
|
|
result_arr = info.sort do |a, b|
|
|
if a[:ID] < b[:ID]
|
|
-1
|
|
elsif a[:ID] > b[:ID]
|
|
1
|
|
else
|
|
a[:ID] < b[:ID]
|
|
end
|
|
end
|
|
if v_command.to_sym == :state
|
|
format = (v_format.nil? ? "shell" : v_format.strip)
|
|
else
|
|
format = (v_ext_option.nil? ? "shell" : v_ext_option.strip)
|
|
end
|
|
hestia_print_array_of_hashes(result_arr, format, "ID, NAME, DESCR, STATE, REQ, CONF")
|
|
when :enable
|
|
if v_ext_option.nil?
|
|
hestia_print_error_message_to_cli "no module name specified"
|
|
log_event E_ARGS, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
pm = PluginManager.new
|
|
load_module = v_ext_option.to_s.strip.split(",")[0].to_s.strip
|
|
pm.load_plugins(nil, load_module)
|
|
if pm.get_loaded_plugins.key? load_module
|
|
if hestia_ext_module_state_in_conf(load_module, :get) == "disabled"
|
|
inst = pm.get_instance(load_module)
|
|
result = inst.enable()
|
|
if result == ""
|
|
hestia_ext_module_state_in_conf(load_module, :enable)
|
|
log_event OK, $ARGUMENTS
|
|
else
|
|
hestia_print_error_message_to_cli "module #{load_module} return error #{result}"
|
|
log_event E_MODULE, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
end
|
|
else
|
|
hestia_print_error_message_to_cli "no module with name #{load_module} found"
|
|
log_event E_INVALID, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
when :disable
|
|
if v_ext_option.nil?
|
|
hestia_print_error_message_to_cli "no module name specified"
|
|
log_event E_ARGS, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
pm = PluginManager.new
|
|
load_module = v_ext_option.to_s.strip.split(",")[0].to_s.strip
|
|
pm.load_plugins(nil, load_module)
|
|
if pm.get_loaded_plugins.key? load_module
|
|
if hestia_ext_module_state_in_conf(load_module, :get) == "enabled"
|
|
inst = pm.get_instance(load_module)
|
|
result = inst.disable()
|
|
if result == ""
|
|
hestia_ext_module_state_in_conf(load_module, :disable)
|
|
log_event OK, $ARGUMENTS
|
|
else
|
|
hestia_print_error_message_to_cli "module #{load_module} return error #{result}"
|
|
log_event E_MODULE, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
end
|
|
else
|
|
hestia_print_error_message_to_cli "no module with name #{load_module} found"
|
|
log_event E_INVALID, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
else
|
|
hestia_print_error_message_to_cli "unknown command"
|
|
log_event E_INVALID, $ARGUMENTS
|
|
exit 1
|
|
end
|
|
|
|
exit 0
|
|
|