Create transient config provider, temp dir logic
Allows us to have a new config provider for each setup, with no overlap of the directories used, and automatic cleanup of those directories.
This commit is contained in:
parent
2d0a599aab
commit
db757edcd2
9 changed files with 70 additions and 37 deletions
|
@ -1,4 +1,5 @@
|
|||
import os
|
||||
import tempfile
|
||||
import tarfile
|
||||
|
||||
from flask import request, make_response, send_file
|
||||
|
@ -9,6 +10,19 @@ from util.config.validator import EXTRA_CA_DIRECTORY
|
|||
from config_app.c_app import app, config_provider
|
||||
from config_app.config_endpoints.api import resource, ApiResource, nickname
|
||||
|
||||
@resource('/v1/configapp/initialization')
|
||||
class ConfigInitialization(ApiResource):
|
||||
"""
|
||||
Resource for dealing with any initialization logic for the config app
|
||||
"""
|
||||
|
||||
@nickname('scStartNewConfig')
|
||||
def get(self):
|
||||
config_provider.new_config_dir()
|
||||
|
||||
return make_response('OK')
|
||||
|
||||
|
||||
@resource('/v1/configapp/tarconfig')
|
||||
class TarConfigLoader(ApiResource):
|
||||
"""
|
||||
|
@ -18,7 +32,7 @@ class TarConfigLoader(ApiResource):
|
|||
|
||||
@nickname('scGetConfigTarball')
|
||||
def get(self):
|
||||
config_path = config_provider.config_volume
|
||||
config_path = config_provider.get_config_dir_path()
|
||||
|
||||
# remove the initial trailing / from the prefix path, and add the last dir one
|
||||
tar_dir_prefix = config_path[1:] + '/'
|
||||
|
@ -33,28 +47,28 @@ class TarConfigLoader(ApiResource):
|
|||
|
||||
return tarinfo
|
||||
|
||||
# Remove the tar if it already exists so we don't write on top of existing tarball
|
||||
if os.path.isfile('quay-config.tar.gz'):
|
||||
os.remove('quay-config.tar.gz')
|
||||
temp = tempfile.NamedTemporaryFile()
|
||||
|
||||
tar = tarfile.open('quay-config.tar.gz', mode="w|gz")
|
||||
tar = tarfile.open(temp.name, mode="w|gz")
|
||||
|
||||
for name in os.listdir(config_path):
|
||||
tar.add(os.path.join(config_path, name), filter=tarinfo_filter)
|
||||
|
||||
tar.close()
|
||||
|
||||
return send_file('quay-config.tar.gz', mimetype='application/gzip')
|
||||
return send_file(temp.name, mimetype='application/gzip')
|
||||
|
||||
@nickname('scUploadTarballConfig')
|
||||
def put(self):
|
||||
""" Loads tarball config into the config provider """
|
||||
# Generate a new empty dir to load the config into
|
||||
config_provider.new_config_dir()
|
||||
|
||||
input_stream = request.stream
|
||||
with tarfile.open(mode="r|gz", fileobj=input_stream) as tar_stream:
|
||||
# TODO: find a way to remove the contents of the directory on shutdown?
|
||||
tar_stream.extractall(config_provider.config_volume)
|
||||
tar_stream.extractall(config_provider.get_config_dir_path())
|
||||
|
||||
# now try to connect to the db provided in their config
|
||||
# now try to connect to the db provided in their config to validate it works
|
||||
combined = dict(**app.config)
|
||||
combined.update(config_provider.get_config())
|
||||
|
||||
|
|
Reference in a new issue