cli: Add module refresh command

Adds a command to the CLI to unload and then
load a module. This makes it easier to perform
these operations which are often done
subsequently to load a new version of a module.

"module reload" already refers to reloading of
configuration, so the name "refresh" is chosen
instead.

ASTERISK-29807 #close

Change-Id: I595f6f11774a0de2565a1fba38da22309ce93a2c
This commit is contained in:
Naveen Albert 2021-12-15 14:23:06 +00:00 committed by Joshua Colp
parent dc5d70f29b
commit ef00ff4e1e
2 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,5 @@
Subject: cli
The "module refresh" command has been added,
which allows unloading and then loading a
module with a single command.

View File

@ -805,6 +805,38 @@ static char *handle_logger_mute(struct ast_cli_entry *e, int cmd, struct ast_cli
return CLI_SUCCESS;
}
static char *handle_refresh(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
/* "module refresh <mod>" */
switch (cmd) {
case CLI_INIT:
e->command = "module refresh";
e->usage =
"Usage: module refresh <module name>\n"
" Unloads and loads the specified module into Asterisk.\n";
return NULL;
case CLI_GENERATE:
if (a->pos != e->args) {
return NULL;
}
return ast_module_helper(a->line, a->word, a->pos, a->n, a->pos, AST_MODULE_HELPER_UNLOAD);
}
if (a->argc != e->args + 1) {
return CLI_SHOWUSAGE;
}
if (ast_unload_resource(a->argv[e->args], AST_FORCE_SOFT)) {
ast_cli(a->fd, "Unable to unload resource %s\n", a->argv[e->args]);
return CLI_FAILURE;
}
if (ast_load_resource(a->argv[e->args])) {
ast_cli(a->fd, "Unable to load module %s\n", a->argv[e->args]);
return CLI_FAILURE;
}
ast_cli(a->fd, "Unloaded and loaded %s\n", a->argv[e->args]);
return CLI_SUCCESS;
}
static char *handle_unload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
/* "module unload mod_1 [mod_2 .. mod_N]" */
@ -2025,6 +2057,8 @@ static struct ast_cli_entry cli_cli[] = {
AST_CLI_DEFINE(handle_unload, "Unload a module by name"),
AST_CLI_DEFINE(handle_refresh, "Completely unloads and loads a module by name"),
AST_CLI_DEFINE(handle_showuptime, "Show uptime information"),
AST_CLI_DEFINE(handle_softhangup, "Request a hangup on a given channel"),