【问题标题】:Ansible : multiline variable containing pipeAnsible:包含管道的多行变量
【发布时间】:2017-10-17 10:42:32
【问题描述】:

我尝试创建 Ansible 角色以在 Linux 服务器上创建 MOTD(每日消息)。

我想在这个文件中添加 ASCII 艺术,ASCII 艺术是在我的模板中使用的变量中定义的。

所以我的 ASCII 艺术变量需要是多行的并且包含多个特殊字符。

我试试:

motd_asciiart: |
     _____ _             _                        __ _               
    /  ___| |           | |                      / _| |              
    \ `--.| |_ __ _  ___| | _______   _____ _ __| |_| | _____      __
     `--. \ __/ _` |/ __| |/ / _ \ \ / / _ \ '__|  _| |/ _ \ \ /\ / /
    /\__/ / || (_| | (__|   < (_) \ V /  __/ |  | | | | (_) \ V  V / 
    \____/ \__\__,_|\___|_|\_\___/ \_/ \___|_|  |_| |_|\___/ \_/\_/ 

但是我遇到了这个错误:

错误!加载 YAML 时出现语法错误。

错误似乎出现在“/Users/ydavid/Devops/ansible2/roles/umanit.motd/defaults/main.yml”中:第 3 行第 9 列,但可能 根据确切的语法问题,位于文件中的其他位置。

违规行似乎是:

     _____ _             _                        __ _
    /  ___| |           | |                      / _| |
    ^ here

我尝试在第一行和最后一行添加 ",但出现了不同的错误:

错误!加载 YAML 时出现语法错误。

错误似乎出现在“/Users/ydavid/Devops/ansible2/roles/umanit.motd/defaults/main.yml”中:第 7 行第 74 列,但可能 根据确切的语法问题,位于文件中的其他位置。

违规行似乎是:

    /\__/ / || (_| | (__|   < (_) \ V /  __/ |  | | | | (_) \ V  V /
    \____/ \__\__,_|\___|_|\_\___/ \_/ \___|_|  |_| |_|\___/ \_/\_/ "
                                                                    ^ here

你能帮帮我吗?

我们能逃脱整个街区吗?

我发现这个角色 (https://github.com/picotrading/ansible-motd) 制作相同的东西,但 ASCII 艺术是单行的,如果可以的话,我会避免这种情况。

【问题讨论】:

    标签: ansible ascii-art


    【解决方案1】:

    这样做的原因是缩进 - 第二行比第一行早一个空格开始,这是一个参考点。

    我想最干净的解决方案是将艺术保存到单独的文件并使用file_contents lookup plugin读取内容:

    vars:
      motd_asciiart: "{{lookup('file', './art.txt')}}"
    

    【讨论】:

    • 感谢您的建议。使用此解决方案,我如何为我的主机使用不同的文件?我需要一个通用文件和特定主机的一些例外
    • 当然。不过,我不明白这与原始问题有何关系。您可以使用 host_vars、group_vars 或包含基于主机名的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多