diff options
| -rw-r--r-- | data/op-mode-standardized.json | 2 | ||||
| -rw-r--r-- | data/templates/frr/isisd.frr.j2 | 24 | ||||
| -rw-r--r-- | data/templates/high-availability/keepalived.conf.j2 | 4 | ||||
| -rw-r--r-- | data/templates/telegraf/override.conf.j2 | 3 | ||||
| -rw-r--r-- | interface-definitions/policy-local-route.xml.in | 2 | ||||
| -rw-r--r-- | op-mode-definitions/show-system.xml.in | 6 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_protocols_isis.py | 47 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/op_mode/route.py | 0 | ||||
| -rwxr-xr-x | src/op_mode/storage.py | 60 | ||||
| -rwxr-xr-x | src/op_mode/uptime.py (renamed from src/op_mode/show_uptime.py) | 36 | ||||
| -rwxr-xr-x | src/services/api/graphql/session/composite/system_status.py | 4 | 
11 files changed, 158 insertions, 30 deletions
| diff --git a/data/op-mode-standardized.json b/data/op-mode-standardized.json index db13eeb5a..2d6f6da41 100644 --- a/data/op-mode-standardized.json +++ b/data/op-mode-standardized.json @@ -9,6 +9,8 @@  "openconnect.py",  "route.py",  "ipsec.py", +"storage.py", +"uptime.py",  "version.py",  "vrf.py"  ] diff --git a/data/templates/frr/isisd.frr.j2 b/data/templates/frr/isisd.frr.j2 index 8e95348bc..709484c98 100644 --- a/data/templates/frr/isisd.frr.j2 +++ b/data/templates/frr/isisd.frr.j2 @@ -124,23 +124,23 @@ router isis VyOS {{ 'vrf ' + vrf if vrf is vyos_defined }}  {%         for prefix, prefix_config in segment_routing.prefix.items() %}  {%             if prefix_config.absolute is vyos_defined %}  {%                 if prefix_config.absolute.value is vyos_defined %} - segment-routing prefix {{ prefixes }} absolute {{ prefix_config.absolute.value }} + segment-routing prefix {{ prefix }} absolute {{ prefix_config.absolute.value }}  {%                     if prefix_config.absolute.explicit_null is vyos_defined %} - segment-routing prefix {{ prefixes }} absolute {{ prefix_config.absolute.value }} explicit-null + segment-routing prefix {{ prefix }} absolute {{ prefix_config.absolute.value }} explicit-null  {%                     endif %}  {%                     if prefix_config.absolute.no_php_flag is vyos_defined %} - segment-routing prefix {{ prefixes }} absolute {{ prefix_config.absolute.value }} no-php-flag + segment-routing prefix {{ prefix }} absolute {{ prefix_config.absolute.value }} no-php-flag  {%                     endif %}  {%                 endif %} -{%                 if prefix_config.index is vyos_defined %} -{%                     if prefix_config.index.value is vyos_defined %} - segment-routing prefix {{ prefixes }} index {{ prefix_config.index.value }} -{%                         if prefix_config.index.explicit_null is vyos_defined %} - segment-routing prefix {{ prefixes }} index {{ prefix_config.index.value }} explicit-null -{%                         endif %} -{%                         if prefix_config.index.no_php_flag is vyos_defined %} - segment-routing prefix {{ prefixes }} index {{ prefix_config.index.value }} no-php-flag -{%                         endif %} +{%             endif %} +{%             if prefix_config.index is vyos_defined %} +{%                 if prefix_config.index.value is vyos_defined %} + segment-routing prefix {{ prefix }} index {{ prefix_config.index.value }} +{%                     if prefix_config.index.explicit_null is vyos_defined %} + segment-routing prefix {{ prefix }} index {{ prefix_config.index.value }} explicit-null +{%                     endif %} +{%                     if prefix_config.index.no_php_flag is vyos_defined %} + segment-routing prefix {{ prefix }} index {{ prefix_config.index.value }} no-php-flag  {%                     endif %}  {%                 endif %}  {%             endif %} diff --git a/data/templates/high-availability/keepalived.conf.j2 b/data/templates/high-availability/keepalived.conf.j2 index 6684dbc2c..706e1c5ae 100644 --- a/data/templates/high-availability/keepalived.conf.j2 +++ b/data/templates/high-availability/keepalived.conf.j2 @@ -47,10 +47,10 @@ vrrp_instance {{ name }} {  {%             endif %}  {%         endif %}  {%         if group_config.rfc3768_compatibility is vyos_defined and group_config.peer_address is vyos_defined %} -    use_vmac {{ group_config.interface }}v{{ group_config.vrid }} +    use_vmac {{ group_config.interface }}v{{ group_config.vrid }}v{{ '4' if group_config['address'] | first | is_ipv4 else '6' }}      vmac_xmit_base  {%         elif group_config.rfc3768_compatibility is vyos_defined %} -    use_vmac {{ group_config.interface }}v{{ group_config.vrid }} +    use_vmac {{ group_config.interface }}v{{ group_config.vrid }}v{{ '4' if group_config['address'] | first | is_ipv4 else '6' }}  {%         endif %}  {%         if group_config.authentication is vyos_defined %}      authentication { diff --git a/data/templates/telegraf/override.conf.j2 b/data/templates/telegraf/override.conf.j2 index d30bb19de..7e3e4aaf5 100644 --- a/data/templates/telegraf/override.conf.j2 +++ b/data/templates/telegraf/override.conf.j2 @@ -12,4 +12,5 @@ EnvironmentFile=  Environment=INFLUX_TOKEN={{ influxdb.authentication.token }}  CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN CAP_SYS_ADMIN CAP_BPF CAP_DAC_OVERRIDE  AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN - +Restart=always +RestartSec=10 diff --git a/interface-definitions/policy-local-route.xml.in b/interface-definitions/policy-local-route.xml.in index d969613b1..8619e839e 100644 --- a/interface-definitions/policy-local-route.xml.in +++ b/interface-definitions/policy-local-route.xml.in @@ -6,6 +6,7 @@        <node name="local-route" owner="${vyos_conf_scripts_dir}/policy-local-route.py">          <properties>            <help>IPv4 policy route of local traffic</help> +          <priority>500</priority>          </properties>          <children>            <tagNode name="rule"> @@ -96,6 +97,7 @@        <node name="local-route6" owner="${vyos_conf_scripts_dir}/policy-local-route.py">          <properties>            <help>IPv6 policy route of local traffic</help> +          <priority>500</priority>          </properties>          <children>            <tagNode name="rule"> diff --git a/op-mode-definitions/show-system.xml.in b/op-mode-definitions/show-system.xml.in index 60ed28b6f..bd32992aa 100644 --- a/op-mode-definitions/show-system.xml.in +++ b/op-mode-definitions/show-system.xml.in @@ -142,7 +142,7 @@                  <properties>                    <help>Show summary of system processes</help>                  </properties> -                <command>${vyos_op_scripts_dir}/show_uptime.py</command> +                <command>${vyos_op_scripts_dir}/uptime.py show</command>                </leafNode>                <leafNode name="tree">                  <properties> @@ -162,13 +162,13 @@              <properties>                <help>Show filesystem usage</help>              </properties> -            <command>df -h -x squashfs</command> +            <command>${vyos_op_scripts_dir}/storage.py show</command>            </leafNode>            <leafNode name="uptime">              <properties>                <help>Show system uptime and load averages</help>              </properties> -            <command>${vyos_op_scripts_dir}/show_uptime.py</command> +            <command>${vyos_op_scripts_dir}/uptime.py show</command>            </leafNode>          </children>        </node> diff --git a/smoketest/scripts/cli/test_protocols_isis.py b/smoketest/scripts/cli/test_protocols_isis.py index ee4be0b37..e4bb9e1f8 100755 --- a/smoketest/scripts/cli/test_protocols_isis.py +++ b/smoketest/scripts/cli/test_protocols_isis.py @@ -262,5 +262,52 @@ class TestProtocolsISIS(VyOSUnitTestSHIM.TestCase):              self.assertIn(f' isis bfd', tmp)              self.assertIn(f' isis bfd profile {bfd_profile}', tmp) +    def test_isis_07_segment_routing_configuration(self): +        global_block_low = "1000" +        global_block_high = "1999" +        local_block_low = "2000" +        local_block_high = "2999" +        interface = 'lo' +        maximum_stack_size = '5' +        prefix_one = '192.168.0.1/32' +        prefix_two = '192.168.0.2/32' +        prefix_three = '192.168.0.3/32' +        prefix_four = '192.168.0.4/32' +        prefix_one_value = '1' +        prefix_two_value = '2' +        prefix_three_value = '60000' +        prefix_four_value = '65000' + +        self.cli_set(base_path + ['net', net]) +        self.cli_set(base_path + ['interface', interface]) +        self.cli_set(base_path + ['segment-routing', 'enable']) +        self.cli_set(base_path + ['segment-routing', 'maximum-label-depth', maximum_stack_size]) +        self.cli_set(base_path + ['segment-routing', 'global-block', 'low-label-value', global_block_low]) +        self.cli_set(base_path + ['segment-routing', 'global-block', 'high-label-value', global_block_high]) +        self.cli_set(base_path + ['segment-routing', 'local-block', 'low-label-value', local_block_low]) +        self.cli_set(base_path + ['segment-routing', 'local-block', 'high-label-value', local_block_high]) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_one, 'index', 'value', prefix_one_value]) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_one, 'index', 'explicit-null']) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_two, 'index', 'value', prefix_two_value]) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_two, 'index', 'no-php-flag']) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_three, 'absolute', 'value',  prefix_three_value]) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_three, 'absolute', 'explicit-null']) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_four, 'absolute', 'value', prefix_four_value]) +        self.cli_set(base_path + ['segment-routing', 'prefix', prefix_four, 'absolute', 'no-php-flag']) +         +        # Commit all changes +        self.cli_commit() + +        # Verify all changes +        tmp = self.getFRRconfig(f'router isis {domain}', daemon='isisd') +        self.assertIn(f' net {net}', tmp) +        self.assertIn(f' segment-routing on', tmp) +        self.assertIn(f' segment-routing global-block {global_block_low} {global_block_high} local-block {local_block_low} {local_block_high}', tmp) +        self.assertIn(f' segment-routing node-msd {maximum_stack_size}', tmp) +        self.assertIn(f' segment-routing prefix {prefix_one} index {prefix_one_value} explicit-null', tmp) +        self.assertIn(f' segment-routing prefix {prefix_two} index {prefix_two_value} no-php-flag', tmp) +        self.assertIn(f' segment-routing prefix {prefix_three} absolute {prefix_three_value} explicit-null', tmp) +        self.assertIn(f' segment-routing prefix {prefix_four} absolute {prefix_four_value} no-php-flag', tmp) +  if __name__ == '__main__':      unittest.main(verbosity=2) diff --git a/src/op_mode/route.py b/src/op_mode/route.py index e1eee5bbf..e1eee5bbf 100644..100755 --- a/src/op_mode/route.py +++ b/src/op_mode/route.py diff --git a/src/op_mode/storage.py b/src/op_mode/storage.py new file mode 100755 index 000000000..75964c493 --- /dev/null +++ b/src/op_mode/storage.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 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 +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +import sys + +import vyos.opmode +from vyos.util import cmd + + +def _get_system_storage(only_persistent=False): +    if not only_persistent: +        cmd_str = 'df -h -x squashf' +    else: +        cmd_str = 'df -h -t ext4 --output=source,size,used,avail,pcent' + +    res = cmd(cmd_str) + +    return res + +def _get_raw_data(): +    out =  _get_system_storage(only_persistent=True) +    lines = out.splitlines() +    lists = [l.split() for l in lines] +    res = {lists[0][i]: lists[1][i] for i in range(len(lists[0]))} + +    return res + +def _get_formatted_output(): +    return _get_system_storage() + +def show(raw: bool): +    if raw: +        return _get_raw_data() + +    return _get_formatted_output() + + +if __name__ == '__main__': +    try: +        res = vyos.opmode.run(sys.modules[__name__]) +        if res: +            print(res) +    except (ValueError, vyos.opmode.Error) as e: +        print(e) +        sys.exit(1) + diff --git a/src/op_mode/show_uptime.py b/src/op_mode/uptime.py index b70c60cf8..2ebe6783b 100755 --- a/src/op_mode/show_uptime.py +++ b/src/op_mode/uptime.py @@ -14,7 +14,11 @@  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. -def get_uptime_seconds(): +import sys + +import vyos.opmode + +def _get_uptime_seconds():    from re import search    from vyos.util import read_file @@ -23,7 +27,7 @@ def get_uptime_seconds():    return int(float(seconds)) -def get_load_averages(): +def _get_load_averages():      from re import search      from vyos.util import cmd      from vyos.cpu import get_core_count @@ -40,19 +44,17 @@ def get_load_averages():      return res -def get_raw_data(): +def _get_raw_data():      from vyos.util import seconds_to_human      res = {} -    res["uptime_seconds"] = get_uptime_seconds() -    res["uptime"] = seconds_to_human(get_uptime_seconds()) -    res["load_average"] = get_load_averages() +    res["uptime_seconds"] = _get_uptime_seconds() +    res["uptime"] = seconds_to_human(_get_uptime_seconds()) +    res["load_average"] = _get_load_averages()      return res -def get_formatted_output(): -    data = get_raw_data() - +def _get_formatted_output(data):      out = "Uptime: {}\n\n".format(data["uptime"])      avgs = data["load_average"]      out += "Load averages:\n" @@ -62,5 +64,19 @@ def get_formatted_output():      return out +def show(raw: bool): +    uptime_data = _get_raw_data() + +    if raw: +        return uptime_data +    else: +        return _get_formatted_output(uptime_data) +  if __name__ == '__main__': -    print(get_formatted_output()) +    try: +        res = vyos.opmode.run(sys.modules[__name__]) +        if res: +            print(res) +    except (ValueError, vyos.opmode.Error) as e: +        print(e) +        sys.exit(1) diff --git a/src/services/api/graphql/session/composite/system_status.py b/src/services/api/graphql/session/composite/system_status.py index 8dadcc9f3..3c1a3d45b 100755 --- a/src/services/api/graphql/session/composite/system_status.py +++ b/src/services/api/graphql/session/composite/system_status.py @@ -30,8 +30,8 @@ def get_system_version() -> dict:      return show_version.show(raw=True, funny=False)  def get_system_uptime() -> dict: -    show_uptime = load_op_mode_as_module('show_uptime.py') -    return show_uptime.get_raw_data() +    show_uptime = load_op_mode_as_module('uptime.py') +    return show_uptime._get_raw_data()  def get_system_ram_usage() -> dict:      show_ram = load_op_mode_as_module('memory.py') | 
