ansible 列出 docker 容器

dej*_*dej 6 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}}"

Run Code Online (Sandbox Code Playgroud)

但不知何故,由命令模块运行的 docker cmd 仍然存在,并抛出以下错误:

TemplateSyntaxError: unexpected char u'\\' at 23
  line 1
Run Code Online (Sandbox Code Playgroud)

我想我没有正确逃脱?

Ste*_*itt 6

您有两个相互冲突的模板:命令所需的模板docker和 Ansible 中使用的 Jinja2 模板。Jinja2 正在尝试解释{{ .Names }}哪个 \xe2\x80\x99t 有效;错误消息来自\xe2\x80\x99s。

\n

一般经验法则是通过将模板符号转换为有效的 Jinja2 表达式来转义 Docker 模板:

\n
command: docker ps --format "{{ '{{' }} .Names {{ '}}' }}"\n
Run Code Online (Sandbox Code Playgroud)\n

  • 在我看来,指定 `ps` 的输出格式比使用 AWK 过滤它要好。我不知道合适的模块,但我不是 Ansible 专家。 (2认同)