main.yml 4.3 KB

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