Linux
ansible 列出 docker 容器
我有一本劇本,其中一項任務收集有關在特定主機上執行 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
我假設我沒有正確逃脫?
您有兩個衝突的模板:
docker
命令預期的模板和 Ansible 中使用的 Jinja2 模板。Jinja2 試圖解釋{{ .Names }}
哪個無效;這就是錯誤消息的來源。一般的經驗法則是通過將模板符號轉換為有效的 Jinja2 表達式來轉義 Docker 模板:
command: docker ps --format "{{ '{{' }} .Names {{ '}}' }}"
轉義引號和大括號
- 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 }}"