From d9003d137558ac460d0c349c3d083d59a40d666b Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 26 Jan 2017 15:15:40 -0500 Subject: [PATCH 1/2] Make sure the parent dir of a file path exists before writing the file Fixes when the `extra_ca_certs` directory doesn't exist when using the new custom certs tool --- util/config/provider/fileprovider.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/util/config/provider/fileprovider.py b/util/config/provider/fileprovider.py index b2cd57eba..fdaf860b0 100644 --- a/util/config/provider/fileprovider.py +++ b/util/config/provider/fileprovider.py @@ -6,6 +6,16 @@ from util.config.provider.baseprovider import (BaseProvider, import_yaml, export logger = logging.getLogger(__name__) +def _ensure_parent_dir(filepath): + """ Ensures that the parent directory of the given file path exists. """ + try: + parentpath = os.path.abspath(os.path.join(filepath, os.pardir)) + if not os.path.isdir(parentpath): + os.makedirs(parentpath) + except IOError as ioe: + raise CannotWriteConfigException(str(ioe)) + + class FileConfigProvider(BaseProvider): """ Implementation of the config provider that reads the data from the file system. """ def __init__(self, config_volume, yaml_filename, py_filename): @@ -54,8 +64,13 @@ class FileConfigProvider(BaseProvider): def write_volume_file(self, filename, contents): filepath = os.path.join(self.config_volume, filename) - with open(filepath, mode='w') as f: - f.write(contents) + _ensure_parent_dir(filepath) + + try: + with open(filepath, mode='w') as f: + f.write(contents) + except IOError as ioe: + raise CannotWriteConfigException(str(ioe)) return filepath @@ -75,6 +90,9 @@ class FileConfigProvider(BaseProvider): def save_volume_file(self, filename, flask_file): filepath = os.path.join(self.config_volume, filename) + _ensure_parent_dir(filepath) + + # Write the file. try: flask_file.save(filepath) except IOError as ioe: From 3d09d64421d1d2a99ac2660293d37b5db15ea8b6 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 26 Jan 2017 15:17:18 -0500 Subject: [PATCH 2/2] Make certs_install not fail if the extra_ca_certs dir is empty Stupid `cp` will fail if the source dir is empty --- conf/init/certs_install.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/init/certs_install.sh b/conf/init/certs_install.sh index 438d9c669..2ae929ac0 100755 --- a/conf/init/certs_install.sh +++ b/conf/init/certs_install.sh @@ -9,9 +9,11 @@ fi # Add extra trusted certificates (as a directory) if [ -d /conf/stack/extra_ca_certs ]; then - echo "Installing extra certificates found in /conf/stack/extra_ca_certs directory" - cp /conf/stack/extra_ca_certs/* /usr/local/share/ca-certificates/ - cat /conf/stack/extra_ca_certs/* >> /venv/lib/python2.7/site-packages/requests/cacert.pem + if test $(ls -A "/conf/stack/extra_ca_certs"); then + echo "Installing extra certificates found in /conf/stack/extra_ca_certs directory" + cp /conf/stack/extra_ca_certs/* /usr/local/share/ca-certificates/ + cat /conf/stack/extra_ca_certs/* >> /venv/lib/python2.7/site-packages/requests/cacert.pem + fi fi # Add extra trusted certificates (as a file)