diff --git a/CHANGELOG.md b/CHANGELOG.md index 43e1f25b0..12cf842f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,19 +53,21 @@ Users may have to change how they access the system ### C/CLI-API changes on existing features Developers may need to change their code +* Add `fromroot` parameter to `cli_show_common()` + * `cli_show_common(...xpath...)` --> `cli_show_common(...xpath,0...)` * Low-level message functions added `descr` argument for better logging * In this way, message debugs in level 2 are more descriptive * The descr argument can be set to NULL for backward-compability, see the following translations: - * clicon_rpc(s, ...) --> clicon_rpc(s, NULL, ...) - * clicon_rpc1(s, ...) --> clicon_rpc1(s, NULL, ...) - * clicon_msg_send(s, ...) --> clicon_msg_send(s, NULL, ...) - * clicon_msg_send1(s, ...) --> clicon_msg_send1(s, NULL, ...) - * clicon_msg_rcv(s, ...) --> clicon_msg_rcv(s, NULL, ...) - * clicon_msg_rcv1(s, ...) --> clicon_msg_rcv1(s, NULL, ...) - * clicon_msg_notify_xml(h, s, ...) --> clicon_msg_notify_xml(h, s, NULL, ...) - * send_msg_reply(s, ...) --> send_msg_reply(s, NULL, ...) - * clixon_client_lock(s, ...) --> clixon_client_lock(s, NULL, ...) - * clixon_client_hello(s, ...) --> clixon_client_hello(s, NULL, ...) + * `clicon_rpc(s, ...)` --> `clicon_rpc(s, NULL, ...)` + * `clicon_rpc1(s, ...)` --> `clicon_rpc1(s, NULL, ...)` + * `clicon_msg_send(s, ...)` --> `clicon_msg_send(s, NULL, ...)` + * `clicon_msg_send1(s, ...)` --> `clicon_msg_send1(s, NULL, ...)` + * `clicon_msg_rcv(s, ...)` --> `clicon_msg_rcv(s, NULL, ...)` + * `clicon_msg_rcv1(s, ...)` --> `clicon_msg_rcv1(s, NULL, ...) + * `clicon_msg_notify_xml(h, s, ...)` --> `clicon_msg_notify_xml(h, s, NULL, ...)` + * `send_msg_reply(s, ...)` --> `send_msg_reply(s, NULL, ...)` + * `clixon_client_lock(s, ...)` --> `clixon_client_lock(s, NULL, ...)` + * `clixon_client_hello(s, ...)` --> `clixon_client_hello(s, NULL, ...)` * CLI pipe function: added arg to `pipe_tail_fn()` diff --git a/apps/cli/cli_show.c b/apps/cli/cli_show.c index 62421190c..085360ecd 100644 --- a/apps/cli/cli_show.c +++ b/apps/cli/cli_show.c @@ -474,6 +474,7 @@ show_yang(clicon_handle h, * @param[in] extdefault with-defaults with propriatary extensions * @param[in] prepend CLI prefix to prepend cli syntax, eg "set " * @param[in] xpath XPath + * @param[in] fromroot If 0, display config from node of XPATH, if 1 display from root * @param[in] nsc Namespace mapping for xpath * @param[in] skiptop If set, do not show object itself, only its children */ @@ -487,6 +488,7 @@ cli_show_common(clicon_handle h, char *extdefault, char *prepend, char *xpath, + int fromroot, cvec *nsc, int skiptop ) @@ -527,6 +529,8 @@ cli_show_common(clicon_handle h, if (xml_defaults_nopresence(xt, 2) < 0) goto done; } + if (fromroot) + xpath="/"; if (xpath_vec(xt, nsc, "%s", &vec, &veclen, xpath) < 0) goto done; if (veclen){ @@ -746,6 +750,7 @@ cli_show_config(clicon_handle h, int argc = 0; char *xpath = "/"; char *namespace = NULL; + int fromroot = 0; if (cvec_len(argv) < 2 || cvec_len(argv) > 8){ clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: [ ]", cvec_len(argv)); @@ -783,7 +788,7 @@ cli_show_config(clicon_handle h, } if (cli_show_common(h, dbname, format, pretty, state, withdefault, extdefault, - prepend, xpath, nsc, 0) < 0) + prepend, xpath, fromroot, nsc, 0) < 0) goto done; retval = 0; done: @@ -823,6 +828,7 @@ show_conf_xpath(clicon_handle h, cg_var *cv; cvec *nsc = NULL; yang_stmt *yspec; + int fromroot = 0; if (cvec_len(argv) != 1){ clicon_err(OE_PLUGIN, EINVAL, "Requires one element to be "); @@ -849,7 +855,7 @@ show_conf_xpath(clicon_handle h, } if (cli_show_common(h, dbname, FORMAT_XML, 1, 0, NULL, NULL, - NULL, xpath, nsc, 0) < 0) + NULL, xpath, fromroot, nsc, 0) < 0) goto done; retval = 0; done: @@ -889,6 +895,7 @@ cli_show_version(clicon_handle h, * Retrieval mode: report-all, trim, explicit, report-all-tagged, * NULL, report-all-tagged-default, report-all-tagged-strip (extended) * CLI prefix: prepend before cli syntax output + * true|false: Show from root * @code * clispec: * show config @datamodelshow, cli_show_auto("candidate", "xml"); @@ -929,9 +936,10 @@ cli_show_auto(clicon_handle h, char *api_path_fmt01 = NULL; char *str; char *mtpoint = NULL; + int fromroot = 0; - if (cvec_len(argv) < 2 || cvec_len(argv) > 8){ - clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected:: * [ ]", cvec_len(argv)); + if (cvec_len(argv) < 2 || cvec_len(argv) > 9){ + clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected:: * [ ]", cvec_len(argv)); goto done; } api_path_fmt = cv_string_get(cvec_i(argv, argc++)); @@ -962,6 +970,10 @@ cli_show_auto(clicon_handle h, if (cvec_len(argv) > argc){ prepend = cv_string_get(cvec_i(argv, argc++)); } + if (cvec_len(argv) > argc){ + if (cli_show_option_bool(argv, argc++, &fromroot) < 0) + goto done; + } if ((yspec0 = clicon_dbspec_yang(h)) == NULL){ clicon_err(OE_FATAL, 0, "No DB_SPEC"); goto done; @@ -985,7 +997,7 @@ cli_show_auto(clicon_handle h, } if (cli_show_common(h, dbname, format, pretty, state, withdefault, extdefault, - prepend, xpath, nsc, 0) < 0) + prepend, xpath, fromroot, nsc, 0) < 0) goto done; retval = 0; done: @@ -1057,6 +1069,7 @@ cli_show_auto_mode(clicon_handle h, cbuf *cbxpath = NULL; cvec *nsc0 = NULL; cg_var *cv; + int fromroot = 0; if (cvec_len(argv) < 2 || cvec_len(argv) > 7){ clicon_err(OE_PLUGIN, EINVAL, "Received %d arguments. Expected: [ ]", cvec_len(argv)); @@ -1122,7 +1135,7 @@ cli_show_auto_mode(clicon_handle h, skiptop = (strcmp(xpath,"/") != 0); if (cli_show_common(h, dbname, format, pretty, state, withdefault, extdefault, - prepend, cbuf_get(cbxpath), nsc, skiptop) < 0) + prepend, cbuf_get(cbxpath), fromroot, nsc, skiptop) < 0) goto done; retval = 0; done: diff --git a/apps/cli/clixon_cli_api.h b/apps/cli/clixon_cli_api.h index c5886ba87..8cf93221c 100644 --- a/apps/cli/clixon_cli_api.h +++ b/apps/cli/clixon_cli_api.h @@ -120,7 +120,7 @@ int expand_dbvar(void *h, char *name, cvec *cvv, cvec *argv, int clixon_cli2file(clicon_handle h, FILE *f, cxobj *xn, char *prepend, clicon_output_cb *fn, int skiptop); /* cli_show.c: CLIgen new vector arg callbacks */ -int cli_show_common(clicon_handle h, char *db, enum format_enum format, int pretty, int state, char *withdefault, char *extdefault, char *prepend, char *xpath, cvec *nsc, int skiptop); +int cli_show_common(clicon_handle h, char *db, enum format_enum format, int pretty, int state, char *withdefault, char *extdefault, char *prepend, char *xpath, int fromroot, cvec *nsc, int skiptop); int show_yang(clicon_handle h, cvec *vars, cvec *argv); int show_conf_xpath(clicon_handle h, cvec *cvv, cvec *argv); diff --git a/test/test_cli_pipe_multi.sh b/test/test_cli_pipe_multi.sh index 9561da79b..b6d55352f 100755 --- a/test/test_cli_pipe_multi.sh +++ b/test/test_cli_pipe_multi.sh @@ -73,8 +73,8 @@ commit("Commit the changes"), cli_commit(); show("Show a particular state of the system"){ version("Show version"), cli_show_version("candidate", "text", "/"); configuration("Show configuration"), cli_show_auto_mode("candidate", "xml", true, false);{ - @|show, cli_show_auto_mode("candidate", "xml", true, false); - @datamodelshow, cli_show_auto("candidate", "xml", true, false, "report-all"); + @|show, cli_show_auto_mode("candidate", "xml", true, false, "report-all"); + @datamodelshow, cli_show_auto("candidate", "xml", true, false, "report-all", "set ", true); } autocli("Generated tree") @datamodelshow, cli_show_auto("candidate", "xml", true, false, "report-all"); } @@ -126,8 +126,7 @@ expectpart "$($clixon_cli -1 -f $cfg commit)" 0 "^$" # 1. Multiple pipe files: pipe_common + pipe_show where the latter is a superset new "multiple files: show menu contains common items" -echo "$clixon_cli -1 -f $cfg show config \| count" -expectpart "$($clixon_cli -1 -f $cfg show config \| count)" 0 10 +expectpart "$($clixon_cli -1 -f $cfg show configuration \| count)" 0 10 # 2. Implicit pipe and explicit in same file where explicit overrides new "Implicit default command" @@ -141,7 +140,7 @@ new "sub-tree default implicit" expectpart "$(echo "set table \| ?" | $clixon_cli -f $cfg 2> /dev/null)" 0 count --not-- showas new "sub-tree explicit" -expectpart "$(echo "show config table \| ?" | $clixon_cli -f $cfg 2> /dev/null)" 0 count showas +expectpart "$(echo "show configuration table \| ?" | $clixon_cli -f $cfg 2> /dev/null)" 0 count showas # History error: second command affected by first # show configuration | count is OK @@ -159,6 +158,9 @@ EOF new "Implicit followed by explicit" expectpart "$(cat $fin | $clixon_cli -f $cfg 2>&1)" 0 "a" --not-- "Unknown command" +new "subtree two level show" +expectpart "$(echo "show configuration table parameter \| showas xml" | $clixon_cli -f $cfg 2> /dev/null)" 0 "" "x" + if [ $BE -ne 0 ]; then new "Kill backend" # Check if premature kill