#json #loops #multilinestring #argo-workflows #argo
#json #петли #многострочный #арго-рабочие процессы #арго
Вопрос:
Я работаю над созданием рабочего процесса argo с циклом withParam
для переменной карты. На этой карте я хочу использовать многострочную строку json. Есть ли какой-нибудь способ его использовать?
Вот способ, который я использую policy
в качестве многострочной строки, но он не работает
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: loops-param-arg- spec: entrypoint: loop-param-arg-example arguments: parameters: - name: os-list value: | [ { "image": "debian", "tag": "9.1", "policy": "{ "Version": "2012-10-17", "Statement": [ { "Sid": "BucketAdmin", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "*" } ] }" }, { "image": "ubuntu", "tag": "17.10", "policy": "{ "Version": "2012-10-17", "Statement": [ { "Sid": "BucketAdmin", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "*" } ] }"} ] templates: - name: loop-param-arg-example inputs: parameters: - name: os-list steps: - - name: test-linux template: cat-os-release arguments: parameters: - name: image value: "{{item.image}}" - name: tag value: "{{item.tag}}" withParam: "{{inputs.parameters.os-list}}" - name: cat-os-release inputs: parameters: - name: image - name: tag container: image: "{{inputs.parameters.image}}:{{inputs.parameters.tag}} and policy is {{inputs.parameters.policy}}" command: [cat] args: [/etc/os-release]
Есть ли какой-либо способ в рабочих процессах argo достичь этого? если нет, то каков альтернативный способ сделать это?
Ответ №1:
Есть три проблемы:
- Политики не являются допустимыми в формате JSON. Звездочки должны быть заключены в кавычки, так как они являются строками.
{ "Sid": "BucketAdmin", "Effect": "Allow", - "Principal": *, "Principal": "*", "Action": "s3:*", - "Resource": * "Resource": "*" }
- (ОБНОВЛЕНИЕ: на самом деле это изменение не требуется — рабочие процессы Argo правильно обрабатывают объект
policy
JSON.) Политики должны быть закодированы в виде строк, чтобы их можно было легко передавать в качестве параметров. Например:"{"Version":"2012-10-17","Statement":[{"Sid":"BucketAdmin","Effect":"Allow","Principal":"*","Action":"s3:*","Resource":"*"}]}"
- Значение политики должно быть явно передано в качестве параметра шаблону выпуска cat-os.
Окончательный рабочий процесс должен выглядеть следующим образом:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: loops-param-arg- spec: entrypoint: loop-param-arg-example arguments: parameters: - name: os-list value: | [ { "image": "debian", "tag": "9.1", "policy": "{"Version":"2012-10-17","Statement":[{"Sid":"BucketAdmin","Effect":"Allow","Principal":"*","Action":"s3:*","Resource":"*"}]}" }, { "image": "ubuntu", "tag": "17.10", "policy": "{"Version":"2012-10-17","Statement":[{"Sid":"BucketAdmin","Effect":"Allow","Principal":"*","Action":"s3:*","Resource":"*"}]}" } ] templates: - name: loop-param-arg-example inputs: parameters: - name: os-list steps: - - name: test-linux template: cat-os-release arguments: parameters: - name: image value: "{{item.image}}" - name: tag value: "{{item.tag}}" - name: policy value: "{{item.policy}}" withParam: "{{inputs.parameters.os-list}}" - name: cat-os-release inputs: parameters: - name: image - name: tag - name: policy container: image: "{{inputs.parameters.image}}:{{inputs.parameters.tag}}" command: [echo] args: ["{{inputs.parameters.policy}}"]
Комментарии:
1. Спасибо за ответ @michael crenshaw, он работает. Но у меня большие политики, если я добавляю escape-символы для каждой инструкции в политике, нам не хватает читабельности политики.
2. Я внес изменения в вопрос. Добавлены двойные кавычки для звездочек
3. @monu интересно, не знал, что у вас может быть нестроковый
item.something
член. Обновлю свой ответ!
Ответ №2:
Решения, предоставленные Майклом, работают, а также приведенное ниже решение работает для вас с некоторой удобочитаемостью политики
kind: Workflow metadata: generateName: loops-param-arg- spec: entrypoint: loop-param-arg-example arguments: parameters: - name: os-list value: | [ { "image": "debian", "tag": "9.1", "policy": { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketAdmin", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "*" } ] } }, { "image": "ubuntu", "tag": "17.10", "policy": { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketAdmin", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "*" } ] } } ] templates: - name: loop-param-arg-example inputs: parameters: - name: os-list steps: - - name: test-linux template: cat-os-release arguments: parameters: - name: image value: "{{item.image}}" - name: tag value: "{{item.tag}}" withParam: "{{inputs.parameters.os-list}}" - name: cat-os-release inputs: parameters: - name: image - name: tag container: image: "{{inputs.parameters.image}}:{{inputs.parameters.tag}} and policy is {{inputs.parameters.policy}}" command: [cat] args: [/etc/os-release]