web-dev-qa-db-ja.com

Ansible YAMLファイル内の文字列でコロンをエスケープするにはどうすればよいですか?

インストール中に/var/www/kibana/config.jsファイルのコードの1行を変更したい

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.2009200に設定しました。

ここに私が出会ったエラーメッセージがあります:

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 }} \" "
                    ^
27
chen

行全体を"で囲む必要があります(:が表示されます)。

lineinfile:
'dest=/var/www/kibana/config.js
backrefs=true
regexp="(elasticsearch.* \"http.*)$"
line="elasticsearch\: \ {{ elasticsearch_URL }}:{{ elasticsearch_port }} \ "
state=present'  

これらのページをご覧ください:
リンク-1リンク-2リンク-

22
sunbabaphu

ネストされた引用符の数に関係なく、全体を囲む引用符を追加することを強制せずに(書き込みたい行に応じてトリッキーに不可能になる可能性があります)、どのような場合でも機能するソリューションは、コロンを出力することです単純にコロンを文字列として返すJinja2式を使用します。

{{ ":" }}

またはあなたの完全な行で:

line="elasticsearch\: \" {{ elasticsearch_URL }}{{ ":" }}{{ elasticsearch_port }} \" "

これに対するクレジットはgithubユーザーdrewpに送られます

16
udondan

コロンを引用符で区切っておくだけです-

regexp="(elasticsearch.* \"http.*)$" line="elasticsearch':' \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "

9
theharshest

foo=barは1行のディレクティブにより適した形式ですが、とにかくパラメーターを使用して既に複数の行にまたがっているので、単に=から:、それはあなたの文字列にコロンがあることについて大騒ぎしません。

- 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
1
Chris

すでに文字列です。その中のコロンをエスケープする必要はありません(ここに示すように、できません)。

line="elasticsearch: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
0
Ry-