如何在Ansible host_vars文件中转义$符号
我有一个Ansible playbook(YAML),它部署了一个web应用程序,作为部署过程的一部分,它创建并初始化了各种数据库和某些表中的一些数据 剧本任务:如何在Ansible host_vars文件中转义$符号,ansible,yaml,Ansible,Yaml,我有一个Ansible playbook(YAML),它部署了一个web应用程序,作为部署过程的一部分,它创建并初始化了各种数据库和某些表中的一些数据 剧本任务: - 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,
- 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
meter_managers:
- name: SAMPLE
db_type: ""
host: "http://www.example.com/axis2/services/Example/"
port: -1
catalog: ""
username: csa1
password: "Example$Example"
主机变量:
- 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
meter_managers:
- name: SAMPLE
db_type: ""
host: "http://www.example.com/axis2/services/Example/"
port: -1
catalog: ""
username: csa1
password: "Example$Example"
您可以忽略上面的大多数参数,但密码字段不起作用,因为它包含$符号
它作为示例出现,在$符号后被截断
我尝试将其转换为双$$,如下链接所示:
但是,这并不会产生正确的输出。结果是
Example15887Example
每次我运行剧本时,两者之间的数字是不同的。我不知道这个数字是从哪里来的。这似乎是某种滴答声,或类似的东西,但链接似乎表明,$$是逃避单个$的方法,所以我不明白为什么会出现这样的情况
我也试过使用和不使用“标记,也试过使用或不使用”标记,但没有效果
您知道如何正确地转义它,以便将值Example$Example插入到数据库表中吗
更新:
- 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
meter_managers:
- name: SAMPLE
db_type: ""
host: "http://www.example.com/axis2/services/Example/"
port: -1
catalog: ""
username: csa1
password: "Example$Example"
如果没有额外的解释,引用的问题将无法回答我的问题,但是Anthon在下面的评论中描述了简化,并在这个问题上提供了更好的帮助。您将带有
$
的字符串输入bash。在bash中,$是一个变量前缀。
而
$$
是一个具有当前PID编号的特殊变量,每次运行playbook时都会有所不同
在bash中使用双引号时,
$
应显示为\$
。我看到您在YAML中也使用双引号,因此您也应尝试转义斜杠,因此请尝试使用密码:“Example\\\$Example”
将带有$
的字符串输入bash。在bash中,$是一个变量前缀。
而
$$
是一个具有当前PID编号的特殊变量,每次运行playbook时都会有所不同
在bash中,当您使用双引号时,
$
应显示为\$
。我看到您在YAML中也使用双引号,因此您也应该尝试转义斜杠,所以请尝试使用密码:“Example\\\$Example”“
它看起来不像是YAML问题;您使用的是shell模块,您的美元符号似乎没有被充分转义。尝试在主机变量的前面添加一个\
,或者在shell行中添加一个更高级别的引用
至于数字,它们是shell进程的PID。请参阅。它看起来不像YAML问题;您使用的是shell模块,您的美元符号似乎没有被充分转义。尝试在主机变量的前面添加一个\
,或者在shell行中添加一个更高级别的引用
至于数字,它们是shell进程的PID。看。你有没有试着穿礼服逃跑是的。我也试过了。正如我在对您链接到的问题的评论中指出的,$
在YAML中没有特殊意义。因为美元符号并不特别(对于YAML),所以添加单引号或双引号根本没有效果。当您使用ansible时,docker期望的$
是不相关的。您是否尝试使用\??@tux转义是。我也试过了。正如我在对您链接到的问题的评论中指出的,$
在YAML中没有特殊意义。因为美元符号并不特别(对于YAML),所以添加单引号或双引号根本没有效果。当您使用ansible时,docker期望的$
是不相关的。如果您省略了双引号(此处不需要双引号,因此会混淆,而不是帮助),您甚至不必逃避反斜杠。@Anthon谢谢。这简化了我的主机。非常感谢。你在这里给出的解释比你所联系的另一个问题要好得多,也更简洁,如果没有进一步的解释,这个问题将无法纠正我的问题,但我感谢你提到它。其他人将来参考的最终解决方案是简单地将参数值设置为:Example\$Example(值周围没有引号)。如果您省略了双引号(此处不需要双引号,因此会混淆,而不是帮助),您甚至不必逃避反斜杠。@Anthon谢谢。这简化了我的主机。非常感谢。你在这里给出的解释比你所联系的另一个问题要好得多,也更简洁,如果没有进一步的解释,这个问题将无法纠正我的问题,但我感谢你提到它。其他人将来参考的最终解决方案是简单地将参数值设置为:Example\$Example(值周围没有引号)。