main.yml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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='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. 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: Copy systemd service file
  85. template:
  86. src: service.j2
  87. dest: /etc/systemd/system/{{ item }}.service
  88. owner: root
  89. group: root
  90. mode: '0640'
  91. notify: Refresh systemd service files
  92. with_items:
  93. - "{{ containers | map(attribute='name') | flatten }}"
  94. - name: Copy script for automated docker pull
  95. template:
  96. src: docker-pull.sh.j2
  97. dest: /usr/local/bin/docker-pull.sh
  98. owner: root
  99. group: root
  100. mode: '0750'
  101. - name: Install docker-pull systemd artifacts
  102. template:
  103. src: docker-pull.{{ item }}.j2
  104. dest: /etc/systemd/system/docker-pull.{{ item }}
  105. owner: root
  106. group: root
  107. mode: '0750'
  108. loop:
  109. - service
  110. - timer
  111. loop_control:
  112. label: docker-pull.{{ item }}
  113. - name: Install docker-purge systemd artifacts
  114. template:
  115. src: docker-purge.{{ item }}.j2
  116. dest: /etc/systemd/system/docker-purge.{{ item }}
  117. owner: root
  118. group: root
  119. mode: '0644'
  120. notify: Refresh systemd service files
  121. loop:
  122. - service
  123. - timer
  124. loop_control:
  125. label: docker-purge.{{ item }}
  126. - meta: flush_handlers
  127. - name: Open up firewall ports
  128. firewalld:
  129. port: "{{ item }}"
  130. permanent: yes
  131. state: enabled
  132. with_items:
  133. - "{{ firewall_ports }}"
  134. - name: Start/enable services
  135. systemd:
  136. name: "{{ item }}"
  137. enabled: yes
  138. state: started
  139. with_items:
  140. - "{{ containers | map(attribute='name') | flatten }}"
  141. - name: Enable docker timers for automated pull & cleanup
  142. systemd:
  143. name: "{{ item }}"
  144. enabled: yes
  145. state: started
  146. loop:
  147. - docker-pull.timer
  148. - docker-purge.timer