diff options
Diffstat (limited to 'src/helpers/vyos-merge-config.py')
-rwxr-xr-x | src/helpers/vyos-merge-config.py | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/src/helpers/vyos-merge-config.py b/src/helpers/vyos-merge-config.py index 4879b0e9c..e8a696eb5 100755 --- a/src/helpers/vyos-merge-config.py +++ b/src/helpers/vyos-merge-config.py @@ -2,22 +2,27 @@ # Copyright VyOS maintainers and contributors <maintainers@vyos.io> # +# 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 library is distributed in the hope that it will be useful, +# 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 -# Lesser General Public License for more details. +# 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/>. +# # -# You should have received a copy of the GNU Lesser General Public -# License along with this library. If not, see <http://www.gnu.org/licenses/>. import os import sys import shlex import argparse +import tempfile -from vyos.defaults import directories -from vyos.remote import get_remote_config +from vyos.remote import get_config_file from vyos.config import Config from vyos.configtree import ConfigTree from vyos.configtree import mask_inclusive @@ -42,28 +47,19 @@ args = parser.parse_args() file_name = args.config_file paths = [shlex.split(s) for s in args.paths] if args.paths else [] -configdir = directories['config'] - -protocols = ['scp', 'sftp', 'http', 'https', 'ftp', 'tftp'] - -if any(file_name.startswith(f'{x}://') for x in protocols): - file_path = get_remote_config(file_name) - if not file_path: - sys.exit(f'No such file {file_name}') -else: - full_path = os.path.realpath(file_name) - if os.path.isfile(full_path): - file_path = full_path - else: - file_path = os.path.join(configdir, file_name) - if not os.path.isfile(file_path): - sys.exit(f'No such file {file_name}') +# pylint: disable=consider-using-with +file_path = tempfile.NamedTemporaryFile(delete=False).name +err = get_config_file(file_name, file_path) +if err: + os.remove(file_path) + sys.exit(err) if args.migrate: migrate = ConfigMigrate(file_path) try: migrate.run() except ConfigMigrateError as e: + os.remove(file_path) sys.exit(e) with open(file_path) as f: @@ -78,6 +74,9 @@ if paths: merge_ct = mask_inclusive(merge_ct, mask) +with open(file_path, 'w') as f: + f.write(merge_ct.to_string()) + config = Config() if config.vyconf_session is not None: @@ -85,6 +84,7 @@ if config.vyconf_session is not None: file_path, destructive=args.destructive ) if err: + os.remove(file_path) sys.exit(out) print(out) else: @@ -93,6 +93,7 @@ else: load_explicit(merge_res) +os.remove(file_path) if config.session_changed(): print("Merge complete. Use 'commit' to make changes effective.") |