# Copyright 2023-2024 VyOS maintainers and contributors # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library. If not, see . # T5708: # - migrate "service dns dynamic timeout ..." # to "service dns dynamic interval ..." # - remove "service dns dynamic address web-options ..." when != "web" # - migrate "service dns dynamic address service protocol dnsexit" # to "service dns dynamic address service protocol dnsexit2" # T6950: # - add if statement to prevent processing of "service dns dynamic address" options if they don't exist # due to the fact they are no longer valid syntax from vyos.configtree import ConfigTree base_path = ['service', 'dns', 'dynamic'] timeout_path = base_path + ['timeout'] address_path = base_path + ['address'] def migrate(config: ConfigTree) -> None: if not config.exists(base_path): # Nothing to do return # Migrate "service dns dynamic timeout ..." # to "service dns dynamic interval ..." if config.exists(timeout_path): config.rename(timeout_path, 'interval') # T6950: Can't migrate address if it doesn't exist if config.exists(address_path): # Remove "service dns dynamic address web-options ..." when != "web" for address in config.list_nodes(address_path): if config.exists(address_path + [address, 'web-options']) and address != 'web': config.delete(address_path + [address, 'web-options']) # Migrate "service dns dynamic address service protocol dnsexit" # to "service dns dynamic address service protocol dnsexit2" for address in config.list_nodes(address_path): for svc_cfg in config.list_nodes(address_path + [address, 'service']): if config.exists(address_path + [address, 'service', svc_cfg, 'protocol']): protocol = config.return_value(address_path + [address, 'service', svc_cfg, 'protocol']) if protocol == 'dnsexit': config.set(address_path + [address, 'service', svc_cfg, 'protocol'], 'dnsexit2')