main.yml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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
  24. - python-docker-py
  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='service_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='service_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. changed_when: false
  78. - name: Create persistent container directories
  79. include_tasks: create_dirs.yml # can't loop a block
  80. with_items:
  81. - "{{ persistent_container_dirs }}"
  82. loop_control:
  83. label: "{{ item }}"
  84. #- name: Modify SELinux contexts for container directories
  85. # sefcontext:
  86. # target: "{{ item | quote }}(/.*)?"
  87. # setype: container_file_t
  88. # state: present
  89. # with_items:
  90. # - "{{ persistent_container_dirs }}"
  91. # notify: Apply SELinux contexts
  92. - name: Copy systemd service file
  93. template:
  94. src: service.j2
  95. dest: /etc/systemd/system/{{ item }}.service
  96. owner: root
  97. group: root
  98. mode: '0640'
  99. notify: Refresh systemd service files
  100. with_items:
  101. - "{{ containers | map(attribute='service_name') | flatten }}"
  102. - name: Copy script for automated docker pull
  103. template:
  104. src: docker-pull.sh.j2
  105. dest: /usr/local/bin/docker-pull.sh
  106. owner: root
  107. group: root
  108. mode: '0750'
  109. - name: Install docker-pull systemd artifacts
  110. template:
  111. src: docker-pull.{{ item }}.j2
  112. dest: /etc/systemd/system/docker-pull.{{ item }}
  113. owner: root
  114. group: root
  115. mode: '0750'
  116. loop:
  117. - service
  118. - timer
  119. loop_control:
  120. label: docker-pull.{{ item }}
  121. - name: Install docker-purge systemd artifacts
  122. template:
  123. src: docker-purge.{{ item }}.j2
  124. dest: /etc/systemd/system/docker-purge.{{ item }}
  125. owner: root
  126. group: root
  127. mode: '0644'
  128. notify: Refresh systemd service files
  129. loop:
  130. - service
  131. - timer
  132. loop_control:
  133. label: docker-purge.{{ item }}
  134. - meta: flush_handlers
  135. - name: Open up firewall ports
  136. firewalld:
  137. port: "{{ item }}"
  138. permanent: yes
  139. state: enabled
  140. with_items:
  141. - "{{ firewall_ports }}"
  142. - name: Start/enable services
  143. systemd:
  144. name: "{{ item }}"
  145. enabled: yes
  146. state: started
  147. with_items:
  148. - "{{ containers | map(attribute='service_name') | flatten }}"
  149. - name: Enable docker timers for automated pull & cleanup
  150. systemd:
  151. name: "{{ item }}"
  152. enabled: yes
  153. state: started
  154. loop:
  155. - docker-pull.timer
  156. - docker-purge.timer