Skip to content

Commit d9b1000

Browse files
authored
[cfggen] Add support in -v for jinja2 expression (#345)
* Add support in -v for jinja2 expression * Format json output
1 parent 66efbe4 commit d9b1000

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

dockers/docker-teamd/config.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
mkdir -p /etc/teamd
44

5-
for pc in `sonic-cfggen -m /etc/sonic/minigraph.xml --var-keys minigraph_portchannel_interfaces`; do
5+
for pc in `sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_portchannel_interfaces.keys()"`; do
66
sonic-cfggen -m /etc/sonic/minigraph.xml -a '{"pc":"'$pc'"}' -t /usr/share/sonic/templates/teamd.j2 >/etc/teamd/$pc.conf
77
done
88

src/sonic-config-engine/sonic-cfggen

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import jinja2
88
import netaddr
99
import json
1010
from minigraph import parse_xml
11+
from minigraph import minigraph_encoder
1112

1213

1314
def is_ipv4(value):
@@ -55,9 +56,9 @@ def main():
5556
group = parser.add_mutually_exclusive_group()
5657
group.add_argument("-t", "--template", help="render the data with the template file")
5758
group.add_argument("-s", "--alias-mapping", help="print alias mapping json if available", action='store_true')
58-
group.add_argument("-v", "--var", help="print the value of a variable")
59+
group.add_argument("-v", "--var", help="print the value of a variable, support jinja2 expression")
5960
group.add_argument("--var-json", help="print the value of a variable, in json format")
60-
group.add_argument("--var-keys", help="print all keys of a map variable")
61+
group.add_argument("--var-keys", help="print all keys of a map variable - to be deprecated, use -v and keys()")
6162
group.add_argument("--print-data", help="print all data", action='store_true')
6263
args = parser.parse_args()
6364

@@ -94,10 +95,11 @@ def main():
9495
print template.render(data)
9596

9697
if args.var != None:
97-
print data[args.var]
98+
template = jinja2.Template('{{' + args.var + '}}')
99+
print template.render(data)
98100

99101
if args.var_json != None:
100-
print json.dumps(data[args.var_json])
102+
print json.dumps(data[args.var_json], indent=4, cls=minigraph_encoder)
101103

102104
if args.var_keys != None:
103105
for key in data[args.var_keys].keys():
@@ -111,7 +113,7 @@ def main():
111113
print json.dumps(mapping)
112114

113115
if args.print_data:
114-
print data
116+
print json.dumps(data, indent=4, cls=minigraph_encoder)
115117

116118
if __name__ == "__main__":
117119
main()

0 commit comments

Comments
 (0)