【问题标题】:Maintain YAML indentation while printing the contents of a file into that YAML (using bash scripting)在将文件内容打印到 YAML 时保持 YAML 缩进(使用 bash 脚本)
【发布时间】:2019-08-05 22:53:52
【问题描述】:

我需要将 python 文件的内容打印到 YAML 文件中,而不会弄乱 YAML 文件的缩进。 YAML 文件中执行此操作的部分是对将传递到 Bash 脚本中的命令的描述,因此我们需要使用 Bash 脚本语法来完成此操作。例如,以下硬编码代码 WORKS。注意“cat”行是如何用适当的缩进输出 script.py 的内容的:

诀窍是在尝试从另一个文件读取 Python 时将其转换为该格式。事实上,为了创建该屏幕截图,我必须在生成文件后实际进入该文件并添加一堆空格以使其看起来正确。添加空格后,文件按预期工作。这是我手动编辑之前错误输出的样子:

有趣的是,python 的第一行(绿色箭头)从正确的行开始。但是其余的行都在左边距并且不正确(红色箭头)。

这是我用来将我的代码(在 script.py 中)放入构建规范的代码:

注意:${Script} 是对我的 script.py 文件的引用。此变量正在文件中的其他位置设置。

version: 0.2
phases:
  install:
    commands:
      - apt-get update -y
  build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - |
        cat >> scrypt.py <<EOL
        ${Script}
        EOL

【问题讨论】:

  • 我是否正确描述了您正在使用 script.yml,将 ${Script} 替换为 script.py 内容,然后尝试运行该 python 文本作为构建步骤的情况?
  • 还有其他方法可以传递该 script.py 吗?比如从某个地方下载它并运行?
  • 是的,这就是我想要做的。还有其他方法,但我专门尝试使用指定的 NO_SOURCE 选项来执行此操作,因此我不需要从其他地方下载源代码,例如 S3 存储桶。
  • 我重新修改了这个问题,以减少很多不必要的噪音并专注于这个问题。
  • 看来问题出在插入变量的工具上。它逐字插入,而您希望缩进。您可以尝试在工具插入之前重新格式化 script.py(自己为内容添加足够的缩进)。

标签: bash yaml amazon-cloudformation


【解决方案1】:

所以问题在于 !Include 函数将 script.py 的内容代替 ${Script} 并不关心我们是否在 YAML 文件中,所以每当有新行时,它只是把它们一直扔到左边。

有两种方法可以解决这个问题。首先,我们可以简单地向 script.py 本身添加空格,这样当它的值被替换为 ${Script} 时,它们就会出现在正确的位置。

我们最终做的事情(因为第一种方法非常笨拙且难以维护)是简单地放弃尝试!包含文件,而是直接将整个 script.py 内容粘贴到 YAML 文件中,正是 ${Script} 最初所在的位置。所以结果看起来像这样:

version: 0.2
phases:
  install:
    commands:
      - apt-get update -y
  build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - pip3 install --quiet boto3
      - pip3 install --quiet GitPython
      - |
        cat > script.py <<EOL
        import boto3
        import git
        etc. etc. etc.
        EOL
      - python script.py

【讨论】:

    猜你喜欢
    • 2020-05-23
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2021-12-30
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多