From e703ecbac3b50f169498a273d0c97b7a6cf382f7 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Sun, 3 Dec 2023 21:58:17 +0200 Subject: [PATCH] frigate - Allow selecting different image (eg tensorrt) (#1821) --- library/ix-dev/community/frigate/Chart.yaml | 2 +- .../ix-dev/community/frigate/questions.yaml | 12 +++++ .../community/frigate/templates/_frigate.tpl | 2 +- .../community/frigate/upgrade_info.json | 2 +- .../ix-dev/community/frigate/upgrade_strategy | 44 ++++++++++++++----- library/ix-dev/community/frigate/values.yaml | 6 +++ 6 files changed, 55 insertions(+), 13 deletions(-) diff --git a/library/ix-dev/community/frigate/Chart.yaml b/library/ix-dev/community/frigate/Chart.yaml index 227b47c94c..82787af8ac 100644 --- a/library/ix-dev/community/frigate/Chart.yaml +++ b/library/ix-dev/community/frigate/Chart.yaml @@ -3,7 +3,7 @@ description: Frigate is an NVR With Realtime Object Detection for IP Cameras annotations: title: Frigate type: application -version: 1.1.3 +version: 1.1.4 apiVersion: v2 appVersion: 0.12.1 kubeVersion: '>=1.16.0-0' diff --git a/library/ix-dev/community/frigate/questions.yaml b/library/ix-dev/community/frigate/questions.yaml index 2de24e99b1..d2b4c22be0 100644 --- a/library/ix-dev/community/frigate/questions.yaml +++ b/library/ix-dev/community/frigate/questions.yaml @@ -25,6 +25,18 @@ questions: schema: type: dict attrs: + - variable: imageSelector + label: Image + description: The image to use for Frigate. + schema: + type: string + default: "image" + required: true + enum: + - value: image + description: Frigate Image + - value: tensorrtImage + description: Frigate TensorRT Image - variable: mountUSBBus label: Mount USB Bus description: | diff --git a/library/ix-dev/community/frigate/templates/_frigate.tpl b/library/ix-dev/community/frigate/templates/_frigate.tpl index 0b7d283148..7f6d2298a4 100644 --- a/library/ix-dev/community/frigate/templates/_frigate.tpl +++ b/library/ix-dev/community/frigate/templates/_frigate.tpl @@ -10,7 +10,7 @@ workload: frigate: enabled: true primary: true - imageSelector: image + imageSelector: {{ .Values.frigateConfig.imageSelector | default "image" }} securityContext: runAsUser: 0 runAsGroup: 0 diff --git a/library/ix-dev/community/frigate/upgrade_info.json b/library/ix-dev/community/frigate/upgrade_info.json index 767388094a..6f8587136a 100644 --- a/library/ix-dev/community/frigate/upgrade_info.json +++ b/library/ix-dev/community/frigate/upgrade_info.json @@ -1 +1 @@ -{"filename": "values.yaml", "keys": ["image"]} +{"filename": "values.yaml", "keys": ["image","tensorrtImage"]} diff --git a/library/ix-dev/community/frigate/upgrade_strategy b/library/ix-dev/community/frigate/upgrade_strategy index af685230a1..0c17edbd1a 100755 --- a/library/ix-dev/community/frigate/upgrade_strategy +++ b/library/ix-dev/community/frigate/upgrade_strategy @@ -6,21 +6,45 @@ import sys from catalog_update.upgrade_strategy import semantic_versioning -RE_STABLE_VERSION = re.compile(r'\d+\.\d+\.\d+') +RE_STABLE_VERSION_BASE = r'\d+\.\d+\.\d+' +ENUMS = { + 'image': { + 'RE_STABLE_VERSION': re.compile(RE_STABLE_VERSION_BASE), + 'STRIP_TEXT': '' + }, + 'tensorrtImage': { + 'RE_STABLE_VERSION': re.compile(rf'{RE_STABLE_VERSION_BASE}-tensorrt'), + 'STRIP_TEXT': '-tensorrt' + }, +} def newer_mapping(image_tags): - key = list(image_tags.keys())[0] - tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} - version = semantic_versioning(list(tags)) - if not version: - return {} - - return { - 'tags': {key: tags[version]}, - 'app_version': version, + output = { + "tags": {}, + "app_version": "" } + for key in image_tags.keys(): + STRIP_TEXT = ENUMS[key].get('STRIP_TEXT', None) if key in ENUMS else None + RE_STABLE_VERSION = ENUMS[key].get('RE_STABLE_VERSION', None) if key in ENUMS else None + + if (STRIP_TEXT is None) or (RE_STABLE_VERSION is None): + continue + + tags = {t.strip(STRIP_TEXT): t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + + if not version: + continue + + if key == 'image': + output['app_version'] = version + + output['tags'][key] = tags[version] + + return output + if __name__ == '__main__': try: diff --git a/library/ix-dev/community/frigate/values.yaml b/library/ix-dev/community/frigate/values.yaml index a46a80a66d..d3960dcd38 100644 --- a/library/ix-dev/community/frigate/values.yaml +++ b/library/ix-dev/community/frigate/values.yaml @@ -3,12 +3,18 @@ image: pullPolicy: IfNotPresent tag: 0.12.1 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1-tensorrt + resources: limits: cpu: 4000m memory: 8Gi frigateConfig: + imageSelector: image mountUSBBus: false additionalEnvs: []