【问题标题】:How to escape a $ sign in an Ansible host_vars file如何在 Ansible host_vars 文件中转义 $ 符号
【发布时间】:2017-12-31 22:35:18
【问题描述】:

我有一个部署 Web 应用程序的 Ansible playbook (YAML),作为部署过程的一部分,它创建并初始化各种数据库和某些表中的一些数据。

剧本任务:

  - name: insert Meter Managers to mdm_connection
    shell : "psql -d {{ mdm_config_db }} -c \"insert into mdm_connection (mdm_connection_type_id, name, db_type, host, port, catalog, username, password) values (3, '{{ item.name }}', '{{ item.db_type }}', '{{ item.host }}', {{ item.port }}, '{{ item.catalog }}', '{{ item.username }}', '{{ item.password }}');\""
    with_items: "{{ meter_managers }}"
    when: item != ""
    sudo_user: postgres
    tags:
      - initDB

host_vars:

meter_managers:
  - name: SAMPLE
    db_type: ""
    host: "http://www.example.com/axis2/services/Example/"
    port: -1
    catalog: ""
    username: csa1
    password: "Example$Example"

您可以忽略上面的大部分参数,但不起作用的部分是密码字段,因为它包含一个 $ 符号。

它以示例的形式出现,在 $ 符号后被截断。

我已尝试将其转义为双 $$,根据此链接:How can I escape a $ dollar sign in a docker compose file?

但是,这不会导致正确的输出。结果是

Example15887Example

每次运行我的剧本时,两者之间的数字都不同。我不知道这个数字是从哪里来的。这似乎是某种滴答声,或类似的东西,但链接似乎表明 $$ 是逃避单个 $ 的方式,所以我不明白为什么会这样。

我也试过带和不带 " 标记,也试过带或不带 ' 标记,但无济于事。

关于如何正确转义这个以便我可以将值 Example$Example 准备好插入到我的数据库表中的任何想法?

更新:

如果没有额外的解释,所引用的问题将无法回答我的问题,但是 Anthon 在 cmets 中描述了以下简化,并在此问题中提供了更好的帮助。

【问题讨论】:

  • 你试过用\转义吗??
  • @tux 是的。也试过了。
  • 正如我在对您链接到的问题的评论中指出的那样,$ 在 YAML 中没有特殊含义。由于该美元符号不是特殊的(对于 YAML),因此添加单引号或双引号根本没有效果。当您使用 ansible 时,docker 期望 $$ 无关紧要。

标签: ansible yaml


【解决方案1】:

这看起来不像 YAML 问题;您正在使用 shell 模块,似乎您的美元符号没有充分转义。尝试在 host_vars 的前面添加 \ 或在 shell 行中再添加一级引号。

数字是shell进程的PID。见this

【讨论】:

    【解决方案2】:

    您将带有 $ 的字符串输入 bash。
    在 bash 中,$ 是一个变量前缀。
    $$是一个特殊变量,当前PID号,每次运行playbook都不一样。

    在 bash 中,当您使用双引号时,$ 应该显示为 \$。我看到你在 YAML 中也使用了双引号,所以你也应该尝试转义斜线,所以尝试使用 password: "Example\\$Example"

    【讨论】:

    • 如果你省略了双引号(这里没有必要,因此混淆而不是帮助),你甚至不必转义反斜杠。
    • @Anthon 谢谢。这简化了我的 host_vars。非常感激。您在此处给出的解释比您链接到的其他问题要好得多,也更简洁,如果没有进一步的解释,这将无法纠正我的问题,但我感谢您对它的引用。供其他人参考的最终解决方案是简单地将参数值设置为:Example\$Example(值周围没有引号)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多