summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-06-26 09:17:52 +0200
committerChristian Poessinger <christian@poessinger.com>2021-06-26 09:17:55 +0200
commit5303ec39f6f08ccf06f56ff6d5166fc572b2c735 (patch)
tree32a56b3339309972a2d91147b08b867712dd013c
parent8108ca69e7d877f2af37bfce8c05a6054ed32775 (diff)
downloadvyos-1x-5303ec39f6f08ccf06f56ff6d5166fc572b2c735.tar.gz
vyos-1x-5303ec39f6f08ccf06f56ff6d5166fc572b2c735.zip
vyos.util: add new helper copy_file()
Copy a file from A -> B but also support adjusting Bs file permissions and creation of Bs base directory if required.
-rw-r--r--python/vyos/util.py13
-rw-r--r--src/tests/test_util.py10
2 files changed, 21 insertions, 2 deletions
diff --git a/python/vyos/util.py b/python/vyos/util.py
index 7fea6cdc6..c318d58de 100644
--- a/python/vyos/util.py
+++ b/python/vyos/util.py
@@ -221,6 +221,19 @@ def write_file(fname, data, defaultonfailure=None, user=None, group=None):
return defaultonfailure
raise e
+def copy_file(source, destination, mkdstdir=False, user=None, group=None):
+ """
+ Copy file from source to destination. Can optionally create the destination
+ dir if it does not exist. Can optionally change the dir and file ownership.
+ """
+ import shutil
+ if mkdstdir:
+ dirname = os.path.dirname(destination)
+ if not os.path.isdir(dirname):
+ makedir(dirname, user, group)
+
+ shutil.copyfile(source, destination)
+ chown(destination, user, group)
def read_json(fname, defaultonfailure=None):
"""
diff --git a/src/tests/test_util.py b/src/tests/test_util.py
index 22bc085c5..1efd4868f 100644
--- a/src/tests/test_util.py
+++ b/src/tests/test_util.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2020 VyOS maintainers and contributors
+# Copyright (C) 2020-2021 VyOS maintainers and contributors
#
# 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
@@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from unittest import TestCase
-from vyos.util import mangle_dict_keys
+from vyos.util import *
class TestVyOSUtil(TestCase):
def test_key_mangline(self):
@@ -24,3 +24,9 @@ class TestVyOSUtil(TestCase):
new_data = mangle_dict_keys(data, '-', '_')
self.assertEqual(new_data, expected_data)
+ def test_copy_file(self):
+ source = '/proc/cmdline'
+ destination = '/tmp/foo/cmdline'
+ copy_file(source, destination, True)
+ self.assertEqual(read_file(source), read_file(destination))
+