Ansibleリストドッカーコンテナ

Ansibleリストドッカーコンテナ

特定のホストで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

シェルコマンドを使用して次のコマンドを実行することもできます。 sudo docker コンテナ ls -a

別のアイデア:

    - name: docker container ls -a
      tags: container_ls
      become: True
      shell:
        "docker container ls -a"
      register: container_info

    - name: docker container ls -a result
      tags: container_ls
      debug:
        msg: "{{container_info.stdout_lines}}"

ここに画像の説明を入力してください。

答え4

最近追加docker_psGalaxy コレクションの pytoccaz.docker モジュールは、辞書リストを出力として含める優れたソリューションを提供します。

関連情報