Hello, Does anyone have by any chance an ansible playbook to setup docker on a debian trixie?

This is my first experience with Ansible, i thought this would be easy and straightforward. I used existing ones for debian 12 as template and yes, with ai, and taking things from other templates, i am trying to make this work. but for the life of me, i cannot crack this.

i began with the most simple steps:

- name: install Docker
  hosts: all
  become: true
  tasks:
    - name: Install apt-transport-https
      ansible.builtin.apt:
        name:
          - apt-transport-https
          - ca-certificates
          - lsb-release
          - gnupg
        state: latest
        update_cache: true

    - name: Create keyrings directory
      ansible.builtin.file:
        path: /etc/apt/keyrings
        state: directory
        mode: '0755'

    - name: Add Docker GPG key
      ansible.builtin.shell: |
        curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
        chmod a+r /etc/apt/keyrings/docker.gpg
      args:
        creates: /etc/apt/keyrings/docker.gpg

    - name: Add Docker repository
      ansible.builtin.apt_repository:
        repo: "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian trixie stable"
        state: present
        filename: docker

    - name: Install Docker
      ansible.builtin.apt:
        name:
          - docker-ce
          - docker-ce-cli
          - containerd.io
          - docker-buildx-plugin
          - docker-compose-plugin
        state: latest
        update_cache: true

and added some debug stuff that really didnt help that much:

- name: Install Docker Engine and Docker Compose on Debian (Ansible WebUI compatible)
  hosts: all
  become: true
  become_user: root

  vars:
    docker_packages:
      - docker-ce
      - docker-ce-cli
      - containerd.io
      - docker-buildx-plugin
      - docker-compose-plugin

  tasks:

    - name: Ensure required packages are installed
      apt:
        name:
          - ca-certificates
          - curl
          - gnupg
        update_cache: yes
        state: present
      delegate_to: "{{ inventory_hostname }}"

    - name: Ensure /etc/apt/keyrings exists
      file:
        path: /etc/apt/keyrings
        state: directory
        mode: '0755'
      delegate_to: "{{ inventory_hostname }}"

    - name: Get system architecture for Docker repo
      ansible.builtin.command: dpkg --print-architecture
      register: dpkg_architecture
      changed_when: false
      delegate_to: "{{ inventory_hostname }}"

    - name: Download Docker GPG key
      ansible.builtin.get_url:
        url: https://download.docker.com/linux/debian/gpg
        dest: /etc/apt/keyrings/docker.asc
        mode: '0644'
      delegate_to: "{{ inventory_hostname }}"

    - name: DEBUG - Check if GPG key exists
      ansible.builtin.stat:
        path: /etc/apt/keyrings/docker.asc
      register: gpg_key_stat
      delegate_to: "{{ inventory_hostname }}"

    - name: DEBUG - Show GPG key status
      ansible.builtin.debug:
        msg: "GPG key exists: {{ gpg_key_stat.stat.exists }}, Size: {{ gpg_key_stat.stat.size | default('N/A') }}"

    - name: DEBUG - List keyrings directory
      ansible.builtin.command: ls -lah /etc/apt/keyrings/
      register: keyrings_list
      delegate_to: "{{ inventory_hostname }}"

    - name: DEBUG - Show keyrings directory contents
      ansible.builtin.debug:
        var: keyrings_list.stdout_lines

    - name: Add Docker APT repository (correct for Debian 13)
      ansible.builtin.apt_repository:
        repo: "deb [arch={{ dpkg_architecture.stdout }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian {{ ansible_distribution_release }} stable"
        filename: docker
        state: present
      delegate_to: "{{ inventory_hostname }}"

    - name: DEBUG - Check if repo file exists
      ansible.builtin.stat:
        path: /etc/apt/sources.list.d/docker.list
      register: repo_file_stat
      delegate_to: "{{ inventory_hostname }}"

    - name: DEBUG - Show repo file status
      ansible.builtin.debug:
        msg: "Repo file exists: {{ repo_file_stat.stat.exists }}"

    - name: DEBUG - Show repo file contents if exists
      ansible.builtin.command: cat /etc/apt/sources.list.d/docker.list
      register: repo_contents
      when: repo_file_stat.stat.exists
      failed_when: false
      delegate_to: "{{ inventory_hostname }}"

    - name: DEBUG - Display repo contents
      ansible.builtin.debug:
        var: repo_contents.stdout_lines
      when: repo_file_stat.stat.exists

    - name: Update apt cache after adding repo
      apt:
        update_cache: yes
      delegate_to: "{{ inventory_hostname }}"

    - name: Install Docker packages
      apt:
        name: "{{ docker_packages }}"
        state: present
      delegate_to: "{{ inventory_hostname }}"

    - name: Enable & start Docker
      service:
        name: docker
        state: started
        enabled: yes
      delegate_to: "{{ inventory_hostname }}"

