特定のホストでDockerコンテナを実行するための情報を収集することを含むプレイブックがあります。
- name: Gather info
hosts: "{{ hosts }}"
gather_facts: no
tasks:
- name: Check all running containers
become: yes
command: docker ps --format "{{ \.Names }}"
register: dkr_ps
- debug: msg="{{dkr_ps}}"
ただし、コマンドモジュールで実行されているdocker cmdがまだ存在し、次のエラーが発生します。
TemplateSyntaxError: unexpected char u'\\' at 23
line 1
私がきちんと脱出できないようですが?
答え1
コマンドに必要なテンプレートdocker
とAnsibleで使用されるJinja2テンプレートの2つの競合するテンプレートがあります。 Jinja2はどちらが無効かを説明しようとします{{ .Names }}
。これがエラーメッセージのソースです。
一般的な経験則は、テンプレートシンボルを有効なJinja2式に変換してDockerテンプレートをエスケープすることです。
command: docker ps --format "{{ '{{' }} .Names {{ '}}' }}"
答え2
エスケープ引用符と中括弧
- command: 'docker ps --format \"\{\{ .Names \}\}\"'
まずテストしてみてください。例えば
- command: 'echo docker ps --format \"\{\{ .Names \}\}\"'
register: result
- debug:
var: result.cmd|join(' ')
与えられた
result.cmd|join(' '): echo docker ps --format "{{ .Names }}"
答え3
答え4
最近追加docker_psGalaxy コレクションの pytoccaz.docker モジュールは、辞書リストを出力として含める優れたソリューションを提供します。