如何在 Argo 工作流程步骤中内联卷中创建文件

问题描述 投票:0回答:1

目前,如果我想将多个文件内联放入一个卷中,我会执行如下操作:

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 中。

sh argo-workflows
1个回答
0
投票

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: {}

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.