Add restart plugin library code for netconf and cli
This commit is contained in:
parent
51316d5d61
commit
7976c11f11
4 changed files with 80 additions and 1 deletions
|
|
@ -1320,3 +1320,33 @@ cli_help(clicon_handle h, cvec *vars, cvec *argv)
|
|||
return cligen_help(ch, stdout, pt);
|
||||
}
|
||||
|
||||
/*! CLI support function for restarting a plugin
|
||||
*
|
||||
* @param[in] h Clicon handle
|
||||
* @param[in] cvv Not used
|
||||
* @param[in] arg A string with <database>
|
||||
* @code
|
||||
* restart("comment") , cli_restart_plugin("myplugin", "restart");
|
||||
* @endcode
|
||||
*/
|
||||
int
|
||||
cli_restart_plugin(clicon_handle h,
|
||||
cvec *cvv,
|
||||
cvec *argv)
|
||||
{
|
||||
int retval = -1;
|
||||
cg_var *cv;
|
||||
char *plugin;
|
||||
|
||||
if ((cv = cvec_find_var(cvv, "plugin")) == NULL){
|
||||
if (cvec_len(argv) != 1){
|
||||
clicon_err(OE_PLUGIN, EINVAL, "Requires plugin variable");
|
||||
goto done;
|
||||
}
|
||||
cv = cvec_i(argv, 0);
|
||||
}
|
||||
plugin = cv_string_get(cv);
|
||||
retval = clicon_rpc_restart_plugin(h, plugin);
|
||||
done:
|
||||
return retval;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,3 +106,4 @@ notify("Get notifications from backend"), cli_notify("EXAMPLE", "1", "text");
|
|||
no("Negate") notify("Get notifications from backend"), cli_notify("EXAMPLE", "0", "xml");
|
||||
lock,cli_lock("candidate");
|
||||
unlock,cli_unlock("candidate");
|
||||
restart <plugin:string>, cli_restart_plugin();
|
||||
|
|
|
|||
|
|
@ -69,5 +69,6 @@ int clicon_rpc_create_subscription(clicon_handle h, char *stream, char *filter,
|
|||
int clicon_rpc_debug(clicon_handle h, int level);
|
||||
int clicon_rpc_restconf_debug(clicon_handle h, int level);
|
||||
int clicon_hello_req(clicon_handle h, uint32_t *id);
|
||||
int clicon_rpc_restart_plugin(clicon_handle h, char *plugin);
|
||||
|
||||
#endif /* _CLIXON_PROTO_CLIENT_H_ */
|
||||
|
|
|
|||
|
|
@ -1424,3 +1424,50 @@ clicon_hello_req(clicon_handle h,
|
|||
xml_free(xret);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*! Send a restart plugin request to backend server
|
||||
* @param[in] h CLICON handle
|
||||
* @param[in] level Debug level
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error and logged to syslog
|
||||
*/
|
||||
int
|
||||
clicon_rpc_restart_plugin(clicon_handle h,
|
||||
char *plugin)
|
||||
{
|
||||
int retval = -1;
|
||||
struct clicon_msg *msg = NULL;
|
||||
cxobj *xret = NULL;
|
||||
cxobj *xerr;
|
||||
char *username;
|
||||
uint32_t session_id;
|
||||
|
||||
if (session_id_check(h, &session_id) < 0)
|
||||
goto done;
|
||||
username = clicon_username_get(h);
|
||||
if ((msg = clicon_msg_encode(session_id,
|
||||
"<rpc xmlns=\"%s\" username=\"%s\" %s><restart-plugin xmlns=\"%s\"><plugin>%s</plugin></restart-plugin></rpc>",
|
||||
NETCONF_BASE_NAMESPACE,
|
||||
username?username:"",
|
||||
NETCONF_MESSAGE_ID_ATTR,
|
||||
CLIXON_LIB_NS,
|
||||
plugin)) == NULL)
|
||||
goto done;
|
||||
if (clicon_rpc_msg(h, msg, &xret) < 0)
|
||||
goto done;
|
||||
if ((xerr = xpath_first(xret, NULL, "//rpc-error")) != NULL){
|
||||
clixon_netconf_error(xerr, "Debug", NULL);
|
||||
goto done;
|
||||
}
|
||||
if (xpath_first(xret, NULL, "//rpc-reply/ok") == NULL){
|
||||
clicon_err(OE_XML, 0, "rpc error"); /* XXX extract info from rpc-error */
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
if (msg)
|
||||
free(msg);
|
||||
if (xret)
|
||||
xml_free(xret);
|
||||
return retval;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue