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) 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: