Alternative yang spec option -y added to all applications

This commit is contained in:
Olof hagsand 2017-04-04 21:37:42 +02:00
parent 236b661e43
commit c59869a44e
10 changed files with 86 additions and 167 deletions

View file

@ -57,6 +57,7 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <libgen.h>
/* cligen */
#include <cligen/cligen.h>
@ -141,7 +142,8 @@ usage(char *argv0, clicon_handle h)
" -r\t\tReload running database\n"
" -p \t\tPrint database yang specification\n"
" -t \t\tPrint alternate spec translation (eg if YANG print KEY, if KEY print YANG)\n"
" -g <group>\tClient membership required to this group (default: %s)\n",
" -g <group>\tClient membership required to this group (default: %s)\n"
"\t-y <file>\tOverride yang spec file (dont include .yang suffix)\n",
argv0,
plgdir ? plgdir : "none",
confsock ? confsock : "none",
@ -426,9 +428,15 @@ main(int argc, char **argv)
case 't' : /* Print alternative dbspec format (eg if YANG, print KEY) */
printalt++;
break;
case 'y' : /* yang module */
clicon_option_str_set(h, "CLICON_YANG_MODULE_MAIN", optarg);
case 'y' :{ /* yang module */
/* Set revision to NULL, extract dir and module */
char *str = strdup(optarg);
char *dir = dirname(str);
hash_del(clicon_options(h), (char*)"CLICON_YANG_MODULE_REVISION");
clicon_option_str_set(h, "CLICON_YANG_MODULE_MAIN", basename(optarg));
clicon_option_str_set(h, "CLICON_YANG_DIR", strdup(dir));
break;
}
default:
usage(argv[0], h);
break;

View file

