diff options
| author | John Estabrook <jestabro@vyos.io> | 2025-08-27 13:10:27 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2025-08-27 13:10:27 -0500 |
| commit | 9f80e374f67282d5f6662acc8aec70eba0b040de (patch) | |
| tree | 1d34cb9f96d413343062f441a666dd643e309c9d | |
| parent | adb3e06fc90e092d414be19240c490a92aad7c3f (diff) | |
| download | vyos-1x-9f80e374f67282d5f6662acc8aec70eba0b040de.tar.gz vyos-1x-9f80e374f67282d5f6662acc8aec70eba0b040de.zip | |
T7759: Revert "T7709: add atomic write for config file save"
The utility write_file_atomic does not correctly update the file in the
bind mount directory /config. Revert for investigation.
This reverts commit c140f827f3117609908a3a18034027d3d78149ac.
| -rw-r--r-- | python/vyos/component_version.py | 10 | ||||
| -rw-r--r-- | python/vyos/utils/file.py | 36 | ||||
| -rwxr-xr-x | src/helpers/vyos-save-config.py | 16 |
3 files changed, 3 insertions, 59 deletions
diff --git a/python/vyos/component_version.py b/python/vyos/component_version.py index 13fb8333f..136bd36e8 100644 --- a/python/vyos/component_version.py +++ b/python/vyos/component_version.py @@ -209,16 +209,6 @@ def version_info_prune_component(x: VersionInfo, y: VersionInfo) -> VersionInfo: x.component = {k: v for k, v in x.component.items() if k in y.component} -def add_system_version_string(config_str: str = None) -> str: - """Wrap config string with system version and return string.""" - version_info = version_info_from_system() - if config_str is not None: - version_info.update_config_body(config_str) - version_info.update_footer() - - return version_info.write_string() - - def add_system_version(config_str: str = None, out_file: str = None): """Wrap config string with system version and write to out_file. diff --git a/python/vyos/utils/file.py b/python/vyos/utils/file.py index c363b5bdc..1e2de2b39 100644 --- a/python/vyos/utils/file.py +++ b/python/vyos/utils/file.py @@ -14,9 +14,6 @@ # License along with this library. If not, see <http://www.gnu.org/licenses/>. import os -import tempfile -from contextlib import contextmanager - from vyos.utils.permission import chown def makedir(path, user=None, group=None): @@ -188,36 +185,3 @@ def wait_for_file_write_complete(file_path, pre_hook=None, timeout=None, sleep_i """ Waits for a process to close a file after opening it in write mode. """ wait_for_inotify(file_path, event_type='IN_CLOSE_WRITE', pre_hook=pre_hook, timeout=timeout, sleep_interval=sleep_interval) - -def copy_chown(source, target): - import shutil - import stat - - shutil.copy2(source, target) - st = os.stat(source) - os.chown(target, st[stat.ST_UID], st[stat.ST_GID]) - - -@contextmanager -def write_file_atomic(file_path, mode='w'): - with open(file_path, mode) as _: - pass - temp_file = tempfile.NamedTemporaryFile( - delete=False, dir=os.path.dirname(file_path) - ) - if os.path.exists(file_path): - copy_chown(file_path, temp_file.name) - - file = open(temp_file.name, mode) - try: - yield file - finally: - file.flush() - os.fsync(file.fileno()) - file.close() - os.replace(temp_file.name, file_path) - if os.path.exists(temp_file.name): - try: - os.unlink(temp_file.name) - except Exception: - pass diff --git a/src/helpers/vyos-save-config.py b/src/helpers/vyos-save-config.py index fa1f5625d..adf62b71d 100755 --- a/src/helpers/vyos-save-config.py +++ b/src/helpers/vyos-save-config.py @@ -23,18 +23,15 @@ from argparse import ArgumentParser from vyos.config import Config from vyos.remote import urlc -from vyos.component_version import add_system_version_string +from vyos.component_version import add_system_version 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 @@ -59,14 +56,7 @@ 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() -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) +add_system_version(config_str, write_file) if json_file is not None and ct is not None: try: |
