Add support for tag expiration based on a quay.expires-after
label
This commit is contained in:
parent
4663bf4194
commit
c5d8b5f86b
5 changed files with 88 additions and 4 deletions
36
endpoints/v2/labelhandlers.py
Normal file
36
endpoints/v2/labelhandlers.py
Normal file
|
@ -0,0 +1,36 @@
|
|||
import logging
|
||||
|
||||
from app import app
|
||||
from endpoints.v2.models_pre_oci import pre_oci_model as model
|
||||
from util.timedeltastring import convert_to_timedelta
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
min_expire_sec = convert_to_timedelta(app.config.get('LABELED_EXPIRATION_MINIMUM', '1h'))
|
||||
max_expire_sec = convert_to_timedelta(app.config.get('LABELED_EXPIRATION_MAXIMUM', '104w'))
|
||||
|
||||
def _expires_after(value, namespace_name, repo_name, digest):
|
||||
""" Sets the expiration of a manifest based on the quay.expires-in label. """
|
||||
try:
|
||||
timedelta = convert_to_timedelta(value)
|
||||
except ValueError:
|
||||
logger.exception('Could not convert %s to timedeltastring for %s/%s@%s', value, namespace_name,
|
||||
repo_name, digest)
|
||||
return
|
||||
|
||||
total_seconds = min(max(timedelta.total_seconds(), min_expire_sec.total_seconds()),
|
||||
max_expire_sec.total_seconds())
|
||||
|
||||
logger.debug('Labeling manifest %s/%s@%s with expiration of %s', namespace_name, repo_name,
|
||||
digest, total_seconds)
|
||||
model.set_manifest_expires_after(namespace_name, repo_name, digest, total_seconds)
|
||||
|
||||
|
||||
_LABEL_HANDLES = {
|
||||
'quay.expires-after': _expires_after,
|
||||
}
|
||||
|
||||
def handle_label(key, value, namespace_name, repo_name, digest):
|
||||
handler = _LABEL_HANDLES.get(key)
|
||||
if handler is not None:
|
||||
handler(value, namespace_name, repo_name, digest)
|
Reference in a new issue