summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/vyos/configdep.py7
-rw-r--r--python/vyos/system/grub.py16
-rwxr-xr-xsmoketest/scripts/cli/test_protocols_bgp.py18
3 files changed, 29 insertions, 12 deletions
diff --git a/python/vyos/configdep.py b/python/vyos/configdep.py
index 8a28811eb..64727d355 100644
--- a/python/vyos/configdep.py
+++ b/python/vyos/configdep.py
@@ -107,6 +107,13 @@ def call_dependents():
f = l.pop(0)
f()
+def called_as_dependent() -> bool:
+ st = stack()[1:]
+ for f in st:
+ if f.filename == __file__:
+ return True
+ return False
+
def graph_from_dependency_dict(d: dict) -> dict:
g = {}
for k in list(d):
diff --git a/python/vyos/system/grub.py b/python/vyos/system/grub.py
index 763ccf983..a94729964 100644
--- a/python/vyos/system/grub.py
+++ b/python/vyos/system/grub.py
@@ -21,7 +21,7 @@ from typing import Union
from uuid import uuid5, NAMESPACE_URL, UUID
from vyos.template import render
-from vyos.utils.process import cmd
+from vyos.utils.process import cmd, rc_cmd
from vyos.system import disk
# Define variables
@@ -139,14 +139,22 @@ def version_list(root_dir: str = '') -> list[str]:
Returns:
list: A list with versions names
+
+ N.B. coreutils stat reports st_birthtime, but not available in
+ Path.stat()/os.stat()
"""
if not root_dir:
root_dir = disk.find_persistence()
versions_files = Path(f'{root_dir}/{GRUB_DIR_VYOS_VERS}').glob('*.cfg')
- versions_list: list[str] = []
+ versions_order: dict[str, int] = {}
for file in versions_files:
- versions_list.append(file.stem)
- versions_list.sort(reverse=True)
+ p = Path(root_dir).joinpath('boot').joinpath(file.stem)
+ command = f'stat -c %W {p.as_posix()}'
+ rc, out = rc_cmd(command)
+ if rc == 0:
+ versions_order[file.stem] = int(out)
+ versions_order = sorted(versions_order, key=versions_order.get, reverse=True)
+ versions_list: list[str] = list(versions_order)
return versions_list
diff --git a/smoketest/scripts/cli/test_protocols_bgp.py b/smoketest/scripts/cli/test_protocols_bgp.py
index d8214db41..ebc9eeaaa 100755
--- a/smoketest/scripts/cli/test_protocols_bgp.py
+++ b/smoketest/scripts/cli/test_protocols_bgp.py
@@ -15,7 +15,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import unittest
-from subprocess import run
+
+from time import sleep
from base_vyostest_shim import VyOSUnitTestSHIM
@@ -23,6 +24,7 @@ from vyos.ifconfig import Section
from vyos.configsession import ConfigSessionError
from vyos.template import is_ipv6
from vyos.utils.process import process_named_running
+from vyos.utils.process import cmd
PROCESS_NAME = 'bgpd'
ASN = '64512'
@@ -1150,7 +1152,6 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):
self.assertIn(f' sid vpn per-vrf export {sid}', frrconfig)
def test_bgp_25_bmp(self):
- self.skipTest('Skipping for now - until GitHub builds work again - just a test')
target_name = 'instance-bmp'
target_address = '127.0.0.1'
target_port = '5000'
@@ -1161,13 +1162,10 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):
mirror_buffer = '32000000'
bmp_path = base_path + ['bmp']
target_path = bmp_path + ['target', target_name]
- bgpd_bmp_pid = process_named_running('bgpd', 'bmp')
- command = ['/opt/vyatta/bin/vyatta-op-cmd-wrapper', 'restart', 'bgp']
+ # by default the 'bmp' module not loaded for the bgpd expect Error
self.cli_set(bmp_path)
- # by default the 'bmp' module not loaded for the bgpd
- # expect Error
- if not bgpd_bmp_pid:
+ if not process_named_running('bgpd', 'bmp'):
with self.assertRaises(ConfigSessionError):
self.cli_commit()
@@ -1175,8 +1173,12 @@ class TestProtocolsBGP(VyOSUnitTestSHIM.TestCase):
self.cli_delete(bmp_path)
self.cli_set(['system', 'frr', 'bmp'])
self.cli_commit()
+
# restart bgpd to apply "-M bmp" and update PID
- run(command, input='Y', text=True)
+ cmd(f'sudo kill -9 {self.daemon_pid}')
+ # let the bgpd process recover
+ sleep(10)
+ # update daemon PID - this was a planned daemon restart
self.daemon_pid = process_named_running(PROCESS_NAME)
# set bmp config but not set address