@ -595,8 +595,7 @@ load_config_filev(clicon_handle h,
{
int ret = -1;
struct stat st;
char **vecp = NULL;
char *filename;
char *filename = NULL;
int replace;
cg_var *cv;
char *opstr;
@ -628,11 +627,10 @@ load_config_filev(clicon_handle h,
clicon_err(OE_PLUGIN, 0, "No such var name: %s", varstr);
goto done;
}
if ((vecp = clicon_realpath(NULL, cv_string_get(cv), __FUNCTION__)) == NULL){
if ((filename = realpath(cv_string_get(cv), NULL)) == NULL){
cli_output(stderr, "Failed to resolve filename\n");
goto done;
}
filename = vecp[0];
if (stat(filename, &st) < 0){
clicon_err(OE_UNIX, 0, "load_config: stat(%s): %s",
filename, strerror(errno));
@ -668,14 +666,8 @@ load_config_filev(clicon_handle h,
// }
ret = 0;
done:
unchunk_group(__FUNCTION__);
if (vecp){
if (vecp[0])
free(vecp[0]);
if (vecp[1])
free(vecp[1]);
free(vecp);
}
if (filename)
free(filename);
if (xt)
xml_free(xt);
if (fd != -1)
@ -704,8 +696,7 @@ save_config_filev(clicon_handle h,
cvec *argv)
{
int retval = -1;
char **vecp;
char *filename;
char *filename = NULL;
cg_var *cv;
char *dbstr;
char *varstr;
@ -732,11 +723,10 @@ save_config_filev(clicon_handle h,
clicon_err(OE_PLUGIN, 0, "No such var name: %s", varstr);
goto done;
}
if ((vecp = clicon_realpath(NULL, cv_string_get(cv), __FUNCTION__)) == NULL){
if ((filename = realpath(cv_string_get(cv), NULL)) == NULL){
cli_output(stderr, "Failed to resolve filename\n");
goto done;
}
filename = vecp[0];
if (clicon_rpc_get_config(h, dbstr,"/", &xt) < 0)
goto done;
if ((f = fopen(filename, "wb")) == NULL){
@ -748,7 +738,8 @@ save_config_filev(clicon_handle h,
retval = 0;
/* Fall through */
done:
unchunk_group(__FUNCTION__);
if (filename)
free(filename);
if (xt)
xml_free(xt);
if (f != NULL)

View file

@ -54,6 +54,7 @@
#include <sys/param.h>
#include <netinet/in.h>
#include <assert.h>
#include <libgen.h>
/* cligen */
#include <cligen/cligen.h>
@ -69,7 +70,7 @@
#include "cli_handle.h"
/* Command line options to be passed to getopt(3) */
#define CLI_OPTS "hD:f:F:1u:d:m:qpGLl:"
#define CLI_OPTS "hD:f:F:1u:d:m:qpGLl:y:"
/*! terminate cli application */
static int
@ -150,7 +151,8 @@ usage(char *argv0, clicon_handle h)
"\t-p \t\tPrint database yang specification\n"
"\t-G \t\tPrint CLI syntax generated from dbspec (if CLICON_CLI_GENMODEL enabled)\n"
"\t-L \t\tDebug print dynamic CLI syntax including completions and expansions\n"
"\t-l <s|e|o> \tLog on (s)yslog, std(e)rr or std(o)ut (stderr is default)\n",
"\t-l <s|e|o> \tLog on (s)yslog, std(e)rr or std(o)ut (stderr is default)\n"
"\t-y <file>\tOverride yang spec file (dont include .yang suffix)\n",
argv0,
confsock ? confsock : "none",
plgdir ? plgdir : "none"
@ -288,6 +290,15 @@ main(int argc, char **argv)
case 'L' : /* Debug print dynamic CLI syntax */
logclisyntax++;
break;
case 'y' :{ /* yang module */
/* Set revision to NULL, extract dir and module */
char *str = strdup(optarg);
char *dir = dirname(str);
hash_del(clicon_options(h), (char*)"CLICON_YANG_MODULE_REVISION");
clicon_option_str_set(h, "CLICON_YANG_MODULE_MAIN", basename(optarg));
clicon_option_str_set(h, "CLICON_YANG_DIR", strdup(dir));
break;
}
default:
usage(argv[0], h);
break;

View file

@ -56,6 +56,7 @@
#include <arpa/inet.h>
#include <assert.h>
#include <netinet/in.h>
#include <libgen.h>
/* cligen */
#include <cligen/cligen.h>
@ -70,7 +71,7 @@
#include "netconf_rpc.h"
/* Command line options to be passed to getopt(3) */
#define NETCONF_OPTS "hDqf:d:S"
#define NETCONF_OPTS "hDqf:d:Sy:"
/*! Process incoming packet
* @param[in] h Clicon handle
@ -286,7 +287,8 @@ usage(clicon_handle h,
"\t-q\t\tQuiet: dont send hello prompt\n"
"\t-f <file>\tConfiguration file (mandatory)\n"
"\t-d <dir>\tSpecify netconf plugin directory dir (default: %s)\n"
"\t-S\t\tLog on syslog\n",
"\t-S\t\tLog on syslog\n"
"\t-y <file>\tOverride yang spec file (dont include .yang suffix)\n",
argv0,
netconfdir
);
@ -359,6 +361,15 @@ main(int argc, char **argv)
usage(h, argv[0]);
clicon_option_str_set(h, "CLICON_NETCONF_DIR", optarg);
break;
case 'y' :{ /* yang module */
/* Set revision to NULL, extract dir and module */
char *str = strdup(optarg);
char *dir = dirname(str);
hash_del(clicon_options(h), (char*)"CLICON_YANG_MODULE_REVISION");
clicon_option_str_set(h, "CLICON_YANG_MODULE_MAIN", basename(optarg));
clicon_option_str_set(h, "CLICON_YANG_DIR", strdup(dir));
break;
}
default:
usage(h, argv[0]);
break;

View file

@ -59,6 +59,7 @@
#include <sys/time.h>
#include <sys/wait.h>
#include <curl/curl.h>
#include <libgen.h>
/* cligen */
#include <cligen/cligen.h>
@ -71,7 +72,7 @@
#include "restconf_methods.h"
/* Command line options to be passed to getopt(3) */
#define RESTCONF_OPTS "hDf:p:"
#define RESTCONF_OPTS "hDf:p:y:"
/* Should be discovered via "/.well-known/host-meta"
resource ([RFC6415]) */
@ -243,7 +244,8 @@ usage(clicon_handle h,
"\t-h \t\tHelp\n"
"\t-D \t\tDebug. Log to syslog\n"
"\t-f <file>\tConfiguration file (mandatory)\n"
"\t-d <dir>\tSpecify restconf plugin directory dir (default: %s)\n",
"\t-d <dir>\tSpecify restconf plugin directory dir (default: %s)\n"
"\t-y <file>\tOverride yang spec file (dont include .yang suffix)\n",
argv0,
restconfdir
);
@ -264,6 +266,7 @@ main(int argc,
char *sockpath;
char *path;
clicon_handle h;
char *yangspec=NULL;
/* In the startup, logs to stderr & debug flag set later */
clicon_log_init(__PROGRAM__, LOG_INFO, CLICON_LOG_SYSLOG);
@ -289,6 +292,9 @@ main(int argc,
usage(h, argv[0]);
clicon_option_str_set(h, "CLICON_RESTCONF_DIR", optarg);
break;
case 'y' : /* yang module */
yangspec = optarg;
break;
default:
usage(h, argv[0]);
break;
@ -312,6 +318,15 @@ main(int argc,
if (clicon_options_main(h) < 0)
goto done;
/* Overwrite yang module with -y option */
if (yangspec){
/* Set revision to NULL, extract dir and module */
char *str = strdup(yangspec);
char *dir = dirname(str);
hash_del(clicon_options(h), (char*)"CLICON_YANG_MODULE_REVISION");
clicon_option_str_set(h, "CLICON_YANG_MODULE_MAIN", basename(yangspec));
clicon_option_str_set(h, "CLICON_YANG_DIR", strdup(dir));
}
/* Initialize plugins group */
if (restconf_plugin_load(h) < 0)
return -1;