From 4a58492fccfdc2043af5091150b8823ec7169507 Mon Sep 17 00:00:00 2001
From: khramshinr <khramshinr@gmail.com>
Date: Mon, 22 Jul 2024 21:47:37 +0600
Subject: T6587: Raise an error when trying to get information about network
 interfaces that don't exist

---
 src/op_mode/interfaces.py | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/op_mode/interfaces.py b/src/op_mode/interfaces.py
index 50199eed5..e7afc4caa 100755
--- a/src/op_mode/interfaces.py
+++ b/src/op_mode/interfaces.py
@@ -445,12 +445,24 @@ def _format_show_counters(data: list):
     print (output)
     return output
 
+
+def _show_raw(data: list, intf_name: str):
+    if intf_name is not None and len(data) <= 1:
+        try:
+            return data[0]
+        except IndexError:
+            raise vyos.opmode.UnconfiguredObject(
+                f"Interface {intf_name} does not exist")
+    else:
+        return data
+
+
 def show(raw: bool, intf_name: typing.Optional[str],
                     intf_type: typing.Optional[str],
                     vif: bool, vrrp: bool):
     data = _get_raw_data(intf_name, intf_type, vif, vrrp)
     if raw:
-        return data
+        return _show_raw(data, intf_name)
     return _format_show_data(data)
 
 def show_summary(raw: bool, intf_name: typing.Optional[str],
@@ -458,10 +470,7 @@ def show_summary(raw: bool, intf_name: typing.Optional[str],
                             vif: bool, vrrp: bool):
     data = _get_summary_data(intf_name, intf_type, vif, vrrp)
     if raw:
-        if intf_name is not None and len(data) <= 1:
-            return data[0] if data else {}
-        else:
-            return data
+        return _show_raw(data, intf_name)
     return _format_show_summary(data)
 
 def show_summary_extended(raw: bool, intf_name: typing.Optional[str],
@@ -469,7 +478,7 @@ def show_summary_extended(raw: bool, intf_name: typing.Optional[str],
                             vif: bool, vrrp: bool):
     data = _get_summary_data(intf_name, intf_type, vif, vrrp)
     if raw:
-        return data
+        return _show_raw(data, intf_name)
     return _format_show_summary_extended(data)
 
 def show_counters(raw: bool, intf_name: typing.Optional[str],
@@ -477,7 +486,7 @@ def show_counters(raw: bool, intf_name: typing.Optional[str],
                              vif: bool, vrrp: bool):
     data = _get_counter_data(intf_name, intf_type, vif, vrrp)
     if raw:
-        return data
+        return _show_raw(data, intf_name)
     return _format_show_counters(data)
 
 def clear_counters(intf_name: typing.Optional[str],
-- 
cgit v1.2.3