main.yml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. privileged: "{{ item.privileged | default(omit) }}"
  76. network: "{{ item.networks | default(omit) }}"
  77. env: "{{ item.environment | default(omit) }}"
  78. cap_add: "{{ item.cap_add | default(omit) }}"
  79. volumes: "{{ item.volumes | default(omit) }}"
  80. device: "{{ item.devices | default(omit) }}"
  81. ports: "{{ item.ports | default(omit) }}"
  82. quadlet_options:
  83. - "AutoUpdate=registry"
  84. - "Pull=newer"
  85. - |
  86. [Install]
  87. WantedBy=default.target
  88. with_items:
  89. - "{{ containers }}"
  90. when:
  91. - containers is defined
  92. loop_control:
  93. label: "{{ item.name }}"
  94. notify:
  95. - Daemon Reload
  96. - name: Flush handlers
  97. meta: flush_handlers
  98. # Containers are automatically enabled via WantedBy=default.target entries
  99. - name: Start Container Services
  100. ansible.builtin.systemd_service:
  101. name: "{{ item.name }}"
  102. state: started
  103. with_items:
  104. - "{{ containers }}"
  105. when:
  106. - containers is defined
  107. loop_control:
  108. label: "{{ item.name }}"