@@ -128,12 +128,13 @@ def get_fields(b, depth=0):
128
128
def pass_filter (row , filter ):
129
129
if filter == None :
130
130
return True
131
- filter = { str (k ).lower (): v for k ,v in filter .items () }
131
+ filter = {str (k ).lower (): v for k , v in filter .items ()}
132
132
if len (
133
133
{
134
134
k : v
135
135
for k , v in row .items ()
136
- if filter .get (str (k ).lower ()) and fnmatch .fnmatch (str (row [k ]), str (filter [str (k ).lower ()]))
136
+ if filter .get (str (k ).lower ())
137
+ and fnmatch .fnmatch (str (row [k ]), str (filter [str (k ).lower ()]))
137
138
}
138
139
) < len (filter ):
139
140
return False
@@ -243,6 +244,14 @@ def pass_filter(row, filter):
243
244
multiple = True ,
244
245
help = "inventory filter, e.g. -i site=lab -i role=leaf. Possible filter-fields are defined in inventory. Multiple filters are ANDed" ,
245
246
)
247
+ # @click.option(
248
+ # "--format",
249
+ # "-f",
250
+ # multiple=False,
251
+ # type=click.Choice(["table", "json", "yaml"]),
252
+ # default="table",
253
+ # help="Output format",
254
+ # )
246
255
@click .option (
247
256
"--box-type" ,
248
257
"-b" ,
@@ -267,6 +276,7 @@ def pass_filter(row, filter):
267
276
def cli (
268
277
ctx : Context ,
269
278
cfg : str ,
279
+ format : Optional [str ] = None ,
270
280
inv_filter : Optional [List ] = None ,
271
281
# field_filter: Optional[List] = None,
272
282
box_type : Optional [str ] = None ,
@@ -365,6 +375,7 @@ def cli(
365
375
if box_type :
366
376
box_type = box_type .upper ()
367
377
ctx .obj ["box_type" ] = box_type
378
+ ctx .obj ["format" ] = format
368
379
369
380
370
381
def print_report (
@@ -412,14 +423,20 @@ def _bgp_peers(task: Task) -> Result:
412
423
result = ctx .obj ["target" ].run (
413
424
task = _bgp_peers , name = "bgp_peers" , raise_on_error = False
414
425
)
415
- print_report (
416
- result = result ,
417
- name = "BGP Peers" ,
418
- failed_hosts = result .failed_hosts ,
419
- box_type = ctx .obj ["box_type" ],
420
- f_filter = f_filter ,
421
- i_filter = ctx .obj ["i_filter" ],
422
- )
426
+ if ctx .obj ["format" ] == "json" :
427
+ print_result (result )
428
+ elif ctx .obj ["format" ] == "yaml" :
429
+ yaml = YAML (typ = "safe" )
430
+ yaml .dump (result , sys .stdout )
431
+ else :
432
+ print_report (
433
+ result = result ,
434
+ name = "BGP Peers" ,
435
+ failed_hosts = result .failed_hosts ,
436
+ box_type = ctx .obj ["box_type" ],
437
+ f_filter = f_filter ,
438
+ i_filter = ctx .obj ["i_filter" ],
439
+ )
423
440
424
441
425
442
@cli .command ()
0 commit comments