From b2e6934152e94db21ca96525915db70bc6e9f172 Mon Sep 17 00:00:00 2001
From: Viacheslav Hletenko <v.gletenko@vyos.io>
Date: Sat, 9 Jul 2022 10:13:42 +0000
Subject: nat: T4499: Fix NAT not showing a single flow entry

We must change dictionary if we get only onle flow entry
I.e one NAT record
With single entry we get:
    OrderedDict([('meta', xxx]))
We expect:
    [OrderedDict([('meta', xxx]))]
---
 src/op_mode/show_nat_translations.py | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

(limited to 'src/op_mode')

diff --git a/src/op_mode/show_nat_translations.py b/src/op_mode/show_nat_translations.py
index 25091e9fc..508845e23 100755
--- a/src/op_mode/show_nat_translations.py
+++ b/src/op_mode/show_nat_translations.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 #
-# Copyright (C) 2020 VyOS maintainers and contributors
+# Copyright (C) 2020-2022 VyOS maintainers and contributors
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 or later as
@@ -83,11 +83,23 @@ def pipe():
     return xml
 
 
+def xml_to_dict(xml):
+    """
+    Convert XML to dictionary
+    Return: dictionary
+    """
+    parse = xmltodict.parse(xml)
+    # If only one NAT entry we must change dict T4499
+    if 'meta' in parse['conntrack']['flow']:
+        return dict(conntrack={'flow': [parse['conntrack']['flow']]})
+    return parse
+
+
 def process(data, stats, protocol, pipe, verbose, flowtype=''):
     if not data:
         return
 
-    parsed = xmltodict.parse(data)
+    parsed = xml_to_dict(data)
 
     print(headers(verbose, pipe))
 
-- 
cgit v1.2.3