Fix Kubernetes config provider for recent changes in Kub API

Kubernetes secret volumes are now mounted as read-only, so we have to write the files *only* via the Kub API

Fixes https://jira.coreos.com/browse/QUAY-911
This commit is contained in:
Joseph Schorr 2018-04-06 17:23:50 -04:00
parent 8d5e8fc685
commit e20295f573
7 changed files with 153 additions and 109 deletions

View file

@ -1,6 +1,9 @@
import logging
import yaml
from abc import ABCMeta, abstractmethod
from six import add_metaclass
from jsonschema import validate, ValidationError
from util.config.schema import CONFIG_SCHEMA
@ -56,6 +59,7 @@ def export_yaml(config_obj, config_file):
raise CannotWriteConfigException(str(ioe))
@add_metaclass(ABCMeta)
class BaseProvider(object):
""" A configuration provider helps to load, save, and handle config override in the application.
"""
@ -64,61 +68,61 @@ class BaseProvider(object):
def provider_id(self):
raise NotImplementedError
@abstractmethod
def update_app_config(self, app_config):
""" Updates the given application config object with the loaded override config. """
raise NotImplementedError
@abstractmethod
def get_config(self):
""" Returns the contents of the config override file, or None if none. """
raise NotImplementedError
@abstractmethod
def save_config(self, config_object):
""" Updates the contents of the config override file to those given. """
raise NotImplementedError
@abstractmethod
def config_exists(self):
""" Returns true if a config override file exists in the config volume. """
raise NotImplementedError
@abstractmethod
def volume_exists(self):
""" Returns whether the config override volume exists. """
raise NotImplementedError
@abstractmethod
def volume_file_exists(self, filename):
""" Returns whether the file with the given name exists under the config override volume. """
raise NotImplementedError
@abstractmethod
def get_volume_file(self, filename, mode='r'):
""" Returns a Python file referring to the given name under the config override volume. """
raise NotImplementedError
@abstractmethod
def write_volume_file(self, filename, contents):
""" Writes the given contents to the config override volumne, with the given filename. """
raise NotImplementedError
@abstractmethod
def remove_volume_file(self, filename):
""" Removes the config override volume file with the given filename. """
raise NotImplementedError
@abstractmethod
def list_volume_directory(self, path):
""" Returns a list of strings representing the names of the files found in the config override
directory under the given path. If the path doesn't exist, returns None.
"""
raise NotImplementedError
@abstractmethod
def save_volume_file(self, filename, flask_file):
""" Saves the given flask file to the config override volume, with the given
filename.
"""
raise NotImplementedError
@abstractmethod
def requires_restart(self, app_config):
""" If true, the configuration loaded into memory for the app does not match that on disk,
indicating that this container requires a restart.
"""
raise NotImplementedError
@abstractmethod
def get_volume_path(self, directory, filename):
""" Helper for constructing file paths, which may differ between providers. For example,
kubernetes can't have subfolders in configmaps """
raise NotImplementedError