Подтвердить что ты не робот

Как можно вывести двоеточие в строку в файле 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 }} \" "
                    ^
4b9b3361

Ответ 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 }} \" "