#conditional-operator #argo-workflows #argocd
#условный оператор #argo-workflows #argocd
Вопрос:
У меня есть следующий шаблон рабочего процесса, в котором условие when when: "'{{item}}' =~ '^tests/'"
, артефакты вводятся в качестве пути к файлу в S3
корзине AWS и withParam
цикле.
Вот мой шаблон рабочего процесса
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: process-wft
spec:
entrypoint: main
templates:
- name: main
inputs:
parameters:
- name: dir-process
default: true
- name: dir
artifacts:
- name: Code
dag:
tasks:
- name: process-wft-tests
when: "'{{item}}' =~ '^tests/'"
templateRef:
name: tf-wf-rn
template: main
arguments:
parameters:
- name: dir-process
value: "{{inputs.parameters.dir-process}}"
artifacts:
- name: Code
from: "{{inputs.artifacts.Code}}"
withParam: "{{inputs.parameters.dir}}"
вот Code
результат извлечения моего входного артефакта, который передается из моего рабочего процесса
inputs:
artifacts:
- archive:
tar:
compressionLevel: 9
archiveLogs: true
globalName: GitSource
name: Code
path: /mnt/out/code
s3:
key: process-kfxqf/process-kfxqf-1938174407/GitSource.tgz
При запуске моего рабочего процесса возникает ошибка, приведенная ниже
message: failed to resolve {{inputs.artifacts.Code}}
В чем ошибка, которую я здесь делаю? если это не сработает, какой альтернативный способ заставить это работать?
Примечание: я попробовал выполнить рабочий процесс, удалив условие when, оно работает нормально. Проблема возникает только при добавлении условия when.
Комментарии:
1. Можете ли вы поделиться тем, как вы вызываете этот WorkflowTemplate? Это с
argo submit --from workflowtemplate/process-wft
или, может быть, другой рабочий процесс с aworkflowTemplateRef
? И можете ли вы уточнить, откуда берется второй блок кода?2. @Michael Crenshaw — я вызываю этот шаблон рабочего
workflowTemplateRef
процесса из другого рабочего процесса, а второй блок кода является результатом артефактаCode
, упомянутого в шаблоне рабочего процесса. Второй блок кода я только что добавил для лучшего понимания результата артефактаCode
.3. Это очень похоже на ошибку. Я собираюсь отправить проблему, а затем ссылку здесь.
4. Хорошо, есть ли у нас какой-либо обходной путь для устранения этой проблемы в моем текущем шаблоне рабочего процесса?
5. Обновлен ответ с потенциальным обходным путем. Еще одна идея: есть ли какой-либо способ передать только информацию об артефакте в качестве параметров, а затем фактически загрузить артефакт в
main
шаблонtf-wf-rn
WorkflowTemplate?
Ответ №1:
Это ошибка.
Кажется, что когда условие оценивается false
как, некоторый код пропускает заполнение артефакта (имеет смысл, экономит время), но какой-то другой код не соблюдает when
условие и все еще ожидает, что артефакт будет заполнен.
Возможные обходные пути:
- Переместите условную логику в контейнер.
- удалите
when
условие - передайте
dir
параметрmain
шаблону в вашемtf-wf-rn
WorkflowTemplate - измените
main
шаблон, чтобы запускать регулярное выражение дляdir
параметра — если он не совпадает, просто выйдите из 0
Это может значительно замедлить рабочий процесс, потому что вам придется запускать модуль для каждой итерации цикла, чтобы определить, действительно ли нужно выполнить какую-либо работу.
- удалите
- Если вы можете вычислить всю информацию об артефакте, передайте эту информацию в качестве параметров
main
шаблону в вашемtf-wf-rn
WorkflowTemplate. Затем фактически загрузите артефакт в этот необусловленный, не зацикленный шаблон. (В основном классики по проблемному коду.) - Попробуйте более старую версию.
Если вы обнаружите работающую более старую версию, пожалуйста, 1) прокомментируйте сообщение об ошибке и 2) убедитесь, что более старая версия не имеет каких-либо соответствующих уязвимостей в системе безопасности, прежде чем запускать ее в производственной системе.