main.yml 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. loop_control:
  28. label: "{{ item }}"
  29. - name: Create quadlet file for podman networks
  30. containers.podman.podman_network:
  31. name: "{{ item.name }}"
  32. state: quadlet
  33. quadlet_options:
  34. - |
  35. [Install]
  36. WantedBy=default.target
  37. notify:
  38. - Daemon Reload
  39. with_items:
  40. - "{{ container_networks }}"
  41. when:
  42. - container_networks is defined
  43. loop_control:
  44. label: "{{ item.name }}"
  45. - name: Flush Handlers
  46. meta: flush_handlers
  47. - name: Start Podman Networks
  48. ansible.builtin.systemd_service:
  49. name: "{{ item.name }}-network"
  50. state: started
  51. with_items:
  52. - "{{ container_networks }}"
  53. when:
  54. - container_networks is defined
  55. loop_control:
  56. label: "{{ item.name }}"
  57. - name: Create quadlet .pod files
  58. containers.podman.podman_pod:
  59. name: "{{ item.name }}"
  60. state: quadlet
  61. ports: "{{ item.ports | default(omit) }}"
  62. with_items:
  63. - "{{ containers }}"
  64. when:
  65. - containers is defined
  66. loop_control:
  67. label: "{{ item.name }}"
  68. notify:
  69. - Daemon Reload
  70. - name: Create quadlet .container files
  71. containers.podman.podman_container:
  72. name: "{{ item.name }}"
  73. state: quadlet
  74. image: "{{ item.image }}"
  75. env: "{{ item.environment | default(omit) }}"
  76. ports: "{{ item.ports | default(omit) }}"
  77. cap_add: "{{ item.cap_add | default(omit) }}"
  78. volumes: "{{ item.volumes | default(omit) }}"
  79. network: "{{ item.networks | default(omit) }}"
  80. quadlet_options:
  81. - "AutoUpdate=registry"
  82. - "Pull=newer"
  83. - |
  84. [Install]
  85. WantedBy=default.target
  86. with_items:
  87. - "{{ containers }}"
  88. when:
  89. - containers is defined
  90. loop_control:
  91. label: "{{ item.name }}"
  92. notify:
  93. - Daemon Reload
  94. - name: Flush handlers
  95. meta: flush_handlers
  96. # Containers are automatically enabled via WantedBy=default.target entries
  97. - name: Start Container Services
  98. ansible.builtin.systemd_service:
  99. name: "{{ item.name }}"
  100. state: started
  101. with_items:
  102. - "{{ containers }}"
  103. when:
  104. - containers is defined
  105. loop_control:
  106. label: "{{ item.name }}"