main.yml 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. ---
  2. - name: Install podman
  3. ansible.builtin.package:
  4. name: podman
  5. state: present
  6. - name: Create container group
  7. ansible.builtin.group:
  8. name: "{{ container_group }}"
  9. gid: "{{ container_gid }}"
  10. - name: Create container user
  11. ansible.builtin.user:
  12. name: "{{ container_user }}"
  13. uid: "{{ container_uid }}"
  14. group: "{{ container_group }}"
  15. - name: Generate list of persistent container directories
  16. ansible.builtin.set_fact:
  17. persistent_container_dirs: "{{ containers | map(attribute='volumes') | flatten | map('regex_replace', ':.*' ) | list }}"
  18. - name: Create persistent container directories
  19. ansible.builtin.file:
  20. path: "{{ item }}"
  21. state: directory
  22. owner: "{{ container_user | default('root') }}"
  23. group: "{{ container_group | default('root') }}"
  24. mode: '0770'
  25. with_items:
  26. - "{{ persistent_container_dirs }}"
  27. failed_when: false
  28. loop_control:
  29. label: "{{ item }}"
  30. - name: Create quadlet .container files
  31. containers.podman.podman_container:
  32. name: "{{ item.name }}"
  33. state: quadlet
  34. image: "{{ item.image }}"
  35. generate_systemd:
  36. names: True
  37. after: "{{ item.after | default(omit) }}"
  38. restart_sec: "{{ item.restart_sec | default(omit) }}"
  39. requires: "{{ item.requires | default(omit) }}"
  40. restart_policy: "{{ item.restart_policy | default(omit) }}"
  41. privileged: "{{ item.privileged | default(omit) }}"
  42. network: "{{ item.networks | default(omit) }}"
  43. env: "{{ item.environment | default(omit) }}"
  44. cap_add: "{{ item.cap_add | default(omit) }}"
  45. volumes: "{{ item.volumes | default(omit) }}"
  46. device: "{{ item.devices | default(omit) }}"
  47. ports: "{{ item.ports | default(omit) }}"
  48. quadlet_options:
  49. - "AutoUpdate=registry"
  50. - "Pull=newer"
  51. - |
  52. [Install]
  53. WantedBy=default.target
  54. {{ item.quadlet_options | default('') }}
  55. with_items:
  56. - "{{ containers }}"
  57. when:
  58. - containers is defined
  59. loop_control:
  60. label: "{{ item.name }}"
  61. notify:
  62. - Daemon Reload
  63. - name: Set up cron to auto-clear old Container data
  64. ansible.builtin.cron:
  65. name: "clean old container data"
  66. minute: "25"
  67. hour: "13"
  68. weekday: "2"
  69. job: "podman system prune -f"
  70. - name: Flush handlers
  71. meta: flush_handlers