but everytime it fails at adding the package because its not found. because the repo was not added, my keyrings folder is miserably empty.

the target server has only root. so no user confusion there. yes, i know. bad practice. but its a learning exercise and its a lxc within my home network not internet exposed.

PLAY [Install Docker Engine and Docker Compose on Debian (Ansible WebUI compatible)] ***

TASK [Gathering Facts] *********************************************************
[WARNING]: Host 'anytype.lab' is using the discovered Python interpreter at '/usr/bin/python3.13', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.
ok: [anytype.lab]

TASK [Ensure required packages are installed] **********************************
changed: [anytype.lab]

TASK [Ensure /etc/apt/keyrings exists] *****************************************
ok: [anytype.lab]

TASK [Get system architecture for Docker repo] *********************************
skipping: [anytype.lab]

TASK [Download Docker GPG key] *************************************************
changed: [anytype.lab]

TASK [DEBUG - Check if GPG key exists] *****************************************
ok: [anytype.lab]

TASK [DEBUG - Show GPG key status] *********************************************
ok: [anytype.lab] => {
    "msg": "GPG key exists: False, Size: N/A"
}

TASK [DEBUG - List keyrings directory] *****************************************
skipping: [anytype.lab]

TASK [DEBUG - Show keyrings directory contents] ********************************
ok: [anytype.lab] => {
    "keyrings_list.stdout_lines": []
}

TASK [Add Docker APT repository (correct for Debian 13)] ***********************
changed: [anytype.lab]

TASK [DEBUG - Check if repo file exists] ***************************************
ok: [anytype.lab]

TASK [DEBUG - Show repo file status] *******************************************
ok: [anytype.lab] => {
    "msg": "Repo file exists: False"
}

TASK [DEBUG - Show repo file contents if exists] *******************************
skipping: [anytype.lab]

TASK [DEBUG - Display repo contents] *******************************************
skipping: [anytype.lab]

TASK [Update apt cache after adding repo] **************************************
changed: [anytype.lab]

TASK [Install Docker packages] *************************************************
[ERROR]: Task failed: Module failed: No package matching 'docker-ce' is available
Origin: /tmp/ansible-webui/repositories/1_ansibleplaybooksrepo/playbooks/debian13docker.yml:100:7

 98       delegate_to: "{{ inventory_hostname }}"
 99
100     - name: Install Docker packages
          ^ column 7

fatal: [anytype.lab]: FAILED! => {"changed": false, "msg": "No package matching 'docker-ce' is available"}

PLAY RECAP *********************************************************************
anytype.lab                : ok=11   changed=4    unreachable=0    failed=1    skipped=4    rescued=0    ignored=0   

I am using https://ansible-webui.oxl.app/ although i doubt it has any effect whatsoever. but then again, i know next to nothing of ansible as of yet. so, for sure: what i am missing is incredibly dumb.

