[英]How can escape colon in a string within an Ansible YAML file?
我想在安装过程中更改文件 /var/www/kibana/config.js 中的一行代码
elasticsearch: "http://"+window.location.hostname+":9200"
到
elasticsearch: "http://192.168.1.200:9200"
在这里,我尝试使用 lineinfile 来做到这一点,如下所示
- name: Comment out elasticsearch the config.js to ElasticSearch server
lineinfile:
dest=/var/www/kibana/config.js
backrefs=true
regexp="(elasticsearch.* \"http.*)$"
line="elasticsearch\: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
state=present
我已将{{elasticsearch_URL}}
和{{elasticsearch_port}}
变量分别设置为http://192.168.1.200
和9200
。
这是我遇到的错误消息:
ERROR: Syntax Error while loading YAML script, /Users/shuoy/devops_workspace/ansible_work/logging-for-openstack/roles/kibana/tasks/Debian.yml
Note: The error may actually appear before this position: line 29, column 25
regexp="(elasticsearch.* \"http.*)$"
line="elasticsearch\: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
^
无论您有多少嵌套引号,在任何情况下都有效的解决方案是输出冒号通过 Jinja2 表达式,它简单地将冒号作为字符串返回:
{{ ":" }}
或者在您的完整行中:
line="elasticsearch\: \" {{ elasticsearch_URL }}{{ ":" }}{{ elasticsearch_port }} \" "
只需将冒号单独放在引号中 -
regexp="(elasticsearch.* \\"http.*)$" line="elasticsearch':' \\" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \\" "
foo=bar
是更适合单行指令的格式,但由于您的参数已经跨越了多行,只需将=
更改为:
,就不会在字符串中包含冒号而大惊小怪。
- name: Comment out elasticsearch the config.js to ElasticSearch server
lineinfile:
dest: /var/www/kibana/config.js
backrefs: true
regexp: 'elasticsearch.* "http.*$'
line: 'elasticsearch: "{{ elasticsearch_URL }}:{{ elasticsearch_port }}"'
state: present
它已经是一个字符串; 你不必(也不能,如这里所见)在其中转义冒号。
line="elasticsearch: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
我发现在所有情况下都能始终如一地工作的是一个变量。 例如, vars/main.yml
:
fw_zone_str: 'Error: NAME_CONFLICT: new_zone():'
在tasks/foo.yml
:
failed_when: fw_zone_str not in fw_new_zone.stderr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.