如何在Ansible host_vars文件

时间:2017-07-25 20:21:54

标签: ansible yaml

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

Playbook任务:

  - 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

每次运行我的剧本时,两者之间的数字都不同。我不知道这个数字来自哪里。它似乎是某种嘀嗒,或类似的东西,但链接似乎表明$$是逃避单一$的方式,所以我不明白为什么这样的出现就像那样

我也尝试过使用和不使用" 标记,并尝试使用或不使用' 标记,但无效。

有关如何正确转义这个以便我可以获取值示例$示例准备好插入我的数据库表的任何想法吗?

更新

如果没有额外的解释,引用的问题就不会回答我的问题,但是Anthon在评论中描述了下面的简化,并在这个问题上提供了更好的帮助。

2 个答案:

答案 0 :(得分:4)

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

在bash中使用双引号$时,应显示为\$。我也看到你在YAML中使用双引号,所以你也应该尝试逃避斜杠,所以试试password: "Example\\$Example"

答案 1 :(得分:1)

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

至于数字,它们是shell进程的PID。请参阅this