---
- name: Install lxc tools
  ansible.builtin.apt:
    name:
      - lxc
      - debootstrap
      - xz-utils

- name: python-lxc is installed (Debian <= 10)
  ansible.builtin.apt:
    name: python-lxc
    state: present
  when: ansible_python_version is version('3', '<')

- name: python3-lxc is installed (Debian >= 10)
  ansible.builtin.apt:
    name: python3-lxc
    state: present
  when: ansible_python_version is version('3', '>=')

- name: Install additional packages (Debian >= 10)
  ansible.builtin.apt:
    name:
      - apparmor
      - lxc-templates
  when: ansible_distribution_major_version is version('10', '>=')

- name: Copy LXC default containers configuration
  ansible.builtin.template:
    src: default.conf
    dest: /etc/lxc/

- name: Check if root has subuids
  ansible.builtin.command:
    cmd: grep '^root:100000:10000$' /etc/subuid
  failed_when: False
  changed_when: False
  register: root_subuids
  when: lxc_unprivilegied_containers | bool

- name: Add subuid and subgid ranges to root
  ansible.builtin.command:
    cmd: usermod -v 100000-199999 -w 100000-109999 root
  when:
    - lxc_unprivilegied_containers | bool
    - root_subuids.rc != 0

- name: Get filesystem options
  ansible.builtin.command:
    cmd: findmnt --noheadings --target /var/lib/lxc --output OPTIONS
  changed_when: False
  check_mode: no
  register: check_fs_options

- name: Check if options are correct
  ansible.builtin.assert:
    that:
      - "'nodev'  not in check_fs_options.stdout"
      - "'noexec' not in check_fs_options.stdout"
      - "'nosuid' not in check_fs_options.stdout"
    msg: "LXC directory is in a filesystem with incompatible options"

- name: Create containers
  ansible.builtin.include: create-container.yml
  vars:
    name: "{{ item.name }}"
    release: "{{ item.release }}"
  loop: "{{ lxc_containers }}"
