目前,如果我想将多个文件内联放入一个卷中,我会执行如下操作:
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: prepare-files-on-volume
namespace: argo-workflows
spec:
templates:
- name: prepare-files-on-volume
script:
volumeMounts:
- name: workdir
mountPath: /mnt/app
image: node:18
command: [sh]
source: |
#!/bin/sh
mkdir -p /mnt/app
cat <<EOF > /mnt/app/my-file.js
This is the content of my file. Imagine it's very long with many special chars!
EOF
cat <<EOF > /mnt/app/my-file-2.js
This is the content of my second file. Imagine it's very long as well!
EOF
然而,这种方法迫使我转义特殊字符,并且不允许我按原样复制粘贴文件并期望在卷中以完全相同的方式看到它。我已经成功地做到了这一点,同时逃脱了一些特殊字符,但我可能会错过一些东西,并且变得很难管理。
有谁知道更一致的方法将文件内容推送到 Argo 工作流程内联中的卷中?
我宁愿避免使用机密或配置映射,因为我希望文件内容与我的其他工作流程步骤位于相同的 YAML 中。
Node 和
sh
处理特殊字符的方式不同,通常需要转义或模板文字来处理特殊字符。其他使用 bash
或 ash
等图像不需要对特殊字符进行转义。与 bash
或 ash
相比,Node 的 shell 更加简约,功能更少,特别是在处理字符串中的特殊字符时。
这是一个使用 Ubuntu 的基本功能示例,它将文件内容推送到 Argo Workflows 内联的卷中:
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: prepare-files-on-volume
namespace: argo-workflows
spec:
templates:
- name: prepare-files-on-volume
inputs: {}
outputs: {}
metadata: {}
script:
name: ""
image: ubuntu:latest
command:
- bash
- "-c"
resources: {}
volumeMounts:
- name: workdir
mountPath: /mnt/app
source: >
#!/bin/bash
echo "First file including special characters: \$ \` \"
' \\ # & * ( ) < > ~ | { } [] ; :" > /mnt/app/file1.js
echo "Second file with: @ % ^ + = ? !, special character patterns:
{{ }} [[ ]] \\$\\#\\* - \`~!@#\$%^&*()_-+={[}]|\\:;\"'<,>.?/ and
Unicode: ✅ 🚀 ⚙️ ☑️ 😄" > /mnt/app/file2.js
cat /mnt/app/file1.js /mnt/app/file2.js
ls /mnt/app
entrypoint: prepare-files-on-volume
arguments: {}
volumes:
- name: workdir
emptyDir: {}
参考资料: