Как можно вывести двоеточие в строку в файле Ansible YAML?
Я хочу изменить одну строку моего кода в файле /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 }} \" "
^
Ответы
Ответ 1
вам нужно заключить всю строку в "
, где появляется :
.
lineinfile:
'dest=/var/www/kibana/config.js
backrefs=true
regexp="(elasticsearch.* \"http.*)$"
line="elasticsearch\: \ {{ elasticsearch_URL }}:{{ elasticsearch_port }} \ "
state=present'
Смотрите эти страницы:
Ссылка-1 Ссылка-2 Ссылка-3
Ответ 2
Решение, которое будет работать в любом случае независимо от того, сколько вложенных кавычек вы могли бы иметь и не заставляя вас добавлять больше кавычек по всему предмету (что может оказаться сложным и невозможным в зависимости от строки, которую вы хотите записать), - это выведите двоеточие через выражение Jinja2, которое просто возвращает двоеточие в виде строки:
{{ ":" }}
Или в вашей полной строке:
line="elasticsearch\: \" {{ elasticsearch_URL }}{{ ":" }}{{ elasticsearch_port }} \" "
Благодарим за это gitub user drewp.
Ответ 3
Просто держите двоеточие в кавычках отдельно -
regexp="(elasticsearch.* \"http.*)$" line="elasticsearch':' \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
Ответ 4
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
Ответ 5
Его строка уже; вы не должны (и не можете, как видно здесь) избегать двоеточия внутри него.
line="elasticsearch: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "