summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2025-08-28 10:38:05 +0100
committerGitHub <noreply@github.com>2025-08-28 10:38:05 +0100
commit380b7c50cf5ed05eed79b699cf12cd8a4d455fdb (patch)
tree1d34cb9f96d413343062f441a666dd643e309c9d
parentadb3e06fc90e092d414be19240c490a92aad7c3f (diff)
parent9f80e374f67282d5f6662acc8aec70eba0b040de (diff)
downloadvyos-1x-380b7c50cf5ed05eed79b699cf12cd8a4d455fdb.tar.gz
vyos-1x-380b7c50cf5ed05eed79b699cf12cd8a4d455fdb.zip
Merge pull request #4683 from jestabro/revert-config-save-atomic
T7759: Revert "T7709: add atomic write for config file save"
-rw-r--r--python/vyos/component_version.py10
-rw-r--r--python/vyos/utils/file.py36
-rwxr-xr-xsrc/helpers/vyos-save-config.py16
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: