diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2024-03-14 13:32:00 +0000 | 
|---|---|---|
| committer | Viacheslav Hletenko <v.gletenko@vyos.io> | 2024-03-15 11:56:16 +0000 | 
| commit | 25b611f504521181f85cb4460bfdfd702c377b5e (patch) | |
| tree | 7f3cb877470048209c4f8fca8d70051133349433 /src | |
| parent | 7fb112d409af83185ea9635aa6c775b02bc28c43 (diff) | |
| download | vyos-1x-25b611f504521181f85cb4460bfdfd702c377b5e.tar.gz vyos-1x-25b611f504521181f85cb4460bfdfd702c377b5e.zip | |
T6121: Extend service config-sync to new sections
Extend `service config-sync` with new sections:
 - LeafNodes: pki, policy, vpn, vrf (syncs the whole sections)
 - Nodes: interfaces, protocols, service (syncs subsections)
In this cae the Node allows to uses the next level section
i.e subsection
For example any of the subsection of the node `interfaces`:
  - set service config-sync section interfaces pseudo-ethernet
  - set service config-sync section interfaces virtual-ethernet
Example of the config:
```
set service config-sync mode 'load'
set service config-sync secondary address '192.0.2.1'
set service config-sync secondary key 'xxx'
set service config-sync section firewall
set service config-sync section interfaces pseudo-ethernet
set service config-sync section interfaces virtual-ethernet
set service config-sync section nat
set service config-sync section nat66
set service config-sync section protocols static
set service config-sync section pki
set service config-sync section vrf
```
Diffstat (limited to 'src')
| -rwxr-xr-x | src/helpers/vyos_config_sync.py | 26 | 
1 files changed, 17 insertions, 9 deletions
| diff --git a/src/helpers/vyos_config_sync.py b/src/helpers/vyos_config_sync.py index 7cfa8fe88..572fea61f 100755 --- a/src/helpers/vyos_config_sync.py +++ b/src/helpers/vyos_config_sync.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2023 VyOS maintainers and contributors +# Copyright (C) 2023-2024 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 @@ -60,6 +60,7 @@ def post_request(url: str,      return response +  def retrieve_config(section: str = None) -> Optional[Dict[str, Any]]:      """Retrieves the configuration from the local server. @@ -71,8 +72,6 @@ def retrieve_config(section: str = None) -> Optional[Dict[str, Any]]:      """      if section is None:          section = [] -    else: -        section = section.split()      conf = Config()      config = conf.get_config_dict(section, get_first_key=True) @@ -101,8 +100,6 @@ def set_remote_config(      if path is None:          path = [] -    else: -        path = path.split()      headers = {'Content-Type': 'application/json'}      # Disable the InsecureRequestWarning @@ -127,17 +124,16 @@ def set_remote_config(  def is_section_revised(section: str) -> bool:      from vyos.config_mgmt import is_node_revised -    return is_node_revised([section]) +    return is_node_revised(section)  def config_sync(secondary_address: str,                  secondary_key: str, -                sections: List[str], +                sections: List[list],                  mode: str):      """Retrieve a config section from primary router in JSON format and send it to         secondary router      """ -    # Config sync only if sections changed      if not any(map(is_section_revised, sections)):          return @@ -188,5 +184,17 @@ if __name__ == '__main__':              "Missing required configuration data for config synchronization.")          exit(0) +    # Generate list_sections of sections/subsections +    # [ +    #   ['interfaces', 'pseudo-ethernet'], ['interfaces', 'virtual-ethernet'], ['nat'], ['nat66'] +    # ] +    list_sections = [] +    for section, subsections in sections.items(): +        if subsections: +            for subsection in subsections: +                list_sections.append([section, subsection]) +        else: +            list_sections.append([section]) +      config_sync(secondary_address, secondary_key, -                sections, mode) +                list_sections, mode) | 
