* Added CLICON_BACKEND_RESTCONF_PROCESS to clixon-config.yang

This commit is contained in:
Olof hagsand 2020-12-17 12:13:06 +01:00
parent 4fe3486d4e
commit b8f5d1dcae
8 changed files with 83 additions and 46 deletions

View file

@ -35,7 +35,7 @@
* This is how it works: * This is how it works:
* Register a process via `clixon_process_register(h, name, namespace, argv, argc)` * Register a process via `clixon_process_register(h, name, namespace, argv, argc)`
* Use process-control RPC defined in clixon-lib.yang to start/stop/restart or query status on that process * Use process-control RPC defined in clixon-lib.yang to start/stop/restart or query status on that process
* Example code in the main example * Enable in backend for restconf using `CLICON_BACKEND_RESTCONF_PROCESS`.
* More YANG extension functionality, * More YANG extension functionality,
* See [Augment auto-cli for hiding/modifying cli syntax #156](https://github.com/clicon/clixon/issues/156) and [hiding auto-generated CLI entries #153](https://github.com/clicon/clixon/issues/153) * See [Augment auto-cli for hiding/modifying cli syntax #156](https://github.com/clicon/clixon/issues/156) and [hiding auto-generated CLI entries #153](https://github.com/clicon/clixon/issues/153)
* Extensions can be used in augmentations * Extensions can be used in augmentations
@ -57,7 +57,8 @@ Users may have to change how they access the system
* Added: autocli-op extension (see new features) * Added: autocli-op extension (see new features)
* Added: rpc process-control for process/daemon management * Added: rpc process-control for process/daemon management
* New clixon-config@2020-11-03.yang revision * New clixon-config@2020-11-03.yang revision
* Moved to clixon-restconf.yang and marked as obsolete: * Added CLICON_BACKEND_RESTCONF_PROCESS
* Copied to clixon-restconf.yang and marked as obsolete:
- CLICON_RESTCONF_IPV4_ADDR - CLICON_RESTCONF_IPV4_ADDR
- CLICON_RESTCONF_IPV6_ADDR - CLICON_RESTCONF_IPV6_ADDR
- CLICON_RESTCONF_HTTP_PORT - CLICON_RESTCONF_HTTP_PORT

View file

@ -178,6 +178,50 @@ backend_server_socket(clicon_handle h)
return ss; return ss;
} }
/*! Enable process-control of restconf daemon, ie start/stop restconf
* @param[in] h Clicon handle
* @note Could also look in clixon-restconf and start process if enable is true, but that needs to
* be in start callback using a pseudo plugin.
*/
static int
backend_restconf_process_control(clicon_handle h)
{
int retval = -1;
char **argv = NULL;
int i;
int nr;
char dbgstr[8];
char wwwstr[64];
nr = 4;
if (clicon_debug_get() != 0)
nr += 2;
if ((argv = calloc(nr, sizeof(char *))) == NULL){
clicon_err(OE_UNIX, errno, "calloc");
goto done;
}
i = 0;
snprintf(wwwstr, sizeof(wwwstr)-1, "%s/clixon_restconf", clicon_option_str(h, "CLICON_WWWDIR"));
argv[i++] = wwwstr;
argv[i++] = "-f";
argv[i++] = clicon_option_str(h, "CLICON_CONFIGFILE");
if (clicon_debug_get() != 0){
argv[i++] = "-D";
snprintf(dbgstr, sizeof(dbgstr)-1, "%d", clicon_debug_get());
argv[i++] = dbgstr;
}
argv[i++] = NULL;
if (clixon_process_register(h, "restconf",
NULL /* XXX network namespace */,
argv, nr) < 0)
goto done;
if (argv != NULL)
free(argv);
retval = 0;
done:
return retval;
}
/*! Load external NACM file /*! Load external NACM file
*/ */
static int static int
@ -745,6 +789,12 @@ main(int argc,
clicon_option_str(h, "CLICON_BACKEND_REGEXP")) < 0) clicon_option_str(h, "CLICON_BACKEND_REGEXP")) < 0)
goto done; goto done;
/* Enable process-control of restconf daemon, ie start/stop restconf */
if (clicon_option_bool(h, "CLICON_BACKEND_RESTCONF_PROCESS")){
if (backend_restconf_process_control(h) < 0)
goto done;
}
/* Load Yang modules /* Load Yang modules
* 1. Load a yang module as a specific absolute filename */ * 1. Load a yang module as a specific absolute filename */
if ((str = clicon_yang_main_file(h)) != NULL) if ((str = clicon_yang_main_file(h)) != NULL)

View file

@ -1153,36 +1153,6 @@ clixon_plugin_init(clicon_handle h)
else else
if (upgrade_callback_register(h, xml_changelog_upgrade, NULL, NULL) < 0) if (upgrade_callback_register(h, xml_changelog_upgrade, NULL, NULL) < 0)
goto done; goto done;
{
char **argv = NULL;
int i;
int nr;
char dbgstr[8];
char wwwstr[64];
nr = 4;
if (clicon_debug_get() != 0)
nr += 2;
if ((argv = calloc(nr, sizeof(char *))) == NULL){
clicon_err(OE_UNIX, errno, "calloc");
goto done;
}
i = 0;
snprintf(wwwstr, sizeof(wwwstr)-1, "%s/clixon_restconf", clicon_option_str(h, "CLICON_WWWDIR"));
argv[i++] = wwwstr;
argv[i++] = "-f";
argv[i++] = clicon_option_str(h, "CLICON_CONFIGFILE");
if (clicon_debug_get() != 0){
argv[i++] = "-D";
snprintf(dbgstr, sizeof(dbgstr)-1, "%d", clicon_debug_get());
argv[i++] = dbgstr;
}
argv[i++] = NULL;
if (clixon_process_register(h, "restconf", _proc_netns, argv, nr) < 0)
goto done;
if (argv != NULL)
free(argv);
}
/* Return plugin API */ /* Return plugin API */
return &api; return &api;
done: done:

