main.yml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. ---
  2. - name: Install docker packages (Fedora)
  3. dnf:
  4. name:
  5. - moby-engine
  6. - docker-compose
  7. state: present
  8. when:
  9. - ansible_distribution == 'Fedora'
  10. - block:
  11. - name: Enable docker-ce repo (CentOS)
  12. yum_repository:
  13. name: docker-ce
  14. enabled: yes
  15. description: Docker Community Edition
  16. baseurl: https://download.docker.com/linux/centos/$releasever/$basearch/stable
  17. gpgkey: https://download.docker.com/linux/centos/gpg
  18. gpgcheck: yes
  19. - name: Install docker packages (CentOS)
  20. yum:
  21. name:
  22. - docker-ce
  23. - docker-compose-plugin
  24. - python3-requests # for docker_network module
  25. state: present
  26. when:
  27. - ansible_distribution == 'CentOS'
  28. - name: Start/enable docker service
  29. systemd:
  30. name: docker
  31. state: started
  32. enabled: yes
  33. - name: Create docker service folders
  34. file:
  35. path: /root/docker/{{ item }}
  36. state: directory
  37. owner: root
  38. group: root
  39. mode: '0750'
  40. with_items:
  41. - "{{ containers | map(attribute='name') | flatten }}"
  42. - name: Create docker networks
  43. docker_network:
  44. name: "{{ item.name }}"
  45. ipam_config:
  46. - subnet: "{{ item.subnet }}"
  47. gateway: "{{ item.gateway }}"
  48. iprange: "{{ item.ip_range }}"
  49. state: present
  50. with_items:
  51. - "{{ container_networks }}"
  52. when:
  53. - container_networks is defined
  54. loop_control:
  55. label: "{{ item.name }}"
  56. - name: Write docker compose file
  57. template:
  58. src: docker-compose.yml.j2
  59. dest: /root/docker/{{ item }}/docker-compose.yml
  60. owner: root
  61. group: root
  62. mode: '0640'
  63. with_items:
  64. - "{{ containers | map(attribute='name') | flatten }}"
  65. - name: Create container group
  66. group:
  67. name: "{{ container_group }}"
  68. gid: "{{ container_gid }}"
  69. - name: Create container user
  70. user:
  71. name: "{{ container_user }}"
  72. uid: "{{ container_uid }}"
  73. group: "{{ container_group }}"
  74. - name: Generate list of persistent container directories
  75. set_fact:
  76. persistent_container_dirs: "{{ containers | map(attribute='volumes') | flatten | map('regex_replace', ':.*' ) | list }}"
  77. when:
  78. - containers.volumes is defined
  79. changed_when: false
  80. - name: Create persistent container directories
  81. include_tasks: create_dirs.yml # can't loop a block
  82. with_items:
  83. - "{{ persistent_container_dirs }}"
  84. loop_control:
  85. label: "{{ item }}"
  86. when:
  87. - persistent_container_dirs is defined
  88. - name: Copy systemd service file
  89. template:
  90. src: service.j2
  91. dest: /etc/systemd/system/{{ item }}.service
  92. owner: root
  93. group: root
  94. mode: '0640'
  95. notify: Refresh systemd service files
  96. with_items:
  97. - "{{ containers | map(attribute='name') | flatten }}"
  98. - name: Copy script for automated docker pull
  99. template:
  100. src: docker-pull.sh.j2
  101. dest: /usr/local/bin/docker-pull.sh
  102. owner: root
  103. group: root
  104. mode: '0750'
  105. - name: Install docker-pull systemd artifacts
  106. template:
  107. src: docker-pull.{{ item }}.j2
  108. dest: /etc/systemd/system/docker-pull.{{ item }}
  109. owner: root
  110. group: root
  111. mode: '0750'
  112. loop:
  113. - service
  114. - timer
  115. loop_control:
  116. label: docker-pull.{{ item }}
  117. - name: Install docker-purge systemd artifacts
  118. template:
  119. src: docker-purge.{{ item }}.j2
  120. dest: /etc/systemd/system/docker-purge.{{ item }}
  121. owner: root
  122. group: root
  123. mode: '0644'
  124. notify: Refresh systemd service files
  125. loop:
  126. - service
  127. - timer
  128. loop_control:
  129. label: docker-purge.{{ item }}
  130. - meta: flush_handlers
  131. - name: Open up firewall ports
  132. firewalld:
  133. port: "{{ item }}"
  134. permanent: yes
  135. state: enabled
  136. with_items:
  137. - "{{ firewall_ports }}"
  138. - name: Start/enable services
  139. systemd:
  140. name: "{{ item }}"
  141. enabled: yes
  142. state: started
  143. with_items:
  144. - "{{ containers | map(attribute='name') | flatten }}"
  145. - name: Enable docker timers for automated pull & cleanup
  146. systemd:
  147. name: "{{ item }}"
  148. enabled: yes
  149. state: started
  150. loop:
  151. - docker-pull.timer
  152. - docker-purge.timer
  153. - name: Add script for restarting all containers
  154. template:
  155. src: restart-containers.sh.j2
  156. dest: /usr/local/bin/restart-containers.sh
  157. owner: root
  158. group: root
  159. mode: '0750'
  160. - name: Check if dnf-automatic is enabled
  161. stat:
  162. path: /etc/systemd/system/dnf-automatic-install.service.d
  163. register: dnf_automatic
  164. - name: Modify dnf-automatic to turn off containers while updating
  165. template:
  166. src: stop-containers.conf.j2
  167. dest: /etc/systemd/system/dnf-automatic-install.service.d/stop-containers.conf
  168. owner: root
  169. group: root
  170. mode: '0644'
  171. when:
  172. - dnf_automatic.stat.exists
  173. notify:
  174. - Refresh systemd service files