Merge "Allow buffer mode to be configured for upload"

This commit is contained in:
Zuul 2019-05-01 01:53:43 +00:00 committed by Gerrit Code Review
commit 50dd505136
4 changed files with 53 additions and 10 deletions

View File

@ -420,11 +420,24 @@ Please reference Shipyard's `CLI documentation`_ for information related to thes
Specifies a UUID (8-4-4-4-12 format) that will be used to correlate logs,
transactions, etc. in downstream activities triggered by this interaction.
**-b / --buffer-mode** (Optional). Default is auto.
Set the buffer mode when uploading documents. Supported buffer modes
include append, replace, auto.
append: Add the collection to the Shipyard Buffer, only if that
collection does not already exist in the Shipyard buffer.
replace: Clear the Shipyard Buffer before adding the specified
collection.
auto: Let Pegleg determine the appropriate buffer mode to use.
Usage:
::
./pegleg.sh site <options> upload <site_name> --context-marker=<uuid>
./pegleg.sh site <options> upload <site_name> --context-marker=<uuid> --buffer=<buffer>
Site Secrets Group
------------------

View File

@ -367,11 +367,25 @@ def lint_site(*, fail_on_missing_sub_src, exclude_lint, warn_lint, site_name):
'interaction ',
required=False,
type=click.UUID)
@click.option(
'-b',
'--buffer-mode',
'buffer_mode',
required=False,
default='auto',
show_default=True,
help='Set the buffer mode when uploading documents. Supported buffer '
'modes include append, replace, auto.\n'
'append: Add the collection to the Shipyard Buffer, only if that '
'collection does not already exist in the Shipyard buffer.\n'
'replace: Clear the Shipyard Buffer before adding the specified '
'collection.\n'
'auto: Let Pegleg determine the appropriate buffer mode to use.')
@SITE_REPOSITORY_ARGUMENT
@click.pass_context
def upload(ctx, *, os_project_domain_name,
os_user_domain_name, os_project_name, os_username,
os_password, os_auth_url, context_marker, site_name):
os_password, os_auth_url, context_marker, site_name, buffer_mode):
if not ctx.obj:
ctx.obj = {}
@ -391,7 +405,7 @@ def upload(ctx, *, os_project_domain_name,
ctx.obj['context_marker'] = str(context_marker)
ctx.obj['site_name'] = site_name
click.echo(ShipyardHelper(ctx).upload_documents())
click.echo(ShipyardHelper(ctx, buffer_mode).upload_documents())
@site.group(

View File

@ -132,3 +132,13 @@ class SaltInsufficientLengthException(PeglegBaseException):
"""Exception raised when salt is too short."""
message = 'PEGLEG_SALT must be at least 24 characters long.'
#
# Shipyard Helper Exceptions
#
class InvalidBufferModeException(PeglegBaseException):
"""Exception raised when invalid buffer mode specified"""
message = 'BUFFER MODE must be one of: append, auto, replace'

View File

@ -18,7 +18,7 @@ import uuid
import yaml
from pegleg.engine.exceptions import PeglegBaseException
from pegleg.engine import exceptions
from pegleg.engine.util import files
from pegleg.engine.util.pegleg_secret_management import PeglegSecretManagement
@ -29,14 +29,14 @@ from shipyard_client.api_client.shipyardclient_context import \
LOG = logging.getLogger(__name__)
class AuthValuesError(PeglegBaseException):
class AuthValuesError(exceptions.PeglegBaseException):
"""Shipyard authentication failed. """
def __init__(self, *, diagnostic):
self.diagnostic = diagnostic
class DocumentUploadError(PeglegBaseException):
class DocumentUploadError(exceptions.PeglegBaseException):
"""Exception occurs while uploading documents"""
def __init__(self, message):
@ -52,7 +52,7 @@ class ShipyardHelper(object):
4. Formats response from Shipyard api_client
"""
def __init__(self, context):
def __init__(self, context, buffer_mode='auto'):
"""
Initializes params to be used by Shipyard
@ -71,6 +71,7 @@ class ShipyardHelper(object):
self.client_context = ShipyardClientContext(
self.auth_vars, self.context_marker)
self.api_client = ShipyardClient(self.client_context)
self.buffer_mode = buffer_mode
def upload_documents(self):
"""Uploads documents to Shipyard """
@ -82,10 +83,15 @@ class ShipyardHelper(object):
# Append flag is not required for the first
# collection being uploaded to Shipyard. It
# is needed for subsequent collections.
if idx == 0:
buffer_mode = None
if self.buffer_mode == 'auto':
if idx == 0:
buffer_mode = None
else:
buffer_mode = 'append'
elif self.buffer_mode == 'append' or self.buffer_mode == 'replace':
buffer_mode = self.buffer_mode
else:
buffer_mode = 'append'
raise exceptions.InvalidBufferModeException()
# Decrypt the documents if encrypted
pegleg_secret_mgmt = PeglegSecretManagement(