diff options
| author | Daniil Baturin <daniil@vyos.io> | 2025-08-14 15:09:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-14 15:09:34 +0100 |
| commit | 4c8f5f0e0b7ab090e7bbba1c73f1dc17b5311a55 (patch) | |
| tree | 66e6a2f4f47304ba5db6d670f51621d380ddc073 /src | |
| parent | 471441d9d6541401c5236399da0b7a56a7dd0ead (diff) | |
| parent | c140f827f3117609908a3a18034027d3d78149ac (diff) | |
| download | vyos-1x-4c8f5f0e0b7ab090e7bbba1c73f1dc17b5311a55.tar.gz vyos-1x-4c8f5f0e0b7ab090e7bbba1c73f1dc17b5311a55.zip | |
Merge pull request #4657 from jestabro/sync-config-on-save
T7709: add explicit sync and atomic write on config file save
Diffstat (limited to 'src')
| -rwxr-xr-x | src/helpers/vyos-save-config.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/helpers/vyos-save-config.py b/src/helpers/vyos-save-config.py index adf62b71d..fa1f5625d 100755 --- a/src/helpers/vyos-save-config.py +++ b/src/helpers/vyos-save-config.py @@ -23,15 +23,18 @@ from argparse import ArgumentParser from vyos.config import Config from vyos.remote import urlc -from vyos.component_version import add_system_version +from vyos.component_version import add_system_version_string from vyos.defaults import directories +from vyos.utils.file import write_file_atomic DEFAULT_CONFIG_PATH = os.path.join(directories['config'], 'config.boot') remote_save = None parser = ArgumentParser(description='Save configuration') parser.add_argument('file', type=str, nargs='?', help='Save configuration to file') -parser.add_argument('--write-json-file', type=str, help='Save JSON of configuration to file') +parser.add_argument( + '--write-json-file', type=str, help='Save JSON of configuration to file' +) args = parser.parse_args() file = args.file json_file = args.write_json_file @@ -56,7 +59,14 @@ write_file = save_file if remote_save is None else NamedTemporaryFile(delete=Fal # config_tree is None before boot configuration is complete; # automated saves should check boot_configuration_complete config_str = None if ct is None else ct.to_string() -add_system_version(config_str, write_file) +versioned_config_str = add_system_version_string(config_str) + +try: + with write_file_atomic(write_file) as f: + f.write(versioned_config_str) +except OSError as e: + print(f'failed to write config file: {e}') + sys.exit(1) if json_file is not None and ct is not None: try: |