any help will be greatly appreciated.

    • audricd@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      5 hours ago

      oh! I wasnt aware of that? i see its slightly outdated, it has version 26 as opposed to 29 from its official source. at least in trixie stable

  • themachine@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    15 hours ago

    It’s a learning exercise

    Then crack open the documentation and learn how to actually write and use ansible

    • Matt The Horwood@lemmy.horwood.cloud
      link
      fedilink
      English
      arrow-up
      1
      ·
      6 hours ago

      you need to use deb822 as the repo module, like this

      - name: Setup deb822 formatted repositorie
        ansible.builtin.deb822_repository:
          name: php
          types: deb
          uris: https://download.docker.com/linux/debian
          components: stable
          suites: "{{ ansible_distribution_release }}"
          signed_by: https://download.docker.com/linux/debian/gpg
          state: present
          enabled: true
        when: (ansible_distribution == 'Debian' and ansible_distribution_major_version >= '13')
      
      • audricd@lemmy.mlOP
        link
        fedilink
        English
        arrow-up
        1
        ·
        5 hours ago

        hum unfortunately either im doing something else wrong or its not working for me

        ---
        - name: Install Docker Engine and Docker Compose on Debian (Ansible WebUI compatible)
          hosts: all
          become: true
          become_user: root
        
          vars:
            docker_packages:
              - docker-ce
              - docker-ce-cli
              - containerd.io
              - docker-buildx-plugin
              - docker-compose-plugin
        
          tasks:
        
            - name: Ensure required packages are installed
              apt:
                name:
                  - ca-certificates
                  - curl
                  - gnupg
                update_cache: yes
                state: present
              delegate_to: "{{ inventory_hostname }}"
        
            - name: Ensure /etc/apt/keyrings exists
              file:
                path: /etc/apt/keyrings
                state: directory
                mode: '0755'
              delegate_to: "{{ inventory_hostname }}"
        
            - name: Get system architecture for Docker repo
              ansible.builtin.command: dpkg --print-architecture
              register: dpkg_architecture
              changed_when: false
              delegate_to: "{{ inventory_hostname }}"
        
            - name: Setup deb822 formatted repositorie
              ansible.builtin.deb822_repository:
                name: php
                types: deb
                uris: https://download.docker.com/linux/debian
                components: stable
                suites: "{{ ansible_distribution_release }}"
                signed_by: https://download.docker.com/linux/debian/gpg
                state: present
                enabled: true
              when: (ansible_distribution == 'Debian' and ansible_distribution_major_version >= '13')
        
            - name: Download Docker GPG key
              ansible.builtin.get_url:
                url: https://download.docker.com/linux/debian/gpg
                dest: /etc/apt/keyrings/docker.asc
                mode: '0644'
              delegate_to: "{{ inventory_hostname }}"
        
            - name: DEBUG - Check if GPG key exists
              ansible.builtin.stat:
                path: /etc/apt/keyrings/docker.asc
              register: gpg_key_stat
              delegate_to: "{{ inventory_hostname }}"
        
            - name: DEBUG - Show GPG key status
              ansible.builtin.debug:
                msg: "GPG key exists: {{ gpg_key_stat.stat.exists }}, Size: {{ gpg_key_stat.stat.size | default('N/A') }}"
        
            - name: DEBUG - List keyrings directory
              ansible.builtin.command: ls -lah /etc/apt/keyrings/
              register: keyrings_list
              delegate_to: "{{ inventory_hostname }}"
        
            - name: DEBUG - Show keyrings directory contents
              ansible.builtin.debug:
                var: keyrings_list.stdout_lines
        
            - name: Add Docker APT repository (correct for Debian 13)
              ansible.builtin.apt_repository:
                repo: "deb [arch={{ dpkg_architecture.stdout }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian {{ ansible_distribution_release }} stable"
                filename: docker
                state: present
              delegate_to: "{{ inventory_hostname }}"
        
            - name: DEBUG - Check if repo file exists
              ansible.builtin.stat:
                path: /etc/apt/sources.list.d/docker.list
              register: repo_file_stat
              delegate_to: "{{ inventory_hostname }}"
        
            - name: DEBUG - Show repo file status
              ansible.builtin.debug:
                msg: "Repo file exists: {{ repo_file_stat.stat.exists }}"
        
            - name: DEBUG - Show repo file contents if exists
              ansible.builtin.command: cat /etc/apt/sources.list.d/docker.list
              register: repo_contents
              when: repo_file_stat.stat.exists
              failed_when: false
              delegate_to: "{{ inventory_hostname }}"
        
            - name: DEBUG - Display repo contents
              ansible.builtin.debug:
                var: repo_contents.stdout_lines
              when: repo_file_stat.stat.exists
        
            - name: Update apt cache after adding repo
              apt:
                update_cache: yes
              delegate_to: "{{ inventory_hostname }}"
        
            - name: Install Docker packages
              apt:
                name: "{{ docker_packages }}"
                state: present
              delegate_to: "{{ inventory_hostname }}"
        
            - name: Enable & start Docker
              service:
                name: docker
                state: started
                enabled: yes
              delegate_to: "{{ inventory_hostname }}"
        
        
        PLAY [Install Docker Engine and Docker Compose on Debian (Ansible WebUI compatible)] ***
        
        TASK [Gathering Facts] *********************************************************
        [WARNING]: Host 'anytype.lab' is using the discovered Python interpreter at '/usr/bin/python3.13', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.
        ok: [anytype.lab]
        
        TASK [Ensure required packages are installed] **********************************
        changed: [anytype.lab]
        
        TASK [Ensure /etc/apt/keyrings exists] *****************************************
        ok: [anytype.lab]
        
        TASK [Get system architecture for Docker repo] *********************************
        skipping: [anytype.lab]
        
        TASK [Setup deb822 formatted repositorie] **************************************
        changed: [anytype.lab]
        
        TASK [Download Docker GPG key] *************************************************
        changed: [anytype.lab]
        
        TASK [DEBUG - Check if GPG key exists] *****************************************
        ok: [anytype.lab]
        
        TASK [DEBUG - Show GPG key status] *********************************************
        ok: [anytype.lab] => {
            "msg": "GPG key exists: False, Size: N/A"
        }
        
        TASK [DEBUG - List keyrings directory] *****************************************
        skipping: [anytype.lab]
        
        TASK [DEBUG - Show keyrings directory contents] ********************************
        ok: [anytype.lab] => {
            "keyrings_list.stdout_lines": []
        }
        
        TASK [Add Docker APT repository (correct for Debian 13)] ***********************
        changed: [anytype.lab]
        
        TASK [DEBUG - Check if repo file exists] ***************************************
        ok: [anytype.lab]
        
        TASK [DEBUG - Show repo file status] *******************************************
        ok: [anytype.lab] => {
            "msg": "Repo file exists: False"
        }
        
        TASK [DEBUG - Show repo file contents if exists] *******************************
        skipping: [anytype.lab]
        
        TASK [DEBUG - Display repo contents] *******************************************
        skipping: [anytype.lab]
        
        TASK [Update apt cache after adding repo] **************************************
        changed: [anytype.lab]
        
        TASK [Install Docker packages] *************************************************
        [ERROR]: Task failed: Module failed: No package matching 'docker-ce' is available
        Origin: /tmp/ansible-webui/repositories/1_ansibleplaybooksrepo/playbooks/debian13docker.yml:112:7
        
        110       delegate_to: "{{ inventory_hostname }}"
        111
        112     - name: Install Docker packages
                  ^ column 7
        
        fatal: [anytype.lab]: FAILED! => {"changed": false, "msg": "No package matching 'docker-ce' is available"}
        
        PLAY RECAP *********************************************************************
        anytype.lab                : ok=12   changed=5    unreachable=0    failed=1    skipped=4    rescued=0    ignored=0   
        
        
        
  • dan@upvote.au
    link
    fedilink
    English
    arrow-up
    2
    ·
    19 hours ago

    I’d connect vis SSH and manually inspect the files that it’s supposed to be creating. Does apt update show any errors?