diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/high-availability.py | 20 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces-dummy.py | 4 | ||||
| -rw-r--r-- | src/etc/systemd/system/keepalived.service.d/override.conf | 14 | ||||
| -rwxr-xr-x | src/helpers/vyos-save-config.py | 5 | 
4 files changed, 24 insertions, 19 deletions
| diff --git a/src/conf_mode/high-availability.py b/src/conf_mode/high-availability.py index 0121df11c..70f43ab52 100755 --- a/src/conf_mode/high-availability.py +++ b/src/conf_mode/high-availability.py @@ -15,6 +15,7 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>. +import os  import time  from sys import exit @@ -24,6 +25,7 @@ from ipaddress import IPv6Interface  from vyos.base import Warning  from vyos.config import Config +from vyos.configdict import leaf_node_changed  from vyos.ifconfig.vrrp import VRRP  from vyos.template import render  from vyos.template import is_ipv4 @@ -35,6 +37,9 @@ from vyos import airbag  airbag.enable() +systemd_override = r'/run/systemd/system/keepalived.service.d/10-override.conf' + +  def get_config(config=None):      if config:          conf = config @@ -54,6 +59,9 @@ def get_config(config=None):      if conf.exists(conntrack_path):          ha['conntrack_sync_group'] = conf.return_value(conntrack_path) +    if leaf_node_changed(conf, base + ['vrrp', 'disable-snmp']): +        ha.update({'restart_required': {}}) +      return ha  def verify(ha): @@ -164,19 +172,23 @@ def verify(ha):  def generate(ha):      if not ha or 'disable' in ha: +        if os.path.isfile(systemd_override): +            os.unlink(systemd_override)          return None      render(VRRP.location['config'], 'high-availability/keepalived.conf.j2', ha) +    render(systemd_override, 'high-availability/10-override.conf.j2', ha)      return None  def apply(ha):      service_name = 'keepalived.service' +    call('systemctl daemon-reload')      if not ha or 'disable' in ha:          call(f'systemctl stop {service_name}')          return None      # Check if IPv6 address is tentative T5533 -    for group, group_config in ha['vrrp']['group'].items(): +    for group, group_config in ha.get('vrrp', {}).get('group', {}).items():          if 'hello_source_address' in group_config:              if is_ipv6(group_config['hello_source_address']):                  ipv6_address = group_config['hello_source_address'] @@ -187,7 +199,11 @@ def apply(ha):                      if is_ipv6_tentative(interface, ipv6_address):                          time.sleep(interval) -    call(f'systemctl reload-or-restart {service_name}') +    systemd_action = 'reload-or-restart' +    if 'restart_required' in ha: +        systemd_action = 'restart' + +    call(f'systemctl {systemd_action} {service_name}')      return None  if __name__ == '__main__': diff --git a/src/conf_mode/interfaces-dummy.py b/src/conf_mode/interfaces-dummy.py index e771581e1..db768b94d 100755 --- a/src/conf_mode/interfaces-dummy.py +++ b/src/conf_mode/interfaces-dummy.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2021 VyOS maintainers and contributors +# Copyright (C) 2019-2023 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 @@ -55,7 +55,7 @@ def generate(dummy):      return None  def apply(dummy): -    d = DummyIf(dummy['ifname']) +    d = DummyIf(**dummy)      # Remove dummy interface      if 'deleted' in dummy: diff --git a/src/etc/systemd/system/keepalived.service.d/override.conf b/src/etc/systemd/system/keepalived.service.d/override.conf deleted file mode 100644 index d91a824b9..000000000 --- a/src/etc/systemd/system/keepalived.service.d/override.conf +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -After=vyos-router.service -# Only start if there is our configuration file - remove Debian default -# config file from the condition list -ConditionFileNotEmpty= -ConditionFileNotEmpty=/run/keepalived/keepalived.conf - -[Service] -KillMode=process -Type=simple -# Read configuration variable file if it is present -ExecStart= -ExecStart=/usr/sbin/keepalived --use-file /run/keepalived/keepalived.conf --pid /run/keepalived/keepalived.pid --dont-fork --snmp -PIDFile=/run/keepalived/keepalived.pid diff --git a/src/helpers/vyos-save-config.py b/src/helpers/vyos-save-config.py index 2812155e8..8af4a7916 100755 --- a/src/helpers/vyos-save-config.py +++ b/src/helpers/vyos-save-config.py @@ -44,7 +44,10 @@ ct = config.get_config_tree(effective=True)  write_file = save_file if remote_save is None else NamedTemporaryFile(delete=False).name  with open(write_file, 'w') as f: -    f.write(ct.to_string()) +    # config_tree is None before boot configuration is complete; +    # automated saves should check boot_configuration_complete +    if ct is not None: +        f.write(ct.to_string())      f.write("\n")      f.write(system_footer()) | 