View file

@ -67,7 +67,7 @@ int xmldb_clear(clicon_handle h, const char *db);
int xmldb_delete(clicon_handle h, const char *db); int xmldb_delete(clicon_handle h, const char *db);
int xmldb_create(clicon_handle h, const char *db); int xmldb_create(clicon_handle h, const char *db);
/* utility functions */ /* utility functions */
int xmldb_db_reset(clicon_handle h, char *db); int xmldb_db_reset(clicon_handle h, const char *db);
cxobj *xmldb_cache_get(clicon_handle h, const char *db); cxobj *xmldb_cache_get(clicon_handle h, const char *db);

View file

@ -466,7 +466,7 @@ xmldb_create(clicon_handle h,
*/ */
int int
xmldb_db_reset(clicon_handle h, xmldb_db_reset(clicon_handle h,
char *db) const char *db)
{ {
if (xmldb_exists(h, db) == 1){ if (xmldb_exists(h, db) == 1){
if (xmldb_delete(h, db) != 0 && errno != ENOENT) if (xmldb_delete(h, db) != 0 && errno != ENOENT)

View file

@ -100,22 +100,24 @@ EOF
fi fi
new "start backend -s $db -f $cfg" new "start backend -s $db -f $cfg"
start_backend -s $db -f $cfg start_backend -s $db -f $cfg
new "wait backend"
wait_backend
else else
new "Restart backend as eg follows: -Ff $cfg -s $db" new "Restart backend as eg follows: -Ff $cfg -s $db"
sleep 2 sleep 2
fi fi
new "waiting" if [ $RC -ne 0 ]; then # Bring your own restconf
wait_backend
new "kill old restconf daemon" new "kill old restconf daemon"
stop_restconf_pre stop_restconf_pre
new "start restconf daemon (-a is enable basic authentication)" new "start restconf daemon (-a is enable basic authentication)"
start_restconf -f $cfg -- -a start_restconf -f $cfg -- -a
new "waiting" new "wait restconf"
wait_restconf wait_restconf
fi
# Use POST (instead of startup) # Use POST (instead of startup)
# Note this only works because CLICON_NACM_DISABLED_ON_EMPTY is true # Note this only works because CLICON_NACM_DISABLED_ON_EMPTY is true
@ -176,8 +178,10 @@ EOF
new "get 99" new "get 99"
expectpart "$(curl -u guest:bar $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/nacm-example:x)" 0 "$status" "$ret" expectpart "$(curl -u guest:bar $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/nacm-example:x)" 0 "$status" "$ret"
if [ $RC -ne 0 ]; then # Bring your own restconf
new "Kill restconf daemon" new "Kill restconf daemon"
stop_restconf stop_restconf
fi
if [ $BE -ne 0 ]; then # Bring your own backend if [ $BE -ne 0 ]; then # Bring your own backend
new "Kill backend" new "Kill backend"

View file

@ -33,6 +33,8 @@ cat <<EOF > $cfg
<CLICON_BACKEND_PIDFILE>/usr/local/var/$APPNAME/$APPNAME.pidfile</CLICON_BACKEND_PIDFILE> <CLICON_BACKEND_PIDFILE>/usr/local/var/$APPNAME/$APPNAME.pidfile</CLICON_BACKEND_PIDFILE>
<CLICON_XMLDB_DIR>/usr/local/var/$APPNAME</CLICON_XMLDB_DIR> <CLICON_XMLDB_DIR>/usr/local/var/$APPNAME</CLICON_XMLDB_DIR>
<CLICON_MODULE_LIBRARY_RFC7895>true</CLICON_MODULE_LIBRARY_RFC7895> <CLICON_MODULE_LIBRARY_RFC7895>true</CLICON_MODULE_LIBRARY_RFC7895>
<!-- start restconf from backend -->
<CLICON_BACKEND_RESTCONF_PROCESS>true</CLICON_BACKEND_RESTCONF_PROCESS>
$RESTCONFIG $RESTCONFIG
</clixon-config> </clixon-config>
EOF EOF

View file

@ -45,7 +45,8 @@ module clixon-config {
revision 2020-11-03 { revision 2020-11-03 {
description description
"Moved to clixon-restconf.yang and marked as obsolete: "Added CLICON_BACKEND_RESTCONF_PROCESS
Copied to clixon-restconf.yang and marked as obsolete:
CLICON_RESTCONF_IPV4_ADDR CLICON_RESTCONF_IPV4_ADDR
CLICON_RESTCONF_IPV6_ADDR CLICON_RESTCONF_IPV6_ADDR
CLICON_RESTCONF_HTTP_PORT CLICON_RESTCONF_HTTP_PORT
@ -712,6 +713,15 @@ module clixon-config {
mandatory true; mandatory true;
description "Process-id file of backend daemon"; description "Process-id file of backend daemon";
} }
leaf CLICON_BACKEND_RESTCONF_PROCESS {
type boolean;
default false;
description
"If set:
- enable process-control of restconf daemon, ie start/stop restconf
daemon internally using fork/exec.
Set to false if you start the restconf daemon by other means.";
}
leaf CLICON_AUTOCOMMIT { leaf CLICON_AUTOCOMMIT {
type int32; type int32;
default 0; default 0;