From 9bc429500aa4803c64b9aec0b2258ec82f931c70 Mon Sep 17 00:00:00 2001 From: Taoyu Li Date: Tue, 28 Feb 2017 01:05:48 +0000 Subject: [PATCH 1/2] [cfggen] Add support in -v for jinja2 expression --- dockers/docker-teamd/config.sh | 2 +- src/sonic-config-engine/sonic-cfggen | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dockers/docker-teamd/config.sh b/dockers/docker-teamd/config.sh index 8259e2faf31..b3ad1401ad5 100755 --- a/dockers/docker-teamd/config.sh +++ b/dockers/docker-teamd/config.sh @@ -2,7 +2,7 @@ mkdir -p /etc/teamd -for pc in `sonic-cfggen -m /etc/sonic/minigraph.xml --var-keys minigraph_portchannel_interfaces`; do +for pc in `sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_portchannel_interfaces.keys()"`; do sonic-cfggen -m /etc/sonic/minigraph.xml -a '{"pc":"'$pc'"}' -t /usr/share/sonic/templates/teamd.j2 >/etc/teamd/$pc.conf done diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 16996707547..0a97544c5be 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -55,9 +55,9 @@ def main(): group = parser.add_mutually_exclusive_group() group.add_argument("-t", "--template", help="render the data with the template file") group.add_argument("-s", "--alias-mapping", help="print alias mapping json if available", action='store_true') - group.add_argument("-v", "--var", help="print the value of a variable") + group.add_argument("-v", "--var", help="print the value of a variable, support jinja2 expression") group.add_argument("--var-json", help="print the value of a variable, in json format") - group.add_argument("--var-keys", help="print all keys of a map variable") + group.add_argument("--var-keys", help="print all keys of a map variable - to be deprecated, use -v and keys()") group.add_argument("--print-data", help="print all data", action='store_true') args = parser.parse_args() @@ -94,10 +94,11 @@ def main(): print template.render(data) if args.var != None: - print data[args.var] + template = jinja2.Template('{{' + args.var + '}}') + print template.render(data) if args.var_json != None: - print json.dumps(data[args.var_json]) + print json.dumps(data[args.var_json], indent=4) if args.var_keys != None: for key in data[args.var_keys].keys(): From 9a7cb2a219cca7e008540cd8e03ff1d6e6ec5ca4 Mon Sep 17 00:00:00 2001 From: Taoyu Li Date: Tue, 28 Feb 2017 02:30:01 +0000 Subject: [PATCH 2/2] Format json output --- src/sonic-config-engine/sonic-cfggen | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 0a97544c5be..90a905c5b3e 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -8,6 +8,7 @@ import jinja2 import netaddr import json from minigraph import parse_xml +from minigraph import minigraph_encoder def is_ipv4(value): @@ -98,7 +99,7 @@ def main(): print template.render(data) if args.var_json != None: - print json.dumps(data[args.var_json], indent=4) + print json.dumps(data[args.var_json], indent=4, cls=minigraph_encoder) if args.var_keys != None: for key in data[args.var_keys].keys(): @@ -112,7 +113,7 @@ def main(): print json.dumps(mapping) if args.print_data: - print data + print json.dumps(data, indent=4, cls=minigraph_encoder) if __name__ == "__main__": main()